LINUX.ORG.RU

[mmap][bus error]Нет свободного места на файловой системе

 


0

1

Есть переполненная файловая система. Свободного места нуль. Я могу создавать новые файлы, но записывать в них информацию — уже нет.

Я делаю в этой файловой системе файл fd, например, с помощью mkstemp. Потом я выполняю ftruncate (fd, getpagesize()). Наконец, mmap'лю этот файл в адресное пространство процесса. Все эти функции выполняются вроде как без ошибок, все правильно. Возвращают корректные значения.

При попытке записать что-то в эту память, указатель на которую получена функцией mmap, программа вылетает. Bus error.

Если программа вылетает, это значит, что в программе ошибка? Не может же хорошая программа вылетать только из-за того, что где-то там на файловой системе закончилось место… Я проверяю все значению, все функции выполняются правильно, никаких ошибок, я не хочу чтобы моя программа вылетала…

Объясните, пожалуйста, так и должно быть? Или такой ситуации можно как-то избежать? Или это ошибка в системе, может быть?

★★★★★

> Объясните, пожалуйста, так и должно быть?

Это «сумеречная зона» - поведение не специфицировано.

Или это ошибка в системе, может быть?

Нет.

Насколько я понимаю, выделение собственно места на диске под файл откладывается до момента обращения к замапленной странице файла; но, когда такое обращение происходит, выделить место невозможно. В таком случае стандартной реакцией обработчика страничного сбоя явлется возврат VM_FAULT_SIGBUS, который тебе виден как сигнал SIGBUS.

tailgunner ★★★★★
()
Ответ на: комментарий от AITap

SIGBUS слишком общий сигнал? Его появление может быть связано с гораздо более серьезными проблемами, чем простро недостаток свободного места на диске. Мне, собственно, именно это и не нравится, дело плёвое, а узнаю я о нем только с помощью такого серьезного сигнала.

anarquista ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.