aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd')
-rw-r--r--fs/nfsd/nfs4state.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 7e817d13cd82..c470cb78c6c1 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -644,7 +644,7 @@ static void nfsd4_conn_lost(struct svc_xpt_user *u)
644 spin_unlock(&clp->cl_lock); 644 spin_unlock(&clp->cl_lock);
645} 645}
646 646
647static struct nfsd4_conn *alloc_conn(struct svc_rqst *rqstp) 647static struct nfsd4_conn *alloc_conn(struct svc_rqst *rqstp, u32 flags)
648{ 648{
649 struct nfsd4_conn *conn; 649 struct nfsd4_conn *conn;
650 650
@@ -653,7 +653,7 @@ static struct nfsd4_conn *alloc_conn(struct svc_rqst *rqstp)
653 return NULL; 653 return NULL;
654 svc_xprt_get(rqstp->rq_xprt); 654 svc_xprt_get(rqstp->rq_xprt);
655 conn->cn_xprt = rqstp->rq_xprt; 655 conn->cn_xprt = rqstp->rq_xprt;
656 conn->cn_flags = NFS4_CDFC4_FORE; 656 conn->cn_flags = flags;
657 INIT_LIST_HEAD(&conn->cn_xpt_user.list); 657 INIT_LIST_HEAD(&conn->cn_xpt_user.list);
658 return conn; 658 return conn;
659} 659}
@@ -682,8 +682,11 @@ static void nfsd4_register_conn(struct nfsd4_conn *conn)
682static __be32 nfsd4_new_conn(struct svc_rqst *rqstp, struct nfsd4_session *ses) 682static __be32 nfsd4_new_conn(struct svc_rqst *rqstp, struct nfsd4_session *ses)
683{ 683{
684 struct nfsd4_conn *conn; 684 struct nfsd4_conn *conn;
685 u32 flags = NFS4_CDFC4_FORE;
685 686
686 conn = alloc_conn(rqstp); 687 if (ses->se_flags & SESSION4_BACK_CHAN)
688 flags |= NFS4_CDFC4_BACK;
689 conn = alloc_conn(rqstp, flags);
687 if (!conn) 690 if (!conn)
688 return nfserr_jukebox; 691 return nfserr_jukebox;
689 nfsd4_hash_conn(conn, ses); 692 nfsd4_hash_conn(conn, ses);
@@ -1640,7 +1643,7 @@ static void nfsd4_sequence_check_conn(struct svc_rqst *rqstp, struct nfsd4_sessi
1640 if (c) 1643 if (c)
1641 return; 1644 return;
1642 1645
1643 new = alloc_conn(rqstp); 1646 new = alloc_conn(rqstp, NFS4_CDFC4_FORE);
1644 1647
1645 spin_lock(&clp->cl_lock); 1648 spin_lock(&clp->cl_lock);
1646 c = __nfsd4_find_conn(rqstp, ses); 1649 c = __nfsd4_find_conn(rqstp, ses);