1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /******************************************************************************
3 
4 (c) 2008 NetApp.  All Rights Reserved.
5 
6 
7 ******************************************************************************/
8 
9 /*
10  * Functions to create and manage the backchannel
11  */
12 
13 #ifndef _LINUX_SUNRPC_BC_XPRT_H
14 #define _LINUX_SUNRPC_BC_XPRT_H
15 
16 #include <linux/sunrpc/svcsock.h>
17 #include <linux/sunrpc/xprt.h>
18 #include <linux/sunrpc/sched.h>
19 
20 #ifdef CONFIG_SUNRPC_BACKCHANNEL
21 struct rpc_rqst *xprt_lookup_bc_request(struct rpc_xprt *xprt, __be32 xid);
22 void xprt_complete_bc_request(struct rpc_rqst *req, uint32_t copied);
23 void xprt_init_bc_request(struct rpc_rqst *req, struct rpc_task *task);
24 void xprt_free_bc_request(struct rpc_rqst *req);
25 int xprt_setup_backchannel(struct rpc_xprt *, unsigned int min_reqs);
26 void xprt_destroy_backchannel(struct rpc_xprt *, unsigned int max_reqs);
27 
28 /* Socket backchannel transport methods */
29 int xprt_setup_bc(struct rpc_xprt *xprt, unsigned int min_reqs);
30 void xprt_destroy_bc(struct rpc_xprt *xprt, unsigned int max_reqs);
31 void xprt_free_bc_rqst(struct rpc_rqst *req);
32 unsigned int xprt_bc_max_slots(struct rpc_xprt *xprt);
33 
34 /*
35  * Determine if a shared backchannel is in use
36  */
svc_is_backchannel(const struct svc_rqst * rqstp)37 static inline bool svc_is_backchannel(const struct svc_rqst *rqstp)
38 {
39 	return rqstp->rq_server->sv_bc_enabled;
40 }
41 
set_bc_enabled(struct svc_serv * serv)42 static inline void set_bc_enabled(struct svc_serv *serv)
43 {
44 	serv->sv_bc_enabled = true;
45 }
46 #else /* CONFIG_SUNRPC_BACKCHANNEL */
xprt_setup_backchannel(struct rpc_xprt * xprt,unsigned int min_reqs)47 static inline int xprt_setup_backchannel(struct rpc_xprt *xprt,
48 					 unsigned int min_reqs)
49 {
50 	return 0;
51 }
52 
xprt_destroy_backchannel(struct rpc_xprt * xprt,unsigned int max_reqs)53 static inline void xprt_destroy_backchannel(struct rpc_xprt *xprt,
54 					    unsigned int max_reqs)
55 {
56 }
57 
svc_is_backchannel(const struct svc_rqst * rqstp)58 static inline bool svc_is_backchannel(const struct svc_rqst *rqstp)
59 {
60 	return false;
61 }
62 
set_bc_enabled(struct svc_serv * serv)63 static inline void set_bc_enabled(struct svc_serv *serv)
64 {
65 }
66 
xprt_free_bc_request(struct rpc_rqst * req)67 static inline void xprt_free_bc_request(struct rpc_rqst *req)
68 {
69 }
70 #endif /* CONFIG_SUNRPC_BACKCHANNEL */
71 #endif /* _LINUX_SUNRPC_BC_XPRT_H */
72