インテルのホワイト ペーパーでは、次のように述べています。
Linux の MD RAID は、ext2 ファイル システムなどの Linux ファイル システム ドライバーと、AHCI ドライバーや SAS ドライバーなどの低レベルのハード ディスク ドライバーの間でデータをフィルター処理するブロック ドライバーです。
カーネルコードdrivers/md/md.c
では、これしか見つかりませんfile_operations
:
static const struct file_operations md_seq_fops = {
.owner = THIS_MODULE,
.open = md_seq_open,
.read = seq_read,
.llseek = seq_lseek,
.release = seq_release_private,
.poll = mdstat_poll,
};
md_fops には読み取りも書き込みもありません:
static const struct block_device_operations md_fops =
{
.owner = THIS_MODULE,
.open = md_open,
.release = md_release,
.ioctl = md_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = md_compat_ioctl,
#endif
.getgeo = md_getgeo,
.media_changed = md_media_changed,
.revalidate_disk= md_revalidate,
};
これは、MD ドライバーが実行する file_operations を開く、読み取る... ですか? MD ドライバーはどのようにデータを書き込みますか? AHCI ドライバーを使用しますか?
write syscall が呼び出されたとき、データを書き込む手順は何ですか?
sys_write -> vfs_write -> file->f_op->write または do_sync_write? md_seq_fops には write も aio_write もありません