aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/sunrpc/svc_xprt.h1
-rw-r--r--include/linux/sunrpc/svcsock.h1
-rw-r--r--net/sunrpc/svcsock.c10
-rw-r--r--net/sunrpc/xprtsock.c2
4 files changed, 8 insertions, 6 deletions
diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
index c8f81da15c7e..7ad9751a0d87 100644
--- a/include/linux/sunrpc/svc_xprt.h
+++ b/include/linux/sunrpc/svc_xprt.h
@@ -79,6 +79,7 @@ struct svc_xprt {
79 struct list_head xpt_users; /* callbacks on free */ 79 struct list_head xpt_users; /* callbacks on free */
80 80
81 struct net *xpt_net; 81 struct net *xpt_net;
82 struct rpc_xprt *xpt_bc_xprt; /* NFSv4.1 backchannel */
82}; 83};
83 84
84static inline void unregister_xpt_user(struct svc_xprt *xpt, struct svc_xpt_user *u) 85static inline void unregister_xpt_user(struct svc_xprt *xpt, struct svc_xpt_user *u)
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
index 1b353a76c304..04dba23c59f2 100644
--- a/include/linux/sunrpc/svcsock.h
+++ b/include/linux/sunrpc/svcsock.h
@@ -28,7 +28,6 @@ struct svc_sock {
28 /* private TCP part */ 28 /* private TCP part */
29 u32 sk_reclen; /* length of record */ 29 u32 sk_reclen; /* length of record */
30 u32 sk_tcplen; /* current read length */ 30 u32 sk_tcplen; /* current read length */
31 struct rpc_xprt *sk_bc_xprt; /* NFSv4.1 backchannel xprt */
32}; 31};
33 32
34/* 33/*
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 52bd1130e83a..3bb400f86eae 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -987,15 +987,17 @@ static int svc_process_calldir(struct svc_sock *svsk, struct svc_rqst *rqstp,
987 vec[0] = rqstp->rq_arg.head[0]; 987 vec[0] = rqstp->rq_arg.head[0];
988 } else { 988 } else {
989 /* REPLY */ 989 /* REPLY */
990 if (svsk->sk_bc_xprt) 990 struct rpc_xprt *bc_xprt = svsk->sk_xprt.xpt_bc_xprt;
991 req = xprt_lookup_rqst(svsk->sk_bc_xprt, xid); 991
992 if (bc_xprt)
993 req = xprt_lookup_rqst(bc_xprt, xid);
992 994
993 if (!req) { 995 if (!req) {
994 printk(KERN_NOTICE 996 printk(KERN_NOTICE
995 "%s: Got unrecognized reply: " 997 "%s: Got unrecognized reply: "
996 "calldir 0x%x sk_bc_xprt %p xid %08x\n", 998 "calldir 0x%x xpt_bc_xprt %p xid %08x\n",
997 __func__, ntohl(calldir), 999 __func__, ntohl(calldir),
998 svsk->sk_bc_xprt, xid); 1000 bc_xprt, xid);
999 vec[0] = rqstp->rq_arg.head[0]; 1001 vec[0] = rqstp->rq_arg.head[0];
1000 goto out; 1002 goto out;
1001 } 1003 }
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index dfcab5ac65af..18dc42eb5597 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2379,9 +2379,9 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args)
2379 * The backchannel uses the same socket connection as the 2379 * The backchannel uses the same socket connection as the
2380 * forechannel 2380 * forechannel
2381 */ 2381 */
2382 args->bc_xprt->xpt_bc_xprt = xprt;
2382 xprt->bc_xprt = args->bc_xprt; 2383 xprt->bc_xprt = args->bc_xprt;
2383 bc_sock = container_of(args->bc_xprt, struct svc_sock, sk_xprt); 2384 bc_sock = container_of(args->bc_xprt, struct svc_sock, sk_xprt);
2384 bc_sock->sk_bc_xprt = xprt;
2385 transport->sock = bc_sock->sk_sock; 2385 transport->sock = bc_sock->sk_sock;
2386 transport->inet = bc_sock->sk_sk; 2386 transport->inet = bc_sock->sk_sk;
2387 2387