Commit 8f975242 authored by Benny Halevy's avatar Benny Halevy

nfs41: create a svc_xprt for nfs41 callback thread and use for incoming callbacks

Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
parent 9c9f3f5f
...@@ -185,16 +185,31 @@ nfs41_callback_svc(void *vrqstp) ...@@ -185,16 +185,31 @@ nfs41_callback_svc(void *vrqstp)
struct svc_rqst * struct svc_rqst *
nfs41_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt) nfs41_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt)
{ {
struct svc_xprt *bc_xprt;
struct svc_rqst *rqstp = ERR_PTR(-ENOMEM);
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 * Save the svc_serv in the transport so that it can
* be referenced when the session backchannel is initialized * be referenced when the session backchannel is initialized
*/ */
serv->bc_xprt = bc_xprt;
xprt->bc_serv = serv; xprt->bc_serv = serv;
INIT_LIST_HEAD(&serv->sv_cb_list); INIT_LIST_HEAD(&serv->sv_cb_list);
spin_lock_init(&serv->sv_cb_lock); spin_lock_init(&serv->sv_cb_lock);
init_waitqueue_head(&serv->sv_cb_waitq); init_waitqueue_head(&serv->sv_cb_waitq);
return svc_prepare_thread(serv, &serv->sv_pools[0]); rqstp = svc_prepare_thread(serv, &serv->sv_pools[0]);
if (IS_ERR(rqstp))
svc_sock_destroy(bc_xprt);
out:
dprintk("--> %s return %p\n", __func__, rqstp);
return rqstp;
} }
static inline int nfs_minorversion_callback_svc_setup(u32 minorversion, static inline int nfs_minorversion_callback_svc_setup(u32 minorversion,
......
...@@ -1258,6 +1258,7 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req, ...@@ -1258,6 +1258,7 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req,
int error; int error;
/* Build the svc_rqst used by the common processing routine */ /* Build the svc_rqst used by the common processing routine */
rqstp->rq_xprt = serv->bc_xprt;
rqstp->rq_xid = req->rq_xid; rqstp->rq_xid = req->rq_xid;
rqstp->rq_prot = req->rq_xprt->prot; rqstp->rq_prot = req->rq_xprt->prot;
rqstp->rq_server = serv; rqstp->rq_server = serv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment