|
@@ -4881,6 +4881,20 @@ nfs4_init_uniform_client_string(const struct nfs_client *clp,
|
|
|
nodename);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * nfs4_callback_up_net() starts only "tcp" and "tcp6" callback
|
|
|
+ * services. Advertise one based on the address family of the
|
|
|
+ * clientaddr.
|
|
|
+ */
|
|
|
+static unsigned int
|
|
|
+nfs4_init_callback_netid(const struct nfs_client *clp, char *buf, size_t len)
|
|
|
+{
|
|
|
+ if (strchr(clp->cl_ipaddr, ':') != NULL)
|
|
|
+ return scnprintf(buf, len, "tcp6");
|
|
|
+ else
|
|
|
+ return scnprintf(buf, len, "tcp");
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* nfs4_proc_setclientid - Negotiate client ID
|
|
|
* @clp: state data structure
|
|
@@ -4922,12 +4936,10 @@ int nfs4_proc_setclientid(struct nfs_client *clp, u32 program,
|
|
|
setclientid.sc_name,
|
|
|
sizeof(setclientid.sc_name));
|
|
|
/* cb_client4 */
|
|
|
- rcu_read_lock();
|
|
|
- setclientid.sc_netid_len = scnprintf(setclientid.sc_netid,
|
|
|
- sizeof(setclientid.sc_netid), "%s",
|
|
|
- rpc_peeraddr2str(clp->cl_rpcclient,
|
|
|
- RPC_DISPLAY_NETID));
|
|
|
- rcu_read_unlock();
|
|
|
+ setclientid.sc_netid_len =
|
|
|
+ nfs4_init_callback_netid(clp,
|
|
|
+ setclientid.sc_netid,
|
|
|
+ sizeof(setclientid.sc_netid));
|
|
|
setclientid.sc_uaddr_len = scnprintf(setclientid.sc_uaddr,
|
|
|
sizeof(setclientid.sc_uaddr), "%s.%u.%u",
|
|
|
clp->cl_ipaddr, port >> 8, port & 255);
|