[pnfs] [PATCH 7/7] nfs41: create a svc_xprt for nfs41 callback thread and use for incoming callbacks
Benny Halevy
bhalevy at panasas.com
Thu Apr 10 12:02:14 EDT 2008
Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
fs/nfs/callback.c | 18 +++++++++++++++++-
net/sunrpc/svc.c | 1 +
2 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
index 6ffe0ba..6b77342 100644
--- a/fs/nfs/callback.c
+++ b/fs/nfs/callback.c
@@ -186,16 +186,32 @@ int nfs4_callback_up(struct svc_serv *serv)
*/
int nfs41_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt)
{
+ int ret = -ENOMEM;
+ struct svc_xprt *bc_xprt;
+
+ dprintk("--> %s\n", __func__);
+ /* Create a svc_sock for the service */
+ bc_xprt = svc_sock_create(serv, xprt->prot);
+ if (!bc_xprt)
+ goto out;
+
/*
* Save the svc_serv in the transport so that it can
* be referenced when the session backchannel is initialized
*/
+ serv->bc_xprt = bc_xprt;
xprt->bc_serv = serv;
INIT_LIST_HEAD(&serv->sv_cb_list);
spin_lock_init(&serv->sv_cb_lock);
init_waitqueue_head(&serv->sv_cb_waitq);
- return svc_create_thread(nfs41_callback_svc, serv);
+ ret = svc_create_thread(nfs41_callback_svc, serv);
+out:
+ dprintk("--> %s return %d\n", __func__, ret);
+ if (!ret)
+ return 0;
+ svc_sock_destroy(bc_xprt);
+ return ret;
}
#endif /* CONFIG_NFS_V4_1 */
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
index 2477b65..b83565a 100644
--- a/net/sunrpc/svc.c
+++ b/net/sunrpc/svc.c
@@ -1116,6 +1116,7 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req,
int error;
/* Build the svc_rqst used by the common processing routine */
+ rqstp->rq_xprt = serv->bc_xprt;
rqstp->rq_xid = req->rq_xid;
rqstp->rq_prot = req->rq_xprt->prot;
rqstp->rq_server = serv;
--
1.5.3.3
More information about the pNFS
mailing list