diff options
-rw-r--r-- | include/linux/sunrpc/svc_xprt.h | 1 | ||||
-rw-r--r-- | include/linux/sunrpc/svcsock.h | 1 | ||||
-rw-r--r-- | net/sunrpc/svcsock.c | 10 | ||||
-rw-r--r-- | net/sunrpc/xprtsock.c | 2 |
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 | ||
84 | static inline void unregister_xpt_user(struct svc_xprt *xpt, struct svc_xpt_user *u) | 85 | static 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 | ||