作者:沈岩
转载请注明出处。
我发现国内研究zfs的同学非常少,如果你也跟我有相同的爱好,研究zfs,请告诉我,相互学习。
商业文件系统zfs是文件系统当中相当出色的一个了,由sun公司开发。
spa_sync函数负责同步spa中所有的内容到磁盘。
然后会同步dsl,之后就是同步dbuf,将dmu buffer中的内容同步到磁盘上。
dbuf_sync_list 负责同步的主要工作,他是一个递归函数,同步两种类型,分两种{sync_leaf,sync_indirect(会调用sync_list )}。
dbuf_sync_leaf 和 dbuf_sync_indirect 都会调用dbuf_write 函数,这个函数会将向下产生一个zio,这个zio将携带很多的写的相关信息,包括写的数据的偏移量,以及优先级信息。
db->db_data_pending 这个变量只有在sync_leaf和 sync_indirect 两个函数当中赋值了。
下面的代码仅仅出现在sync_leaf 和sync_indirect 两个函数中。
- db->db_data_pending = dr;
- mutex_exit(&db->db_mtx);
- dbuf_write(dr, *datap, tx);
而且dbuf_write 这个函数的作用是产生一个zio,这个zio的请求类型是ZIO_TYPE_WRITE 结构,
dbuf_write 并没有进行写磁盘的操作,只是zio_nowait()函数 或者zio_wait 函数进入了流水线,并进行真正的写磁盘的操作。
阅读(2437) | 评论(0) | 转发(0) |