Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v4.7-rc6 69 lines 1.9 kB view raw
1/* 2 * RPC client multipathing definitions 3 * 4 * Copyright (c) 2015, 2016, Primary Data, Inc. All rights reserved. 5 * 6 * Trond Myklebust <trond.myklebust@primarydata.com> 7 */ 8#ifndef _NET_SUNRPC_XPRTMULTIPATH_H 9#define _NET_SUNRPC_XPRTMULTIPATH_H 10 11struct rpc_xprt_iter_ops; 12struct rpc_xprt_switch { 13 spinlock_t xps_lock; 14 struct kref xps_kref; 15 16 unsigned int xps_nxprts; 17 struct list_head xps_xprt_list; 18 19 struct net * xps_net; 20 21 const struct rpc_xprt_iter_ops *xps_iter_ops; 22 23 struct rcu_head xps_rcu; 24}; 25 26struct rpc_xprt_iter { 27 struct rpc_xprt_switch __rcu *xpi_xpswitch; 28 struct rpc_xprt * xpi_cursor; 29 30 const struct rpc_xprt_iter_ops *xpi_ops; 31}; 32 33 34struct rpc_xprt_iter_ops { 35 void (*xpi_rewind)(struct rpc_xprt_iter *); 36 struct rpc_xprt *(*xpi_xprt)(struct rpc_xprt_iter *); 37 struct rpc_xprt *(*xpi_next)(struct rpc_xprt_iter *); 38}; 39 40extern struct rpc_xprt_switch *xprt_switch_alloc(struct rpc_xprt *xprt, 41 gfp_t gfp_flags); 42 43extern struct rpc_xprt_switch *xprt_switch_get(struct rpc_xprt_switch *xps); 44extern void xprt_switch_put(struct rpc_xprt_switch *xps); 45 46extern void rpc_xprt_switch_set_roundrobin(struct rpc_xprt_switch *xps); 47 48extern void rpc_xprt_switch_add_xprt(struct rpc_xprt_switch *xps, 49 struct rpc_xprt *xprt); 50extern void rpc_xprt_switch_remove_xprt(struct rpc_xprt_switch *xps, 51 struct rpc_xprt *xprt); 52 53extern void xprt_iter_init(struct rpc_xprt_iter *xpi, 54 struct rpc_xprt_switch *xps); 55 56extern void xprt_iter_init_listall(struct rpc_xprt_iter *xpi, 57 struct rpc_xprt_switch *xps); 58 59extern void xprt_iter_destroy(struct rpc_xprt_iter *xpi); 60 61extern struct rpc_xprt_switch *xprt_iter_xchg_switch( 62 struct rpc_xprt_iter *xpi, 63 struct rpc_xprt_switch *newswitch); 64 65extern struct rpc_xprt *xprt_iter_xprt(struct rpc_xprt_iter *xpi); 66extern struct rpc_xprt *xprt_iter_get_xprt(struct rpc_xprt_iter *xpi); 67extern struct rpc_xprt *xprt_iter_get_next(struct rpc_xprt_iter *xpi); 68 69#endif