NFS系统write调用过程(三)

NFS文件系统的WRITE操作比READ复杂,涉及缓存页和磁盘交互。客户端可能直接写入服务器缓存,需通过COMMIT请求确保数据持久化。文章详细介绍了WRITE请求结构、COMMIT相关数据结构及nfs_write_completion函数的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    NFS文件系统中WRITE操作比READ操作要复杂一些。READ操作中只需要将数据从服务器中读取到客户端的缓存页中就可以了,但是WRITE操作中客户端可能将数据写入到服务器的缓存页中,也可能写入到服务器的磁盘中。如果数据写入到服务器的缓存页中了,客户端还需要在适当的时候发起COMMIT请求将数据写入到服务器的磁盘中。

1.WRITE请求的结构

RFC1818规定了WRITE请求报文和应答报文的格式,请求报文格式如下:

      struct WRITE3args {
           nfs_fh3     file;    // 这是目标文件的文件句柄
           offset3     offset;  // 数据在文件中的偏移值
           count3      count;   // WRITE请求中数据长度
           stable_how  stable;  // 数据同步方式
           opaque      data<>;  // WRITE请求中的数据
      };
应答报文格式如下:

      struct WRITE3resok {
           wcc_data    file_wcc;        // 文件的属性
           count3      count;           // 写入到服务器的数据量
           stable_how  committed;       // 数据在服务器端的同步方式
           writeverf3  verf;            // 这是一个验证信息
      };

stable_how是数据同步方式,表示数据写入到服务器的缓存页中还是磁盘中,包含三个取值:

      enum stable_how {
           UNSTABLE  = 0,       // 不强求将数据和元数据写入磁盘中
           DATA_SYNC = 1,       // 数据必须写入磁盘中,元数据尽量写入磁盘中
           FILE_SYNC = 2        // 数据和元数据必须写入磁盘中
      };
请求报文中的stable_how表示客户端的请求方式,而应答报文中的stable_how表示服务器实际操作方式,对应关系如下:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值