Трассировки ядра возвращают усеченное сообщение

Msgstr "Файл, возможно, усечён. Нужен по крайней мере%ld размер, но размер%ld". Может кто-нибудь помочь мне, как это сообщение вызывается? Я вижу это сообщение, когда пытаюсь собрать трассировку ядра. Может кто-нибудь объяснить, почему этот сценарий происходит, когда я пытаюсь собрать трассировку ядра?

Еще одна вещь, которую я заметил, - когда я пытаюсь собрать трассировку ядра в первый раз, я вижу вышеупомянутое сообщение. Когда я пытаюсь собрать мгновенно снова, я могу собрать журналы. Но когда я пытаюсь собрать снова через>5 минут, я вижу сообщение выше.

1 ответ

Хорошо, это поведение ядра, когда вы пытаетесь получить / собрать огромную информацию за один раз.

Как только это произойдет, в вашем случае вам нужно снова вызвать действие, которое вы сделали, чтобы ядро ​​понимало, что вы действительно хотите отобразить эту огромную информацию. Вот почему вы можете собрать трассировку ядра со второй попытки.

Если я не ошибаюсь, то, что вы на самом деле делаете, вызывает системный вызов read(), который попытается прочитать и посчитать байты из fd в буфер, начиная с buf.

Как вы можете прочитать read_write.c из исходного кода ядра Linux, rw_verify_area функция не любит огромные counts, Таким образом, это ограничивает их тем, что вписывается в int в общем. Так что он не должен будет делать проверки диапазона все время.

TL; DR

То, что вы получили, не является ошибкой, скорее всего, это функция, которая не позволяет ядру бороться с открытием огромных файлов по ошибке от пользователя. Это ограничение создано rw_verify_area функция в ядре Linux. Таким образом, он предназначен, чтобы по крайней мере дважды вызвать системный вызов read для получения ваших данных.

Другие вопросы по тегам