根节点文件句柄的组装过程

本文详细介绍了NFS根节点文件句柄的组装过程,从NFSv2和NFSv3通过MOUNT协议获取,到NFSv4的PUTROOTFH请求。在NFSv3中,MOUNT协议的mount_mnt_3_svc()函数处理请求并将结果写入filehandle文件,内核解析内容。而在NFSv4中,nfsd4_putrootfh()处理PUTROOTFH请求,通过查找fsid=0的文件系统来组装根节点句柄。
摘要由CSDN通过智能技术生成

        上一篇文章中我们讲解了NFS中文件句柄的作用以及组装过程,文件句柄由函数fh_compose()组装,这个函数的声明如下:

__be32 fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, struct svc_fh *ref_fh)

fhp是输出参数,生成的文件句柄就保存在这个变量中了
exp是文件所在的文件系统
dentry是文件的目录项结构
ref_fh是创建文件句柄时使用的一个参考值,一般是父目录的文件句柄,这个值可以为NULL.

        但是有一个问题没有说明白,就是这个函数中的参数是怎么设置的,谁赋的值呢?其实所有的文件句柄都是由根节点的文件句柄推导出来的,根节点的文件句柄是客户端获取的第一个文件句柄,客户端可以根据根节点的文件句柄发起READDIR调用获取第1层文件和子目录的文件句柄,然后根据子目录的文件句柄再次发起READDIR调用获取第2层文件和子目录的文件句柄。依次类推,可以获取文件系统中所有文件的文件句柄。

        NFS中有两种获取根节点文件句柄的方式,NFSv2和NFSv3通过MOUNT协议获取根节点的文件句柄,NFSv4通过PUTROOTFH请求获取根节点的文件句柄,但是最终的处理过程是一样的,就是想办法设置fh_compose()中的参数,然后调用fh_compose()。

1.NFSv3中根节点文件句柄 组装过程

        NFSv2和NFSv3通过MOUNT协议请求根节点的文件句柄,MOUNT协议的处理函数在nfs-uitls中,处理函数是mount_mnt_3_svc()。这个函数将客户端请求的路径与全局变量exportlist中保存的文件系统进行比较,将结果写入文件/proc/fs/nfsd/filehandle中。内核中的函数write_filehandle()解析filehandle文件中的内容,


2.N

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值