我使用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);`
当我运行我的代码时,我得到一个空指针错误,但仅在循环的第二次迭代中。