上一篇文章中我们讲解了服务器没有分发delegation的情况下,OPEN操作结束之后客户端的设置过程,这篇文章中我们接着讲讲如果服务器分发了delegation客户端的设置过程。首先讲讲客户端表示delegation的数据结构,客户端delegation用struct nfs_delegation表示。
struct nfs_delegation {
// nfs_server表示客户端一个NFS文件系统,可能包含了多个delegation,
// 这些delegation构成了一个链表,链表头是nfs_server结构中的delegations.
struct list_head super_list;
// 这是用户信息 如果用户A执行OPEN操作时服务器分发了delegation,这里就是用户A的信息.
struct rpc_cred *cred;
struct inode *inode; // 这个delegation关联的文件
// 这是delegation的stateid,表示这个delegation,这里的值跟nfs4_state结构中stateid的值相同.
nfs4_stateid stateid;
fmode_t type; // 这是delegation的类型,FMODE_READ or FMODE_WRITE
loff_t maxsize; // 长度 如果是写类型的delegation,需要使用这个长度。
__u64 change_attr; // 这个值跟文件索引节点中的i_version值相同.
unsigned long flags; // 这里保存了一些标志位
spinlock_t lock; /