- 博客(7)
- 收藏
- 关注
原创 layout commit 代码阅读
客户端在关闭文件之前进行flush操作时,会进行数据和元数据的提交操作,但由于带外时已将数据写回,因此并无脏页需要进行数据commit。这时仅进行元数据即layout commit操作即可。文件关闭后同样需要进行layout return工作。 static int __nfs_write_mapping(struct address_space *mapping, struct wri
2011-11-29 11:04:51 633
原创 layout driver 和nfs层脏页的接口
layout driver 需要的是一个逻辑位置连续的page list,nfs需要把从radix tree 获取的脏页进行合并,合并的判断函数如下所示。 当发现不能连续时候,则进入layout driver层,完成下刷。 static int nfs_can_coalesce_requests(struct nfs_page *prev,
2011-11-25 16:11:21 679
转载 atomic_t相关操作
所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作主要用于实
2011-11-24 14:53:34 8372
原创 layout commit 客户端流程
Int pnfs_layoutcommit_inode(structinode *inode, int sync) pnfs_layoutcommit_setup(调用layoutdriver 的设置函数,可以在此处添加segment 信息,但是要修改贯穿多个层次的arg结构体) pnfs4_proc_layoutcommit 选择异步还是同步return data->is_sync ?
2011-11-23 21:41:44 637
原创 PNFS中block layout write的变态回调函数备忘
bl_write_pagelist 中构建bio结构,注册回调函数 bio->bi_end_io = bl_end_io_write; 在bl_end_io_write()中,调用这个函数 put_parallel(data); static inline void put_parallel(struct parallel_io *p) { kref_put(&p->refc
2011-11-21 17:40:50 1006
原创 EXFS的块分配策略
经过进一步的阅读代码,现昨天的一些观点似乎有些问题,把我的一些结论贴出来,请师兄指正。 1.在函数 exfs_blocklayout_get()中,有如下代码 Exfs_alloc_blocks()定义如下: 这里面涉及到三个概念 Blocks;segment blocks; alloc_bits; 这三个概念在代码中如下注释 Blocks是物理磁盘块,大小为4K Segmen
2011-11-02 22:21:33 961
原创 有逻辑块号到三级间址的转换
开始前小看了这段代码,导致误读,严重误导了对后续相关代码的理解 呃。。。 还是要小心谨慎勤勤恳恳啊!!! 这段代码就是把一个逻辑块号转换到offset数组中。 ptrs:一个物理块上可以存放多少个物理地址。 ptrs_bits :ptrs有多少位 相等于sizeof(ptrs) direct_blocks:三级间址的数组中,表示直接地址的数量 indirect和doubl
2011-11-02 20:31:38 890
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人