mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-18 03:06:43 +00:00
sunrpc: keep track of the xprt_class in rpc_xprt structure
We need to keep track of the type for a given transport. Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
5b9268727f
commit
d3abc73987
@ -53,6 +53,7 @@ enum rpc_display_format_t {
|
|||||||
|
|
||||||
struct rpc_task;
|
struct rpc_task;
|
||||||
struct rpc_xprt;
|
struct rpc_xprt;
|
||||||
|
struct xprt_class;
|
||||||
struct seq_file;
|
struct seq_file;
|
||||||
struct svc_serv;
|
struct svc_serv;
|
||||||
struct net;
|
struct net;
|
||||||
@ -289,6 +290,7 @@ struct rpc_xprt {
|
|||||||
atomic_t inject_disconnect;
|
atomic_t inject_disconnect;
|
||||||
#endif
|
#endif
|
||||||
struct rcu_head rcu;
|
struct rcu_head rcu;
|
||||||
|
const struct xprt_class *xprt_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CONFIG_SUNRPC_BACKCHANNEL)
|
#if defined(CONFIG_SUNRPC_BACKCHANNEL)
|
||||||
|
@ -73,6 +73,7 @@ unsigned int xprt_rdma_max_inline_read = RPCRDMA_DEF_INLINE;
|
|||||||
unsigned int xprt_rdma_max_inline_write = RPCRDMA_DEF_INLINE;
|
unsigned int xprt_rdma_max_inline_write = RPCRDMA_DEF_INLINE;
|
||||||
unsigned int xprt_rdma_memreg_strategy = RPCRDMA_FRWR;
|
unsigned int xprt_rdma_memreg_strategy = RPCRDMA_FRWR;
|
||||||
int xprt_rdma_pad_optimize;
|
int xprt_rdma_pad_optimize;
|
||||||
|
static struct xprt_class xprt_rdma;
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
|
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
|
||||||
|
|
||||||
@ -349,6 +350,7 @@ xprt_setup_rdma(struct xprt_create *args)
|
|||||||
/* Ensure xprt->addr holds valid server TCP (not RDMA)
|
/* Ensure xprt->addr holds valid server TCP (not RDMA)
|
||||||
* address, for any side protocols which peek at it */
|
* address, for any side protocols which peek at it */
|
||||||
xprt->prot = IPPROTO_TCP;
|
xprt->prot = IPPROTO_TCP;
|
||||||
|
xprt->xprt_class = &xprt_rdma;
|
||||||
xprt->addrlen = args->addrlen;
|
xprt->addrlen = args->addrlen;
|
||||||
memcpy(&xprt->addr, sap, xprt->addrlen);
|
memcpy(&xprt->addr, sap, xprt->addrlen);
|
||||||
|
|
||||||
|
@ -91,6 +91,11 @@ static unsigned int xprt_max_resvport_limit = RPC_MAX_RESVPORT;
|
|||||||
|
|
||||||
static struct ctl_table_header *sunrpc_table_header;
|
static struct ctl_table_header *sunrpc_table_header;
|
||||||
|
|
||||||
|
static struct xprt_class xs_local_transport;
|
||||||
|
static struct xprt_class xs_udp_transport;
|
||||||
|
static struct xprt_class xs_tcp_transport;
|
||||||
|
static struct xprt_class xs_bc_tcp_transport;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FIXME: changing the UDP slot table size should also resize the UDP
|
* FIXME: changing the UDP slot table size should also resize the UDP
|
||||||
* socket buffers for existing UDP transports
|
* socket buffers for existing UDP transports
|
||||||
@ -2779,6 +2784,7 @@ static struct rpc_xprt *xs_setup_local(struct xprt_create *args)
|
|||||||
transport = container_of(xprt, struct sock_xprt, xprt);
|
transport = container_of(xprt, struct sock_xprt, xprt);
|
||||||
|
|
||||||
xprt->prot = 0;
|
xprt->prot = 0;
|
||||||
|
xprt->xprt_class = &xs_local_transport;
|
||||||
xprt->max_payload = RPC_MAX_FRAGMENT_SIZE;
|
xprt->max_payload = RPC_MAX_FRAGMENT_SIZE;
|
||||||
|
|
||||||
xprt->bind_timeout = XS_BIND_TO;
|
xprt->bind_timeout = XS_BIND_TO;
|
||||||
@ -2848,6 +2854,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
|
|||||||
transport = container_of(xprt, struct sock_xprt, xprt);
|
transport = container_of(xprt, struct sock_xprt, xprt);
|
||||||
|
|
||||||
xprt->prot = IPPROTO_UDP;
|
xprt->prot = IPPROTO_UDP;
|
||||||
|
xprt->xprt_class = &xs_udp_transport;
|
||||||
/* XXX: header size can vary due to auth type, IPv6, etc. */
|
/* XXX: header size can vary due to auth type, IPv6, etc. */
|
||||||
xprt->max_payload = (1U << 16) - (MAX_HEADER << 3);
|
xprt->max_payload = (1U << 16) - (MAX_HEADER << 3);
|
||||||
|
|
||||||
@ -2928,6 +2935,7 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
|
|||||||
transport = container_of(xprt, struct sock_xprt, xprt);
|
transport = container_of(xprt, struct sock_xprt, xprt);
|
||||||
|
|
||||||
xprt->prot = IPPROTO_TCP;
|
xprt->prot = IPPROTO_TCP;
|
||||||
|
xprt->xprt_class = &xs_tcp_transport;
|
||||||
xprt->max_payload = RPC_MAX_FRAGMENT_SIZE;
|
xprt->max_payload = RPC_MAX_FRAGMENT_SIZE;
|
||||||
|
|
||||||
xprt->bind_timeout = XS_BIND_TO;
|
xprt->bind_timeout = XS_BIND_TO;
|
||||||
@ -3001,6 +3009,7 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args)
|
|||||||
transport = container_of(xprt, struct sock_xprt, xprt);
|
transport = container_of(xprt, struct sock_xprt, xprt);
|
||||||
|
|
||||||
xprt->prot = IPPROTO_TCP;
|
xprt->prot = IPPROTO_TCP;
|
||||||
|
xprt->xprt_class = &xs_bc_tcp_transport;
|
||||||
xprt->max_payload = RPC_MAX_FRAGMENT_SIZE;
|
xprt->max_payload = RPC_MAX_FRAGMENT_SIZE;
|
||||||
xprt->timeout = &xs_tcp_default_timeout;
|
xprt->timeout = &xs_tcp_default_timeout;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user