Chinaunix首页 | 论坛 | 博客
  • 博客访问: 432035
  • 博文数量: 122
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 688
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-04 12:30
文章分类

全部博文(122)

文章存档

2017年(5)

2016年(4)

2015年(56)

2014年(41)

2013年(16)

我的朋友

分类: LINUX

2015-02-03 19:23:50

fs/ceph/file.c:

ceph_aio_write()    //异步写函数

generic_segment_checks()  //写之前进行检查,检查将要写入的段是否正常
generic_write_checks()       //对写入的位置和写入的字节数进行适当调整
file_remove_suid()             //为什么会有这一步???作用是什么
file_update_time()             //更新文件时间属性
ceph_get_caps()                //获取文件相关属性
<1>ceph_sync_write

<2>generic_file_buffered_write()   //写缓存

              generic_perform_write()       //执行写操作

                     ceph_write_begin()     //

                            grab_cache_page_write_begin()  //查找页,如果找到,则等待回写wait_on_page_writeback,没找到,则分配内存页并加入lru链表,最后同样也要等待回写。

                            ceph_update_writeable_page()    //

                                   page_snap_context()                //获取private属性,保存为快照

                                   在当前页被别的地方修改过,则根据iNode获取以前的快照,并释放,然后将iNode数据回写(ceph_queue_writeback)

                                   writepage_nounlock()   //创建请求并向osd发起写请求,把页回写。

 

 

 

 

============================================================

writepage_nounlock 介绍:

确认当前快照上下文是可写的,然后删除旧的快照,把当前页读入文件系统缓冲区。

set_page_writeback() ==》 test_set_page_writeback(page)设置mapping的基数为可回写状态,增加bdi计数。

ceph_osdc_writepages()

       ceph_osdc_start_request ==》 __ceph_osdc_start_request()

                     __register_request 将请求事件加入到rb-tree

                     __map_request  找到osd

                     __send_queued  ==》 __send_request 把请求加入到队列,准备发送

 

 

 

              





阅读(2646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~