|
@@ -65,7 +65,7 @@ static inline struct sockaddr *nsm_addr(const struct nsm_handle *nsm)
|
|
return (struct sockaddr *)&nsm->sm_addr;
|
|
return (struct sockaddr *)&nsm->sm_addr;
|
|
}
|
|
}
|
|
|
|
|
|
-static struct rpc_clnt *nsm_create(struct net *net)
|
|
|
|
|
|
+static struct rpc_clnt *nsm_create(struct net *net, const char *nodename)
|
|
{
|
|
{
|
|
struct sockaddr_in sin = {
|
|
struct sockaddr_in sin = {
|
|
.sin_family = AF_INET,
|
|
.sin_family = AF_INET,
|
|
@@ -77,6 +77,7 @@ static struct rpc_clnt *nsm_create(struct net *net)
|
|
.address = (struct sockaddr *)&sin,
|
|
.address = (struct sockaddr *)&sin,
|
|
.addrsize = sizeof(sin),
|
|
.addrsize = sizeof(sin),
|
|
.servername = "rpc.statd",
|
|
.servername = "rpc.statd",
|
|
|
|
+ .nodename = nodename,
|
|
.program = &nsm_program,
|
|
.program = &nsm_program,
|
|
.version = NSM_VERSION,
|
|
.version = NSM_VERSION,
|
|
.authflavor = RPC_AUTH_NULL,
|
|
.authflavor = RPC_AUTH_NULL,
|
|
@@ -102,7 +103,7 @@ out:
|
|
return clnt;
|
|
return clnt;
|
|
}
|
|
}
|
|
|
|
|
|
-static struct rpc_clnt *nsm_client_get(struct net *net)
|
|
|
|
|
|
+static struct rpc_clnt *nsm_client_get(struct net *net, const char *nodename)
|
|
{
|
|
{
|
|
struct rpc_clnt *clnt, *new;
|
|
struct rpc_clnt *clnt, *new;
|
|
struct lockd_net *ln = net_generic(net, lockd_net_id);
|
|
struct lockd_net *ln = net_generic(net, lockd_net_id);
|
|
@@ -111,7 +112,7 @@ static struct rpc_clnt *nsm_client_get(struct net *net)
|
|
if (clnt != NULL)
|
|
if (clnt != NULL)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
- clnt = new = nsm_create(net);
|
|
|
|
|
|
+ clnt = new = nsm_create(net, nodename);
|
|
if (IS_ERR(clnt))
|
|
if (IS_ERR(clnt))
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
@@ -190,19 +191,23 @@ int nsm_monitor(const struct nlm_host *host)
|
|
struct nsm_res res;
|
|
struct nsm_res res;
|
|
int status;
|
|
int status;
|
|
struct rpc_clnt *clnt;
|
|
struct rpc_clnt *clnt;
|
|
|
|
+ const char *nodename = NULL;
|
|
|
|
|
|
dprintk("lockd: nsm_monitor(%s)\n", nsm->sm_name);
|
|
dprintk("lockd: nsm_monitor(%s)\n", nsm->sm_name);
|
|
|
|
|
|
if (nsm->sm_monitored)
|
|
if (nsm->sm_monitored)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
|
|
+ if (host->h_rpcclnt)
|
|
|
|
+ nodename = host->h_rpcclnt->cl_nodename;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Choose whether to record the caller_name or IP address of
|
|
* Choose whether to record the caller_name or IP address of
|
|
* this peer in the local rpc.statd's database.
|
|
* this peer in the local rpc.statd's database.
|
|
*/
|
|
*/
|
|
nsm->sm_mon_name = nsm_use_hostnames ? nsm->sm_name : nsm->sm_addrbuf;
|
|
nsm->sm_mon_name = nsm_use_hostnames ? nsm->sm_name : nsm->sm_addrbuf;
|
|
|
|
|
|
- clnt = nsm_client_get(host->net);
|
|
|
|
|
|
+ clnt = nsm_client_get(host->net, nodename);
|
|
if (IS_ERR(clnt)) {
|
|
if (IS_ERR(clnt)) {
|
|
status = PTR_ERR(clnt);
|
|
status = PTR_ERR(clnt);
|
|
dprintk("lockd: failed to create NSM upcall transport, "
|
|
dprintk("lockd: failed to create NSM upcall transport, "
|