Commit 01c9a0bc authored by Andy Adamson's avatar Andy Adamson Committed by Trond Myklebust

NFS use svc_create_xprt for NFSv4.1 callback service

The new back channel transport means we call the normal creation routine as
well as svc_xprt_put.
Signed-off-by: default avatarAndy Adamson <andros@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 16b2d1e1
...@@ -177,30 +177,38 @@ nfs41_callback_svc(void *vrqstp) ...@@ -177,30 +177,38 @@ 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;
struct svc_rqst *rqstp = ERR_PTR(-ENOMEM); int ret;
dprintk("--> %s\n", __func__); /*
/* Create a svc_sock for the service */ * Create an svc_sock for the back channel service that shares the
bc_xprt = svc_sock_create(serv, xprt->prot); * fore channel connection.
if (!bc_xprt) * Returns the input port (0) and sets the svc_serv bc_xprt on success
*/
ret = svc_create_xprt(serv, "tcp-bc", &init_net, PF_INET, 0,
SVC_SOCK_ANONYMOUS);
if (ret < 0) {
rqstp = ERR_PTR(ret);
goto out; 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);
rqstp = svc_prepare_thread(serv, &serv->sv_pools[0]); rqstp = svc_prepare_thread(serv, &serv->sv_pools[0]);
if (IS_ERR(rqstp)) if (IS_ERR(rqstp)) {
svc_sock_destroy(bc_xprt); svc_xprt_put(serv->bc_xprt);
serv->bc_xprt = NULL;
}
out: out:
dprintk("--> %s return %p\n", __func__, rqstp); dprintk("--> %s return %ld\n", __func__,
IS_ERR(rqstp) ? PTR_ERR(rqstp) : 0);
return rqstp; return rqstp;
} }
......
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