|
@@ -4047,6 +4047,32 @@ static void nfs4_init_boot_verifier(const struct nfs_client *clp,
|
|
|
memcpy(bootverf->data, verf, sizeof(bootverf->data));
|
|
|
}
|
|
|
|
|
|
+static unsigned int
|
|
|
+nfs4_init_nonuniform_client_string(const struct nfs_client *clp,
|
|
|
+ char *buf, size_t len)
|
|
|
+{
|
|
|
+ unsigned int result;
|
|
|
+
|
|
|
+ rcu_read_lock();
|
|
|
+ result = scnprintf(buf, len, "Linux NFSv4.0 %s/%s %s",
|
|
|
+ clp->cl_ipaddr,
|
|
|
+ rpc_peeraddr2str(clp->cl_rpcclient,
|
|
|
+ RPC_DISPLAY_ADDR),
|
|
|
+ rpc_peeraddr2str(clp->cl_rpcclient,
|
|
|
+ RPC_DISPLAY_PROTO));
|
|
|
+ rcu_read_unlock();
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+static unsigned int
|
|
|
+nfs4_init_uniform_client_string(const struct nfs_client *clp,
|
|
|
+ char *buf, size_t len)
|
|
|
+{
|
|
|
+ return scnprintf(buf, len, "Linux NFSv%u.%u %s",
|
|
|
+ clp->rpc_ops->version, clp->cl_minorversion,
|
|
|
+ clp->cl_rpcclient->cl_nodename);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* nfs4_proc_setclientid - Negotiate client ID
|
|
|
* @clp: state data structure
|
|
@@ -4077,15 +4103,18 @@ int nfs4_proc_setclientid(struct nfs_client *clp, u32 program,
|
|
|
|
|
|
/* nfs_client_id4 */
|
|
|
nfs4_init_boot_verifier(clp, &sc_verifier);
|
|
|
- rcu_read_lock();
|
|
|
- setclientid.sc_name_len = scnprintf(setclientid.sc_name,
|
|
|
- sizeof(setclientid.sc_name), "%s/%s %s",
|
|
|
- clp->cl_ipaddr,
|
|
|
- rpc_peeraddr2str(clp->cl_rpcclient,
|
|
|
- RPC_DISPLAY_ADDR),
|
|
|
- rpc_peeraddr2str(clp->cl_rpcclient,
|
|
|
- RPC_DISPLAY_PROTO));
|
|
|
+ if (test_bit(NFS_CS_MIGRATION, &clp->cl_flags))
|
|
|
+ setclientid.sc_name_len =
|
|
|
+ nfs4_init_uniform_client_string(clp,
|
|
|
+ setclientid.sc_name,
|
|
|
+ sizeof(setclientid.sc_name));
|
|
|
+ else
|
|
|
+ setclientid.sc_name_len =
|
|
|
+ nfs4_init_nonuniform_client_string(clp,
|
|
|
+ setclientid.sc_name,
|
|
|
+ sizeof(setclientid.sc_name));
|
|
|
/* cb_client4 */
|
|
|
+ rcu_read_lock();
|
|
|
setclientid.sc_netid_len = scnprintf(setclientid.sc_netid,
|
|
|
sizeof(setclientid.sc_netid),
|
|
|
rpc_peeraddr2str(clp->cl_rpcclient,
|
|
@@ -5307,10 +5336,8 @@ int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred)
|
|
|
};
|
|
|
|
|
|
nfs4_init_boot_verifier(clp, &verifier);
|
|
|
- args.id_len = scnprintf(args.id, sizeof(args.id),
|
|
|
- "%s/%s",
|
|
|
- clp->cl_ipaddr,
|
|
|
- clp->cl_rpcclient->cl_nodename);
|
|
|
+ args.id_len = nfs4_init_uniform_client_string(clp, args.id,
|
|
|
+ sizeof(args.id));
|
|
|
dprintk("NFS call exchange_id auth=%s, '%.*s'\n",
|
|
|
clp->cl_rpcclient->cl_auth->au_ops->au_name,
|
|
|
args.id_len, args.id);
|