Linux内核 - 内核中哪些是物理写入特定磁盘分区的数据块?

Spd*_*Str 6 kernel kernel-module linux-kernel

我正在修改Linux内核,并试图找到内核源数据块的哪些内容物理写入磁盘分区,如ubd0.这在核心源中发生了什么?实际的实际写入电话?我找不到这个.谢谢!

编辑:最终目标是已写入几个不同分区的块编号列表.当数据物理写入列表时,将返回并维护写入的块编号.

Whi*_*ind 1

这取决于特定的驱动程序和设备类型。对于 SCSI 设备,SCSI 命令转到设备驱动程序。它们在SCSI层生成,并由设备的驱动程序发送到设备,然后再发送到设备。

在将数据推送到设备之前,sys_write 系统调用存在大量抽象,设备驱动程序本身可能甚至不知道它正在执行写入操作。

对于您的编辑,请查看 blktrace: http://linux.die.net/man/8/blktrace

好吧,另一个答案;你会更喜欢这个。这发生在 generic_make_request 中。评论非常具有描述性: http://lxr.linux.no/#linux+v2.6.32/block/blk-core.c#L1380

该函数中的bio结构,请参见此处: http://lxr.linux.no/#linux+v2.6.32/include/linux/bio.h#L58

显示bio_vec,它是发送到设备的内容的列表。

q->make_request_fn(q,bio); 是对设备本身的实际函数指针调用。

http://lxr.linux.no/#linux+v2.6.32/include/linux/types.h#L126

显示如何使用索引写入分区。您应该注意,这不仅仅用于写入。