diff options
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r-- | fs/nfsd/nfs4state.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 0445192d660d..d8196b453f61 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -702,6 +702,8 @@ static inline void | |||
702 | free_client(struct nfs4_client *clp) | 702 | free_client(struct nfs4_client *clp) |
703 | { | 703 | { |
704 | shutdown_callback_client(clp); | 704 | shutdown_callback_client(clp); |
705 | if (clp->cl_cb_xprt) | ||
706 | svc_xprt_put(clp->cl_cb_xprt); | ||
705 | if (clp->cl_cred.cr_group_info) | 707 | if (clp->cl_cred.cr_group_info) |
706 | put_group_info(clp->cl_cred.cr_group_info); | 708 | put_group_info(clp->cl_cred.cr_group_info); |
707 | kfree(clp->cl_principal); | 709 | kfree(clp->cl_principal); |
@@ -1317,6 +1319,18 @@ nfsd4_create_session(struct svc_rqst *rqstp, | |||
1317 | cr_ses->flags &= ~SESSION4_PERSIST; | 1319 | cr_ses->flags &= ~SESSION4_PERSIST; |
1318 | cr_ses->flags &= ~SESSION4_RDMA; | 1320 | cr_ses->flags &= ~SESSION4_RDMA; |
1319 | 1321 | ||
1322 | if (cr_ses->flags & SESSION4_BACK_CHAN) { | ||
1323 | unconf->cl_cb_xprt = rqstp->rq_xprt; | ||
1324 | svc_xprt_get(unconf->cl_cb_xprt); | ||
1325 | rpc_copy_addr( | ||
1326 | (struct sockaddr *)&unconf->cl_cb_conn.cb_addr, | ||
1327 | sa); | ||
1328 | unconf->cl_cb_conn.cb_addrlen = svc_addr_len(sa); | ||
1329 | unconf->cl_cb_conn.cb_minorversion = | ||
1330 | cstate->minorversion; | ||
1331 | unconf->cl_cb_conn.cb_prog = cr_ses->callback_prog; | ||
1332 | nfsd4_probe_callback(unconf); | ||
1333 | } | ||
1320 | conf = unconf; | 1334 | conf = unconf; |
1321 | } else { | 1335 | } else { |
1322 | status = nfserr_stale_clientid; | 1336 | status = nfserr_stale_clientid; |