21 Apr
2016
вот предположим есть у меня character device в /dev и какая-то скотина в юзерспейсе его открыла и не хочет закрывать.
Тем временем мы внутри ядра вызываем анрегистрацию этого девайса. Другими словами из /dev он пропадает.
Что происхоодит с user space приложением и его запросами по файловому дескриптору?
omsklug, в dmesg я вижу "Unaligned access page fault".
Я до сих пор не верю что линукс автоматом не удаляет эти файловые дескрпторы из своих внутренних таблиц.
Если процесс в D-state и ждет конца io с этого устройства, то процесс приостанавливается до завершения I/O. После отключения устройства дескриптор пропадает из таблицы ядра, но выполняющееся приложение имеет в своем стеке копию значения этого дескриптора. Поскольку процесс все ещё ждет конца i/o, а память, выделенная ioremap() уже освобождена, но принадлежит виртуальной памяти процесса будут major page fault, а на сигналы приложение реагировать не будет. Ребутай машину.
Супер! Спасибо. Записали.