diff options
author | Stanislav Kinsbursky <skinsbursky@parallels.com> | 2012-08-20 10:00:21 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-10-01 18:25:29 -0400 |
commit | 691c457ae635a063e0e4c8551ba4566eab9a17e3 (patch) | |
tree | deb020038dbf6f9c0bb5c76c7ba46053a0266192 /fs/nfs | |
parent | c946556b8749beb357e2d2860e7dac757972dd3d (diff) |
NFS: callback up - transport backchannel cleanup
No need to assign transports backchannel server explicitly in
nfs41_callback_up() - there is nfs_callback_bc_serv() function for this.
By using it, nfs4_callback_up() and nfs41_callback_up() can be called without
transport argument.
Note: service have to be passed to nfs_callback_bc_serv() instead of callback,
since callback link can be uninitialized.
Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/callback.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index a53b4e53d5dd..a528cb75121e 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
@@ -104,7 +104,7 @@ nfs4_callback_svc(void *vrqstp) | |||
104 | * Prepare to bring up the NFSv4 callback service | 104 | * Prepare to bring up the NFSv4 callback service |
105 | */ | 105 | */ |
106 | static struct svc_rqst * | 106 | static struct svc_rqst * |
107 | nfs4_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt) | 107 | nfs4_callback_up(struct svc_serv *serv) |
108 | { | 108 | { |
109 | return svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE); | 109 | return svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE); |
110 | } | 110 | } |
@@ -160,16 +160,10 @@ nfs41_callback_svc(void *vrqstp) | |||
160 | * Bring up the NFSv4.1 callback service | 160 | * Bring up the NFSv4.1 callback service |
161 | */ | 161 | */ |
162 | static struct svc_rqst * | 162 | static struct svc_rqst * |
163 | nfs41_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt) | 163 | nfs41_callback_up(struct svc_serv *serv) |
164 | { | 164 | { |
165 | struct svc_rqst *rqstp; | 165 | struct svc_rqst *rqstp; |
166 | 166 | ||
167 | /* | ||
168 | * Save the svc_serv in the transport so that it can | ||
169 | * be referenced when the session backchannel is initialized | ||
170 | */ | ||
171 | xprt->bc_serv = serv; | ||
172 | |||
173 | INIT_LIST_HEAD(&serv->sv_cb_list); | 167 | INIT_LIST_HEAD(&serv->sv_cb_list); |
174 | spin_lock_init(&serv->sv_cb_lock); | 168 | spin_lock_init(&serv->sv_cb_lock); |
175 | init_waitqueue_head(&serv->sv_cb_waitq); | 169 | init_waitqueue_head(&serv->sv_cb_waitq); |
@@ -184,21 +178,25 @@ nfs41_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt) | |||
184 | } | 178 | } |
185 | 179 | ||
186 | static inline int nfs_minorversion_callback_svc_setup(u32 minorversion, | 180 | static inline int nfs_minorversion_callback_svc_setup(u32 minorversion, |
187 | struct svc_serv *serv, struct rpc_xprt *xprt, | 181 | struct svc_serv *serv, |
188 | struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp)) | 182 | struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp)) |
189 | { | 183 | { |
190 | if (minorversion) { | 184 | if (minorversion) { |
191 | *rqstpp = nfs41_callback_up(serv, xprt); | 185 | *rqstpp = nfs41_callback_up(serv); |
192 | *callback_svc = nfs41_callback_svc; | 186 | *callback_svc = nfs41_callback_svc; |
193 | } | 187 | } |
194 | return minorversion; | 188 | return minorversion; |
195 | } | 189 | } |
196 | 190 | ||
197 | static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt, | 191 | static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt, |
198 | struct nfs_callback_data *cb_info) | 192 | struct svc_serv *serv) |
199 | { | 193 | { |
200 | if (minorversion) | 194 | if (minorversion) |
201 | xprt->bc_serv = cb_info->serv; | 195 | /* |
196 | * Save the svc_serv in the transport so that it can | ||
197 | * be referenced when the session backchannel is initialized | ||
198 | */ | ||
199 | xprt->bc_serv = serv; | ||
202 | } | 200 | } |
203 | #else | 201 | #else |
204 | static int nfs41_callback_up_net(struct svc_serv *serv, struct net *net) | 202 | static int nfs41_callback_up_net(struct svc_serv *serv, struct net *net) |
@@ -207,14 +205,14 @@ static int nfs41_callback_up_net(struct svc_serv *serv, struct net *net) | |||
207 | } | 205 | } |
208 | 206 | ||
209 | static inline int nfs_minorversion_callback_svc_setup(u32 minorversion, | 207 | static inline int nfs_minorversion_callback_svc_setup(u32 minorversion, |
210 | struct svc_serv *serv, struct rpc_xprt *xprt, | 208 | struct svc_serv *serv, |
211 | struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp)) | 209 | struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp)) |
212 | { | 210 | { |
213 | return 0; | 211 | return 0; |
214 | } | 212 | } |
215 | 213 | ||
216 | static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt, | 214 | static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt, |
217 | struct nfs_callback_data *cb_info) | 215 | struct svc_serv *serv) |
218 | { | 216 | { |
219 | } | 217 | } |
220 | #endif /* CONFIG_NFS_V4_1 */ | 218 | #endif /* CONFIG_NFS_V4_1 */ |
@@ -318,7 +316,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt) | |||
318 | } | 316 | } |
319 | 317 | ||
320 | if (cb_info->users++ || cb_info->task != NULL) { | 318 | if (cb_info->users++ || cb_info->task != NULL) { |
321 | nfs_callback_bc_serv(minorversion, xprt, cb_info); | 319 | nfs_callback_bc_serv(minorversion, xprt, serv); |
322 | goto out; | 320 | goto out; |
323 | } | 321 | } |
324 | 322 | ||
@@ -326,11 +324,13 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt) | |||
326 | if (ret < 0) | 324 | if (ret < 0) |
327 | goto err_net; | 325 | goto err_net; |
328 | 326 | ||
327 | nfs_callback_bc_serv(minorversion, xprt, serv); | ||
328 | |||
329 | minorversion_setup = nfs_minorversion_callback_svc_setup(minorversion, | 329 | minorversion_setup = nfs_minorversion_callback_svc_setup(minorversion, |
330 | serv, xprt, &rqstp, &callback_svc); | 330 | serv, &rqstp, &callback_svc); |
331 | if (!minorversion_setup) { | 331 | if (!minorversion_setup) { |
332 | /* v4.0 callback setup */ | 332 | /* v4.0 callback setup */ |
333 | rqstp = nfs4_callback_up(serv, xprt); | 333 | rqstp = nfs4_callback_up(serv); |
334 | callback_svc = nfs4_callback_svc; | 334 | callback_svc = nfs4_callback_svc; |
335 | } | 335 | } |
336 | 336 | ||