-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
SUNRPC: Add a structure to track multiple transports
In order to support multipathing/trunking we will need the ability to track multiple transports. This patch sets up a basic structure for doing so. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
- Loading branch information
Trond Myklebust
committed
Feb 5, 2016
1 parent
fda1bfe
commit 80b14d5
Showing
5 changed files
with
552 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* RPC client multipathing definitions | ||
* | ||
* Copyright (c) 2015, 2016, Primary Data, Inc. All rights reserved. | ||
* | ||
* Trond Myklebust <trond.myklebust@primarydata.com> | ||
*/ | ||
#ifndef _NET_SUNRPC_XPRTMULTIPATH_H | ||
#define _NET_SUNRPC_XPRTMULTIPATH_H | ||
|
||
struct rpc_xprt_iter_ops; | ||
struct rpc_xprt_switch { | ||
spinlock_t xps_lock; | ||
struct kref xps_kref; | ||
|
||
unsigned int xps_nxprts; | ||
struct list_head xps_xprt_list; | ||
|
||
struct net * xps_net; | ||
|
||
const struct rpc_xprt_iter_ops *xps_iter_ops; | ||
|
||
struct rcu_head xps_rcu; | ||
}; | ||
|
||
struct rpc_xprt_iter { | ||
struct rpc_xprt_switch __rcu *xpi_xpswitch; | ||
struct rpc_xprt * xpi_cursor; | ||
|
||
const struct rpc_xprt_iter_ops *xpi_ops; | ||
}; | ||
|
||
|
||
struct rpc_xprt_iter_ops { | ||
void (*xpi_rewind)(struct rpc_xprt_iter *); | ||
struct rpc_xprt *(*xpi_xprt)(struct rpc_xprt_iter *); | ||
struct rpc_xprt *(*xpi_next)(struct rpc_xprt_iter *); | ||
}; | ||
|
||
extern struct rpc_xprt_switch *xprt_switch_alloc(struct rpc_xprt *xprt, | ||
gfp_t gfp_flags); | ||
|
||
extern struct rpc_xprt_switch *xprt_switch_get(struct rpc_xprt_switch *xps); | ||
extern void xprt_switch_put(struct rpc_xprt_switch *xps); | ||
|
||
extern void rpc_xprt_switch_set_roundrobin(struct rpc_xprt_switch *xps); | ||
|
||
extern void rpc_xprt_switch_add_xprt(struct rpc_xprt_switch *xps, | ||
struct rpc_xprt *xprt); | ||
extern void rpc_xprt_switch_remove_xprt(struct rpc_xprt_switch *xps, | ||
struct rpc_xprt *xprt); | ||
|
||
extern void xprt_iter_init(struct rpc_xprt_iter *xpi, | ||
struct rpc_xprt_switch *xps); | ||
|
||
extern void xprt_iter_init_listall(struct rpc_xprt_iter *xpi, | ||
struct rpc_xprt_switch *xps); | ||
|
||
extern void xprt_iter_destroy(struct rpc_xprt_iter *xpi); | ||
|
||
extern struct rpc_xprt_switch *xprt_iter_xchg_switch( | ||
struct rpc_xprt_iter *xpi, | ||
struct rpc_xprt_switch *newswitch); | ||
|
||
extern struct rpc_xprt *xprt_iter_xprt(struct rpc_xprt_iter *xpi); | ||
extern struct rpc_xprt *xprt_iter_get_xprt(struct rpc_xprt_iter *xpi); | ||
extern struct rpc_xprt *xprt_iter_get_next(struct rpc_xprt_iter *xpi); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.