aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/callback.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/callback.c')
-rw-r--r--fs/nfs/callback.c40
1 files changed, 8 insertions, 32 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
index 75f7c0a7538a..a7f2e6e33305 100644
--- a/fs/nfs/callback.c
+++ b/fs/nfs/callback.c
@@ -99,17 +99,6 @@ nfs4_callback_up(struct svc_serv *serv)
99} 99}
100 100
101#if defined(CONFIG_NFS_V4_1) 101#if defined(CONFIG_NFS_V4_1)
102static int nfs41_callback_up_net(struct svc_serv *serv, struct net *net)
103{
104 /*
105 * Create an svc_sock for the back channel service that shares the
106 * fore channel connection.
107 * Returns the input port (0) and sets the svc_serv bc_xprt on success
108 */
109 return svc_create_xprt(serv, "tcp-bc", net, PF_INET, 0,
110 SVC_SOCK_ANONYMOUS);
111}
112
113/* 102/*
114 * The callback service for NFSv4.1 callbacks 103 * The callback service for NFSv4.1 callbacks
115 */ 104 */
@@ -184,11 +173,6 @@ static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt,
184 xprt->bc_serv = serv; 173 xprt->bc_serv = serv;
185} 174}
186#else 175#else
187static int nfs41_callback_up_net(struct svc_serv *serv, struct net *net)
188{
189 return 0;
190}
191
192static void nfs_minorversion_callback_svc_setup(struct svc_serv *serv, 176static void nfs_minorversion_callback_svc_setup(struct svc_serv *serv,
193 struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp)) 177 struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp))
194{ 178{
@@ -259,7 +243,8 @@ static void nfs_callback_down_net(u32 minorversion, struct svc_serv *serv, struc
259 svc_shutdown_net(serv, net); 243 svc_shutdown_net(serv, net);
260} 244}
261 245
262static int nfs_callback_up_net(int minorversion, struct svc_serv *serv, struct net *net) 246static int nfs_callback_up_net(int minorversion, struct svc_serv *serv,
247 struct net *net, struct rpc_xprt *xprt)
263{ 248{
264 struct nfs_net *nn = net_generic(net, nfs_net_id); 249 struct nfs_net *nn = net_generic(net, nfs_net_id);
265 int ret; 250 int ret;
@@ -275,20 +260,11 @@ static int nfs_callback_up_net(int minorversion, struct svc_serv *serv, struct n
275 goto err_bind; 260 goto err_bind;
276 } 261 }
277 262
278 switch (minorversion) { 263 ret = -EPROTONOSUPPORT;
279 case 0: 264 if (minorversion == 0)
280 ret = nfs4_callback_up_net(serv, net); 265 ret = nfs4_callback_up_net(serv, net);
281 break; 266 else if (xprt->ops->bc_up)
282 case 1: 267 ret = xprt->ops->bc_up(serv, net);
283 case 2:
284 ret = nfs41_callback_up_net(serv, net);
285 break;
286 default:
287 printk(KERN_ERR "NFS: unknown callback version: %d\n",
288 minorversion);
289 ret = -EINVAL;
290 break;
291 }
292 268
293 if (ret < 0) { 269 if (ret < 0) {
294 printk(KERN_ERR "NFS: callback service start failed\n"); 270 printk(KERN_ERR "NFS: callback service start failed\n");
@@ -364,7 +340,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
364 goto err_create; 340 goto err_create;
365 } 341 }
366 342
367 ret = nfs_callback_up_net(minorversion, serv, net); 343 ret = nfs_callback_up_net(minorversion, serv, net, xprt);
368 if (ret < 0) 344 if (ret < 0)
369 goto err_net; 345 goto err_net;
370 346