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
21struct rpc_rqst *xprt_lookup_bc_request(struct rpc_xprt *xprt, __be32 xid);
22void xprt_complete_bc_request(struct rpc_rqst *req, uint32_t copied);
23void xprt_init_bc_request(struct rpc_rqst *req, struct rpc_task *task,
24		const struct rpc_timeout *to);
25void xprt_free_bc_request(struct rpc_rqst *req);
26int xprt_setup_backchannel(struct rpc_xprt *, unsigned int min_reqs);
27void xprt_destroy_backchannel(struct rpc_xprt *, unsigned int max_reqs);
28
29/* Socket backchannel transport methods */
30int xprt_setup_bc(struct rpc_xprt *xprt, unsigned int min_reqs);
31void xprt_destroy_bc(struct rpc_xprt *xprt, unsigned int max_reqs);
32void xprt_free_bc_rqst(struct rpc_rqst *req);
33unsigned int xprt_bc_max_slots(struct rpc_xprt *xprt);
34
35/*
36 * Determine if a shared backchannel is in use
37 */
38static inline bool svc_is_backchannel(const struct svc_rqst *rqstp)
39{
40	return rqstp->rq_server->sv_bc_enabled;
41}
42
43static inline void set_bc_enabled(struct svc_serv *serv)
44{
45	serv->sv_bc_enabled = true;
46}
47#else /* CONFIG_SUNRPC_BACKCHANNEL */
48static inline int xprt_setup_backchannel(struct rpc_xprt *xprt,
49					 unsigned int min_reqs)
50{
51	return 0;
52}
53
54static inline void xprt_destroy_backchannel(struct rpc_xprt *xprt,
55					    unsigned int max_reqs)
56{
57}
58
59static inline bool svc_is_backchannel(const struct svc_rqst *rqstp)
60{
61	return false;
62}
63
64static inline void set_bc_enabled(struct svc_serv *serv)
65{
66}
67
68static inline void xprt_free_bc_request(struct rpc_rqst *req)
69{
70}
71#endif /* CONFIG_SUNRPC_BACKCHANNEL */
72#endif /* _LINUX_SUNRPC_BC_XPRT_H */
73