Добрый день.
Ядро Linux 2.6.17 процессор sh4.
Есть модуль который переопределяет функию readpage структуры:
static struct address_space_operations my_asops = {
readpage: my_iop_readpage
};
char *buf;
struct file *filp;
filp->f_op->read(filp, buf, readlen,&(filp->f_pos))
Судя по исходному коду ядра вызов передается do_sync_read (отсюда делаю вывод, что функция синхронная). Но происходит следующее, если запустить на исполнение програму, обращение к которой перехватывает мой модуль,то можно заметить, что при наличии в коде модуля, задержек (например printk), страницы (struct page) заполняются данными и програма успешно запускаются. Если убрать все задержки то при первом запуске програма падает с SEGFAULT при втором BUS ERROR (либо наоборот порядок не известен), при третьем успешно запускается.
Если функция read асинхронная то насколько я понимаю при недоступности данных она должна вернуть некий код (что-то типа EAGAIN), но read все время возвращает кол-во прочитанных данных.