对于使用DirectIO打开的文件,vfs_read返回-EFAULT(代码在内核空间中运行)

时间:2014-12-11 21:54:56

标签: c linux kernel

所以我想在Linux内核空间中模拟一个pread(使用DIRECT_IO)。所以我使用kmalloc在内核空间中分配一块内存并执行了vfs_read。 vfs_read希望将数据放在user_space缓冲区中。我通过执行set_fs(KERNEL_DS)来绕过该检查。总体而言,我的代码如下:

temp = (char*)kmalloc(count, GFP_KERNEL);

mm_segment_t old_fs;

old_fs = get_fs();
set_fs(KERNEL_DS);

ret = vfs_read(file, temp, count, &pos);

set_fs(old_fs);
kfree(tmp)

现在的问题是,上述方法只有在没有DIRECT_IO的情况下才能正常工作。使用DIRECT_IO,vfs_read将返回-EFAULT。

有人可以帮助我,以便我知道DIRECT_IO中的哪些限制被违反了吗?我知道count和pos都是4kb对齐。

0 个答案:

没有答案