SETCLIENTID请求中,服务器为客户端设置了clientid,但是客户端不能马上使用这个clientid,必须先向服务器发起SETCLIENTID_CONFIRM请求,确认接收到了clientid,然后才能使用。
1.客户端代码
SETCLIENTID_CONFIRM使用的数据结构
struct nfs4_setclientid_res {
u64 clientid; // 这是分配给NFS客户端的clientid
nfs4_verifier confirm; // 这是一个验证信息
};
SETCLIENTID_CONFIRM的处理函数是nfs4_proc_setclientid_confirm(),这个函数的流程很简单,就是根据nfs4_setclientid_res中的信息组装请求报文,发起RPC调用。
int nfs4_proc_setclientid_confirm(struct nfs_client *clp,
struct nfs4_setclientid_res *arg,
struct rpc_cred *cred)
{
// nfs_fsinfo结构中保存了文件系统的静态信息
struct nfs_fsinfo fsinfo;
struct rpc_message msg = {
.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SETCLIENTID_CONFIRM],
.rpc_argp = arg, // 这是SETCLIENTID返回的信息
.rpc_resp = &fsinfo, // 输出结果是文件系统的信息
.rpc_cred = cred,
};
unsigned long now;
int status;
dprintk("NFS call setclientid_confirm auth=%s, (client ID %llx)\n",
clp->cl_rpcclient->cl_auth->au_ops->au_name,