diff options
author | Stanislav Kinsbursky <skinsbursky@parallels.com> | 2012-01-31 06:08:21 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-02-15 00:19:48 -0500 |
commit | 0e1cb5c0aad1c37a4eee6db45f52c0b3869db2cc (patch) | |
tree | 1b483f62c0e8f8b5a8d5054d928902ac2eac5471 /fs/lockd/mon.c | |
parent | 66697bfd6aec0a9ca9331c1aa544ac20324a7561 (diff) |
LockD: make NSM network namespace aware
NLM host is network namespace aware now.
So NSM have to take it into account.
Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/lockd/mon.c')
-rw-r--r-- | fs/lockd/mon.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c index c196030e530a..7ef14b3c5bee 100644 --- a/fs/lockd/mon.c +++ b/fs/lockd/mon.c | |||
@@ -62,14 +62,14 @@ static inline struct sockaddr *nsm_addr(const struct nsm_handle *nsm) | |||
62 | return (struct sockaddr *)&nsm->sm_addr; | 62 | return (struct sockaddr *)&nsm->sm_addr; |
63 | } | 63 | } |
64 | 64 | ||
65 | static struct rpc_clnt *nsm_create(void) | 65 | static struct rpc_clnt *nsm_create(struct net *net) |
66 | { | 66 | { |
67 | struct sockaddr_in sin = { | 67 | struct sockaddr_in sin = { |
68 | .sin_family = AF_INET, | 68 | .sin_family = AF_INET, |
69 | .sin_addr.s_addr = htonl(INADDR_LOOPBACK), | 69 | .sin_addr.s_addr = htonl(INADDR_LOOPBACK), |
70 | }; | 70 | }; |
71 | struct rpc_create_args args = { | 71 | struct rpc_create_args args = { |
72 | .net = &init_net, | 72 | .net = net, |
73 | .protocol = XPRT_TRANSPORT_UDP, | 73 | .protocol = XPRT_TRANSPORT_UDP, |
74 | .address = (struct sockaddr *)&sin, | 74 | .address = (struct sockaddr *)&sin, |
75 | .addrsize = sizeof(sin), | 75 | .addrsize = sizeof(sin), |
@@ -83,7 +83,8 @@ static struct rpc_clnt *nsm_create(void) | |||
83 | return rpc_create(&args); | 83 | return rpc_create(&args); |
84 | } | 84 | } |
85 | 85 | ||
86 | static int nsm_mon_unmon(struct nsm_handle *nsm, u32 proc, struct nsm_res *res) | 86 | static int nsm_mon_unmon(struct nsm_handle *nsm, u32 proc, struct nsm_res *res, |
87 | struct net *net) | ||
87 | { | 88 | { |
88 | struct rpc_clnt *clnt; | 89 | struct rpc_clnt *clnt; |
89 | int status; | 90 | int status; |
@@ -99,7 +100,7 @@ static int nsm_mon_unmon(struct nsm_handle *nsm, u32 proc, struct nsm_res *res) | |||
99 | .rpc_resp = res, | 100 | .rpc_resp = res, |
100 | }; | 101 | }; |
101 | 102 | ||
102 | clnt = nsm_create(); | 103 | clnt = nsm_create(net); |
103 | if (IS_ERR(clnt)) { | 104 | if (IS_ERR(clnt)) { |
104 | status = PTR_ERR(clnt); | 105 | status = PTR_ERR(clnt); |
105 | dprintk("lockd: failed to create NSM upcall transport, " | 106 | dprintk("lockd: failed to create NSM upcall transport, " |
@@ -149,7 +150,7 @@ int nsm_monitor(const struct nlm_host *host) | |||
149 | */ | 150 | */ |
150 | nsm->sm_mon_name = nsm_use_hostnames ? nsm->sm_name : nsm->sm_addrbuf; | 151 | nsm->sm_mon_name = nsm_use_hostnames ? nsm->sm_name : nsm->sm_addrbuf; |
151 | 152 | ||
152 | status = nsm_mon_unmon(nsm, NSMPROC_MON, &res); | 153 | status = nsm_mon_unmon(nsm, NSMPROC_MON, &res, host->net); |
153 | if (unlikely(res.status != 0)) | 154 | if (unlikely(res.status != 0)) |
154 | status = -EIO; | 155 | status = -EIO; |
155 | if (unlikely(status < 0)) { | 156 | if (unlikely(status < 0)) { |
@@ -183,7 +184,7 @@ void nsm_unmonitor(const struct nlm_host *host) | |||
183 | && nsm->sm_monitored && !nsm->sm_sticky) { | 184 | && nsm->sm_monitored && !nsm->sm_sticky) { |
184 | dprintk("lockd: nsm_unmonitor(%s)\n", nsm->sm_name); | 185 | dprintk("lockd: nsm_unmonitor(%s)\n", nsm->sm_name); |
185 | 186 | ||
186 | status = nsm_mon_unmon(nsm, NSMPROC_UNMON, &res); | 187 | status = nsm_mon_unmon(nsm, NSMPROC_UNMON, &res, host->net); |
187 | if (res.status != 0) | 188 | if (res.status != 0) |
188 | status = -EIO; | 189 | status = -EIO; |
189 | if (status < 0) | 190 | if (status < 0) |