Chinaunix

标题: write 系统调用从上到下是怎么到bio的产生的? [打印本页]

作者: goingstudy    时间: 2014-09-21 11:38
标题: write 系统调用从上到下是怎么到bio的产生的?
write()-> vfs -> fp_operation ->.... -> bio_alloc() ->generic_make_request -> IO scheduler

我就是想知道到具体到fp_operation后 ,再怎么产生bio,产生request的
可能有人会说在具体的驱动里,希望有经验的给说一下或给点代码提示
作者: goingstudy    时间: 2014-09-21 12:14
还有就是bio结构一般是在哪个层面产生的?
看ULK上应该是在generic block layer,并且这一层应该产生request,但是有些如loop设备,处理的是bio,并不需要request,那么loop应该是在哪一层?
作者: wait_rabbit    时间: 2014-09-21 20:37
本帖最后由 wait_rabbit 于 2014-09-21 20:39 编辑

一般就是把相应的 fd 挂在设备驱动的等待队列上,该等待队列是设备驱动提供,一旦驱动读写完毕,就会【唤 + 醒】等待该 fd 的用户进程。

fp_operation 中的 poll 函数是一个桥梁,负责将用户进程挂在驱动的等待队列上。

==========

靠,这也能遇到敏感词。括号中有啥敏感的地方??》
作者: hmsghnh    时间: 2014-09-23 10:27
你有没有去找啊,很容易的啊
vfs_write  ->   file->f_op->write   ->  do_sync_write  -> filp->f_op->aio_write  -> ext4_file_write ->generic_file_aio_write
  ->generic_perform_write ->a_ops->write_begin  ->ext4_write_begin  ->__block_write_begin


先是写到page cache 层,合适的时候调用 submit_bh   submit_bio 进行写操作
作者: smalloc    时间: 2014-09-25 15:14
本帖最后由 smalloc 于 2014-09-25 15:15 编辑

...




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2