nfs write3
来源:互联网 发布:海康威视报警键盘编程 编辑:程序博客网 时间:2024/06/16 14:27
NFS文件系统中WRITE操作比READ操作要复杂一些。READ操作中只需要将数据从服务器中读取到客户端的缓存页中就可以了,但是WRITE操作中客户端可能将数据写入到服务器的缓存页中,也可能写入到服务器的磁盘中。如果数据写入到服务器的缓存页中了,客户端还需要在适当的时候发起COMMIT请求将数据写入到服务器的磁盘中。
1.WRITE请求的结构
RFC1818规定了WRITE请求报文和应答报文的格式,请求报文格式如下:
应答报文格式如下:stable_how是数据同步方式,表示数据写入到服务器的缓存页中还是磁盘中,包含三个取值:请求报文中的stable_how表示客户端的请求方式,而应答报文中的stable_how表示服务器实际操作方式,对应关系如下:请求报文应答报文UNSTABLEUNSTABLE、DATA_SYNC、FILE_SYNCDATA_SYNCDATA_SYNC、FILE_SYNCFILE_SYNCFILE_SYNC
也就是说,如果客户端要求将数据/元数据写入到磁盘中,服务器就必须将数据/元数据写入到磁盘中。如果客户端不强制将数据/元数据写入磁盘中,服务器端可以将数据/元数据写入磁盘中,也可以只写入缓存中就返回。
应答消息中的verf是服务器传递给客户端的一个cookie信息,客户端可以根据这个信息判断服务器的状态是否发生了变化。
2.COMMIT相关的数据结构
如果服务器只是将数据保存在了缓存页中,那么客户端需要在适当的时候发起COMMIT请求,将数据刷新到服务器磁盘中。这个过程需要使用几个数据结构。
struct nfs_commit_info:这个数据结构中保存了COMMIT请求的处理函数和一个nfs_page结构的链表,这个链表中的数据需要刷新到服务器磁盘中。pNFS中COMMIT请求可能提交到MDS中,也可能提交到DS中,nfs_mds_commit_info和pnfs_ds_commit_info的作用相同。COMMIT请求提交到MDS中时使用nfs_mds_commit_info,COMMIT请求提交到DS中时使用pnfs_ds_commit_info,在未使用pNFS的情况下使用的是nfs_mds_commit_info。
struct nfs_mds_commit_info:这就是一个链表结构,链表中的数据结构是nfs_page,保存了需要提交COMMIT请求的数据在文件中的范围。
struct nfs_commit_completion_ops:这是一个操作函数集合,当客户端提交COMMIT请求时使用这个集合中的函数。
COMMIT请求中这两个函数如下:
3.nfs_write_completion
nfs_write_completion()是WRITE请求的收尾函数,当所有的WRITE请求结束后会执行nfs_write_completion()。如果WRITE应答报文中返回的不是FILE_SYNC,则需要提交COMMIT请求,函数的完整定义如下:
- nfs write3
- NFS
- NFS
- nfs
- NFS
- NFS
- nfs
- NFS
- NFS
- NFS
- nfs
- NFS
- NFS
- nfs
- nfs
- nfs
- NFS
- nfs
- jedisPool实现原理及源码分析(1)----对象池的说明
- 知道这两个商业模式的人,都实现了财务自由
- 微信公众平台开发(PHP)(五) 天气预报功能开发
- 原生php实现文件上传方法
- 指数循环节(降幂)
- nfs write3
- 浮充
- AVL树,红黑树,B树,B+树,Trie树
- Hive 之 分区表,外部表,桶表
- Spring框架入手学习(一)
- Android安卓WebApp中 全屏和普通模式下 webview中软键盘弹出挡住输入框 解决方案
- 学习处理类型问题
- VS2015+CxImage配置
- 为什么使用noncopyable类