如何从Kthread的循环中写入来自新Linux系统调用的文件

时间:2017-03-08 17:15:17

标签: c linux linux-kernel kernel ubuntu-16.04

我使用kthread作为工作者来写入文件。我希望kthread在初始系统调用终止后继续写入。线程正在从缓冲区写入数据。我像这样打开文件和kthread:

f = filp_open(file, O_RDWR | O_APPEND, 0);
if (!f)
{
    return -1;
}
running_thread = kthread_run(write_to_disk_thread, (void*)&thread_args, "write_to_disk");

然后我在线程的循环中运行此代码。 text_to_append是要从缓冲区写入的下一个char *。它由kmalloc()创建,然后在每个循环中将数据加入其中。 popped_length是它的长度。

loff_t pos = f->f_pos;
__kernel_write(f, text_to_append, popped_length, &pos);
pos += popped_length;
set_fs(KERNEL_DS);
__fput_sync(f);
f->f_pos = pos;
vfs_fsync_range(f, pos-popped_length, pos, 1);
set_fs(old_fs);`

当我运行我的代码时,我得到一个空指针错误,但仅在循环的第二次迭代中。

screenshot of error

0 个答案:

没有答案