Commit 526fca37 authored by Trond Myklebust's avatar Trond Myklebust

Merge branch 'sysfs-devel'

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parents e9e8ee40 681d5699
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/sunrpc/xprtmultipath.h> #include <linux/sunrpc/xprtmultipath.h>
struct rpc_inode; struct rpc_inode;
struct rpc_sysfs_client;
/* /*
* The high-level client handle * The high-level client handle
...@@ -71,6 +72,7 @@ struct rpc_clnt { ...@@ -71,6 +72,7 @@ struct rpc_clnt {
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG) #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
struct dentry *cl_debugfs; /* debugfs directory */ struct dentry *cl_debugfs; /* debugfs directory */
#endif #endif
struct rpc_sysfs_client *cl_sysfs; /* sysfs directory */
/* cl_work is only needed after cl_xpi is no longer used, /* cl_work is only needed after cl_xpi is no longer used,
* and that are of similar size * and that are of similar size
*/ */
......
...@@ -53,6 +53,7 @@ enum rpc_display_format_t { ...@@ -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;
...@@ -182,9 +183,11 @@ enum xprt_transports { ...@@ -182,9 +183,11 @@ enum xprt_transports {
XPRT_TRANSPORT_LOCAL = 257, XPRT_TRANSPORT_LOCAL = 257,
}; };
struct rpc_sysfs_xprt;
struct rpc_xprt { struct rpc_xprt {
struct kref kref; /* Reference count */ struct kref kref; /* Reference count */
const struct rpc_xprt_ops *ops; /* transport methods */ const struct rpc_xprt_ops *ops; /* transport methods */
unsigned int id; /* transport id */
const struct rpc_timeout *timeout; /* timeout parms */ const struct rpc_timeout *timeout; /* timeout parms */
struct sockaddr_storage addr; /* server address */ struct sockaddr_storage addr; /* server address */
...@@ -288,6 +291,8 @@ struct rpc_xprt { ...@@ -288,6 +291,8 @@ 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;
struct rpc_sysfs_xprt *xprt_sysfs;
}; };
#if defined(CONFIG_SUNRPC_BACKCHANNEL) #if defined(CONFIG_SUNRPC_BACKCHANNEL)
...@@ -370,6 +375,7 @@ struct rpc_xprt * xprt_alloc(struct net *net, size_t size, ...@@ -370,6 +375,7 @@ struct rpc_xprt * xprt_alloc(struct net *net, size_t size,
void xprt_free(struct rpc_xprt *); void xprt_free(struct rpc_xprt *);
void xprt_add_backlog(struct rpc_xprt *xprt, struct rpc_task *task); void xprt_add_backlog(struct rpc_xprt *xprt, struct rpc_task *task);
bool xprt_wake_up_backlog(struct rpc_xprt *xprt, struct rpc_rqst *req); bool xprt_wake_up_backlog(struct rpc_xprt *xprt, struct rpc_rqst *req);
void xprt_cleanup_ids(void);
static inline int static inline int
xprt_enable_swap(struct rpc_xprt *xprt) xprt_enable_swap(struct rpc_xprt *xprt)
...@@ -408,6 +414,7 @@ void xprt_conditional_disconnect(struct rpc_xprt *xprt, unsigned int cookie); ...@@ -408,6 +414,7 @@ void xprt_conditional_disconnect(struct rpc_xprt *xprt, unsigned int cookie);
bool xprt_lock_connect(struct rpc_xprt *, struct rpc_task *, void *); bool xprt_lock_connect(struct rpc_xprt *, struct rpc_task *, void *);
void xprt_unlock_connect(struct rpc_xprt *, void *); void xprt_unlock_connect(struct rpc_xprt *, void *);
void xprt_release_write(struct rpc_xprt *, struct rpc_task *);
/* /*
* Reserved bit positions in xprt->state * Reserved bit positions in xprt->state
......
...@@ -10,10 +10,12 @@ ...@@ -10,10 +10,12 @@
#define _NET_SUNRPC_XPRTMULTIPATH_H #define _NET_SUNRPC_XPRTMULTIPATH_H
struct rpc_xprt_iter_ops; struct rpc_xprt_iter_ops;
struct rpc_sysfs_xprt_switch;
struct rpc_xprt_switch { struct rpc_xprt_switch {
spinlock_t xps_lock; spinlock_t xps_lock;
struct kref xps_kref; struct kref xps_kref;
unsigned int xps_id;
unsigned int xps_nxprts; unsigned int xps_nxprts;
unsigned int xps_nactive; unsigned int xps_nactive;
atomic_long_t xps_queuelen; atomic_long_t xps_queuelen;
...@@ -23,6 +25,7 @@ struct rpc_xprt_switch { ...@@ -23,6 +25,7 @@ struct rpc_xprt_switch {
const struct rpc_xprt_iter_ops *xps_iter_ops; const struct rpc_xprt_iter_ops *xps_iter_ops;
struct rpc_sysfs_xprt_switch *xps_sysfs;
struct rcu_head xps_rcu; struct rcu_head xps_rcu;
}; };
...@@ -71,4 +74,7 @@ extern struct rpc_xprt *xprt_iter_get_next(struct rpc_xprt_iter *xpi); ...@@ -71,4 +74,7 @@ extern struct rpc_xprt *xprt_iter_get_next(struct rpc_xprt_iter *xpi);
extern bool rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps, extern bool rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps,
const struct sockaddr *sap); const struct sockaddr *sap);
extern void xprt_multipath_cleanup_ids(void);
#endif #endif
...@@ -12,7 +12,7 @@ sunrpc-y := clnt.o xprt.o socklib.o xprtsock.o sched.o \ ...@@ -12,7 +12,7 @@ sunrpc-y := clnt.o xprt.o socklib.o xprtsock.o sched.o \
auth.o auth_null.o auth_unix.o \ auth.o auth_null.o auth_unix.o \
svc.o svcsock.o svcauth.o svcauth_unix.o \ svc.o svcsock.o svcauth.o svcauth_unix.o \
addr.o rpcb_clnt.o timer.o xdr.o \ addr.o rpcb_clnt.o timer.o xdr.o \
sunrpc_syms.o cache.o rpc_pipe.o \ sunrpc_syms.o cache.o rpc_pipe.o sysfs.o \
svc_xprt.o \ svc_xprt.o \
xprtmultipath.o xprtmultipath.o
sunrpc-$(CONFIG_SUNRPC_DEBUG) += debugfs.o sunrpc-$(CONFIG_SUNRPC_DEBUG) += debugfs.o
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <trace/events/sunrpc.h> #include <trace/events/sunrpc.h>
#include "sunrpc.h" #include "sunrpc.h"
#include "sysfs.h"
#include "netns.h" #include "netns.h"
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG) #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
...@@ -327,6 +328,7 @@ static int rpc_client_register(struct rpc_clnt *clnt, ...@@ -327,6 +328,7 @@ static int rpc_client_register(struct rpc_clnt *clnt,
out: out:
if (pipefs_sb) if (pipefs_sb)
rpc_put_sb_net(net); rpc_put_sb_net(net);
rpc_sysfs_client_destroy(clnt);
rpc_clnt_debugfs_unregister(clnt); rpc_clnt_debugfs_unregister(clnt);
return err; return err;
} }
...@@ -423,6 +425,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args, ...@@ -423,6 +425,7 @@ static struct rpc_clnt * rpc_new_client(const struct rpc_create_args *args,
/* save the nodename */ /* save the nodename */
rpc_clnt_set_nodename(clnt, nodename); rpc_clnt_set_nodename(clnt, nodename);
rpc_sysfs_client_setup(clnt, xps, rpc_net_ns(clnt));
err = rpc_client_register(clnt, args->authflavor, args->client_name); err = rpc_client_register(clnt, args->authflavor, args->client_name);
if (err) if (err)
goto out_no_path; goto out_no_path;
...@@ -733,6 +736,7 @@ int rpc_switch_client_transport(struct rpc_clnt *clnt, ...@@ -733,6 +736,7 @@ int rpc_switch_client_transport(struct rpc_clnt *clnt,
rpc_unregister_client(clnt); rpc_unregister_client(clnt);
__rpc_clnt_remove_pipedir(clnt); __rpc_clnt_remove_pipedir(clnt);
rpc_sysfs_client_destroy(clnt);
rpc_clnt_debugfs_unregister(clnt); rpc_clnt_debugfs_unregister(clnt);
/* /*
...@@ -879,6 +883,7 @@ static void rpc_free_client_work(struct work_struct *work) ...@@ -879,6 +883,7 @@ static void rpc_free_client_work(struct work_struct *work)
* so they cannot be called in rpciod, so they are handled separately * so they cannot be called in rpciod, so they are handled separately
* here. * here.
*/ */
rpc_sysfs_client_destroy(clnt);
rpc_clnt_debugfs_unregister(clnt); rpc_clnt_debugfs_unregister(clnt);
rpc_free_clid(clnt); rpc_free_clid(clnt);
rpc_clnt_remove_pipedir(clnt); rpc_clnt_remove_pipedir(clnt);
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/sunrpc/xprtsock.h> #include <linux/sunrpc/xprtsock.h>
#include "sunrpc.h" #include "sunrpc.h"
#include "sysfs.h"
#include "netns.h" #include "netns.h"
unsigned int sunrpc_net_id; unsigned int sunrpc_net_id;
...@@ -103,6 +104,10 @@ init_sunrpc(void) ...@@ -103,6 +104,10 @@ init_sunrpc(void)
if (err) if (err)
goto out4; goto out4;
err = rpc_sysfs_init();
if (err)
goto out5;
sunrpc_debugfs_init(); sunrpc_debugfs_init();
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG) #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
rpc_register_sysctl(); rpc_register_sysctl();
...@@ -111,6 +116,8 @@ init_sunrpc(void) ...@@ -111,6 +116,8 @@ init_sunrpc(void)
init_socket_xprt(); /* clnt sock transport */ init_socket_xprt(); /* clnt sock transport */
return 0; return 0;
out5:
unregister_rpc_pipefs();
out4: out4:
unregister_pernet_subsys(&sunrpc_net_ops); unregister_pernet_subsys(&sunrpc_net_ops);
out3: out3:
...@@ -124,7 +131,10 @@ init_sunrpc(void) ...@@ -124,7 +131,10 @@ init_sunrpc(void)
static void __exit static void __exit
cleanup_sunrpc(void) cleanup_sunrpc(void)
{ {
rpc_sysfs_exit();
rpc_cleanup_clids(); rpc_cleanup_clids();
xprt_cleanup_ids();
xprt_multipath_cleanup_ids();
rpcauth_remove_module(); rpcauth_remove_module();
cleanup_socket_xprt(); cleanup_socket_xprt();
svc_cleanup_xprt_sock(); svc_cleanup_xprt_sock();
......
This diff is collapsed.
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2020 Anna Schumaker <Anna.Schumaker@Netapp.com>
*/
#ifndef __SUNRPC_SYSFS_H
#define __SUNRPC_SYSFS_H
struct rpc_sysfs_client {
struct kobject kobject;
struct net *net;
struct rpc_clnt *clnt;
struct rpc_xprt_switch *xprt_switch;
};
struct rpc_sysfs_xprt_switch {
struct kobject kobject;
struct net *net;
struct rpc_xprt_switch *xprt_switch;
struct rpc_xprt *xprt;
};
struct rpc_sysfs_xprt {
struct kobject kobject;
struct rpc_xprt *xprt;
};
int rpc_sysfs_init(void);
void rpc_sysfs_exit(void);
void rpc_sysfs_client_setup(struct rpc_clnt *clnt,
struct rpc_xprt_switch *xprt_switch,
struct net *net);
void rpc_sysfs_client_destroy(struct rpc_clnt *clnt);
void rpc_sysfs_xprt_switch_setup(struct rpc_xprt_switch *xprt_switch,
struct rpc_xprt *xprt, gfp_t gfp_flags);
void rpc_sysfs_xprt_switch_destroy(struct rpc_xprt_switch *xprt);
void rpc_sysfs_xprt_setup(struct rpc_xprt_switch *xprt_switch,
struct rpc_xprt *xprt, gfp_t gfp_flags);
void rpc_sysfs_xprt_destroy(struct rpc_xprt *xprt);
#endif
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
#include <trace/events/sunrpc.h> #include <trace/events/sunrpc.h>
#include "sunrpc.h" #include "sunrpc.h"
#include "sysfs.h"
/* /*
* Local variables * Local variables
...@@ -443,7 +444,7 @@ void xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task) ...@@ -443,7 +444,7 @@ void xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task)
} }
EXPORT_SYMBOL_GPL(xprt_release_xprt_cong); EXPORT_SYMBOL_GPL(xprt_release_xprt_cong);
static inline void xprt_release_write(struct rpc_xprt *xprt, struct rpc_task *task) void xprt_release_write(struct rpc_xprt *xprt, struct rpc_task *task)
{ {
if (xprt->snd_task != task) if (xprt->snd_task != task)
return; return;
...@@ -1746,6 +1747,30 @@ static void xprt_free_all_slots(struct rpc_xprt *xprt) ...@@ -1746,6 +1747,30 @@ static void xprt_free_all_slots(struct rpc_xprt *xprt)
} }
} }
static DEFINE_IDA(rpc_xprt_ids);
void xprt_cleanup_ids(void)
{
ida_destroy(&rpc_xprt_ids);
}
static int xprt_alloc_id(struct rpc_xprt *xprt)
{
int id;
id = ida_simple_get(&rpc_xprt_ids, 0, 0, GFP_KERNEL);
if (id < 0)
return id;
xprt->id = id;
return 0;
}
static void xprt_free_id(struct rpc_xprt *xprt)
{
ida_simple_remove(&rpc_xprt_ids, xprt->id);
}
struct rpc_xprt *xprt_alloc(struct net *net, size_t size, struct rpc_xprt *xprt_alloc(struct net *net, size_t size,
unsigned int num_prealloc, unsigned int num_prealloc,
unsigned int max_alloc) unsigned int max_alloc)
...@@ -1758,6 +1783,7 @@ struct rpc_xprt *xprt_alloc(struct net *net, size_t size, ...@@ -1758,6 +1783,7 @@ struct rpc_xprt *xprt_alloc(struct net *net, size_t size,
if (xprt == NULL) if (xprt == NULL)
goto out; goto out;
xprt_alloc_id(xprt);
xprt_init(xprt, net); xprt_init(xprt, net);
for (i = 0; i < num_prealloc; i++) { for (i = 0; i < num_prealloc; i++) {
...@@ -1786,6 +1812,8 @@ void xprt_free(struct rpc_xprt *xprt) ...@@ -1786,6 +1812,8 @@ void xprt_free(struct rpc_xprt *xprt)
{ {
put_net(xprt->xprt_net); put_net(xprt->xprt_net);
xprt_free_all_slots(xprt); xprt_free_all_slots(xprt);
xprt_free_id(xprt);
rpc_sysfs_xprt_destroy(xprt);
kfree_rcu(xprt, rcu); kfree_rcu(xprt, rcu);
} }
EXPORT_SYMBOL_GPL(xprt_free); EXPORT_SYMBOL_GPL(xprt_free);
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
#include <linux/sunrpc/addr.h> #include <linux/sunrpc/addr.h>
#include <linux/sunrpc/xprtmultipath.h> #include <linux/sunrpc/xprtmultipath.h>
#include "sysfs.h"
typedef struct rpc_xprt *(*xprt_switch_find_xprt_t)(struct rpc_xprt_switch *xps, typedef struct rpc_xprt *(*xprt_switch_find_xprt_t)(struct rpc_xprt_switch *xps,
const struct rpc_xprt *cur); const struct rpc_xprt *cur);
...@@ -55,6 +57,7 @@ void rpc_xprt_switch_add_xprt(struct rpc_xprt_switch *xps, ...@@ -55,6 +57,7 @@ void rpc_xprt_switch_add_xprt(struct rpc_xprt_switch *xps,
if (xps->xps_net == xprt->xprt_net || xps->xps_net == NULL) if (xps->xps_net == xprt->xprt_net || xps->xps_net == NULL)
xprt_switch_add_xprt_locked(xps, xprt); xprt_switch_add_xprt_locked(xps, xprt);
spin_unlock(&xps->xps_lock); spin_unlock(&xps->xps_lock);
rpc_sysfs_xprt_setup(xps, xprt, GFP_KERNEL);
} }
static void xprt_switch_remove_xprt_locked(struct rpc_xprt_switch *xps, static void xprt_switch_remove_xprt_locked(struct rpc_xprt_switch *xps,
...@@ -86,6 +89,30 @@ void rpc_xprt_switch_remove_xprt(struct rpc_xprt_switch *xps, ...@@ -86,6 +89,30 @@ void rpc_xprt_switch_remove_xprt(struct rpc_xprt_switch *xps,
xprt_put(xprt); xprt_put(xprt);
} }
static DEFINE_IDA(rpc_xprtswitch_ids);
void xprt_multipath_cleanup_ids(void)
{
ida_destroy(&rpc_xprtswitch_ids);
}
static int xprt_switch_alloc_id(struct rpc_xprt_switch *xps, gfp_t gfp_flags)
{
int id;
id = ida_simple_get(&rpc_xprtswitch_ids, 0, 0, gfp_flags);
if (id < 0)
return id;
xps->xps_id = id;
return 0;
}
static void xprt_switch_free_id(struct rpc_xprt_switch *xps)
{
ida_simple_remove(&rpc_xprtswitch_ids, xps->xps_id);
}
/** /**
* xprt_switch_alloc - Allocate a new struct rpc_xprt_switch * xprt_switch_alloc - Allocate a new struct rpc_xprt_switch
* @xprt: pointer to struct rpc_xprt * @xprt: pointer to struct rpc_xprt
...@@ -103,12 +130,15 @@ struct rpc_xprt_switch *xprt_switch_alloc(struct rpc_xprt *xprt, ...@@ -103,12 +130,15 @@ struct rpc_xprt_switch *xprt_switch_alloc(struct rpc_xprt *xprt,
if (xps != NULL) { if (xps != NULL) {
spin_lock_init(&xps->xps_lock); spin_lock_init(&xps->xps_lock);
kref_init(&xps->xps_kref); kref_init(&xps->xps_kref);
xprt_switch_alloc_id(xps, gfp_flags);
xps->xps_nxprts = xps->xps_nactive = 0; xps->xps_nxprts = xps->xps_nactive = 0;
atomic_long_set(&xps->xps_queuelen, 0); atomic_long_set(&xps->xps_queuelen, 0);
xps->xps_net = NULL; xps->xps_net = NULL;
INIT_LIST_HEAD(&xps->xps_xprt_list); INIT_LIST_HEAD(&xps->xps_xprt_list);
xps->xps_iter_ops = &rpc_xprt_iter_singular; xps->xps_iter_ops = &rpc_xprt_iter_singular;
rpc_sysfs_xprt_switch_setup(xps, xprt, gfp_flags);
xprt_switch_add_xprt_locked(xps, xprt); xprt_switch_add_xprt_locked(xps, xprt);
rpc_sysfs_xprt_setup(xps, xprt, gfp_flags);
} }
return xps; return xps;
...@@ -136,6 +166,8 @@ static void xprt_switch_free(struct kref *kref) ...@@ -136,6 +166,8 @@ static void xprt_switch_free(struct kref *kref)
struct rpc_xprt_switch, xps_kref); struct rpc_xprt_switch, xps_kref);
xprt_switch_free_entries(xps); xprt_switch_free_entries(xps);
rpc_sysfs_xprt_switch_destroy(xps);
xprt_switch_free_id(xps);
kfree_rcu(xps, xps_rcu); kfree_rcu(xps, xps_rcu);
} }
......
...@@ -73,6 +73,7 @@ unsigned int xprt_rdma_max_inline_read = RPCRDMA_DEF_INLINE; ...@@ -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) ...@@ -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; ...@@ -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
...@@ -2780,6 +2785,7 @@ static struct rpc_xprt *xs_setup_local(struct xprt_create *args) ...@@ -2780,6 +2785,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;
...@@ -2849,6 +2855,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args) ...@@ -2849,6 +2855,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);
...@@ -2929,6 +2936,7 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args) ...@@ -2929,6 +2936,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;
...@@ -3002,6 +3010,7 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args) ...@@ -3002,6 +3010,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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment