эквивалентность pread в пространстве ядра Linux (с O_DIRECT)

Я работаю с зондом systemtap, который находится в пространстве ядра Linux, поэтому я не могу использовать обычный системный вызов pread. Есть ли эквивалент системного вызова pread в пространстве ядра?

мой друг нашел это: http://lxr.free-electrons.com/source/fs/read_write.c?v=2.6.32#L433 но какой заголовочный файл мне нужно включить?

Спасибо!

Эрбен


person Erben Mo    schedule 03.12.2014    source источник


Ответы (1)


Системный вызов pread на самом деле вызывает vfs_read(), поэтому вы можете использовать vfs_read() в пространстве ядра.

vfs_read — это экспортируемый символ, и вам не нужно включать какой-либо заголовочный файл.

person Andiry Xu    schedule 04.12.2014
comment
Спасибо! другое дело, vfs_read, кажется, берет буфер только в пользовательском пространстве. Если сделать kmalloc и передать буфер vfs_read, он вернет EFAULT. Есть ли способ получить память user_space из kernel_space? - person Erben Mo; 11.12.2014