xprtmultipath.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. struct rpc_xprt_iter_ops;
  11. struct rpc_xprt_switch {
  12. spinlock_t xps_lock;
  13. struct kref xps_kref;
  14. unsigned int xps_nxprts;
  15. struct list_head xps_xprt_list;
  16. struct net * xps_net;
  17. const struct rpc_xprt_iter_ops *xps_iter_ops;
  18. struct rcu_head xps_rcu;
  19. };
  20. struct rpc_xprt_iter {
  21. struct rpc_xprt_switch __rcu *xpi_xpswitch;
  22. struct rpc_xprt * xpi_cursor;
  23. const struct rpc_xprt_iter_ops *xpi_ops;
  24. };
  25. struct rpc_xprt_iter_ops {
  26. void (*xpi_rewind)(struct rpc_xprt_iter *);
  27. struct rpc_xprt *(*xpi_xprt)(struct rpc_xprt_iter *);
  28. struct rpc_xprt *(*xpi_next)(struct rpc_xprt_iter *);
  29. };
  30. extern struct rpc_xprt_switch *xprt_switch_alloc(struct rpc_xprt *xprt,
  31. gfp_t gfp_flags);
  32. extern struct rpc_xprt_switch *xprt_switch_get(struct rpc_xprt_switch *xps);
  33. extern void xprt_switch_put(struct rpc_xprt_switch *xps);
  34. extern void rpc_xprt_switch_set_roundrobin(struct rpc_xprt_switch *xps);
  35. extern void rpc_xprt_switch_add_xprt(struct rpc_xprt_switch *xps,
  36. struct rpc_xprt *xprt);
  37. extern void rpc_xprt_switch_remove_xprt(struct rpc_xprt_switch *xps,
  38. struct rpc_xprt *xprt);
  39. extern void xprt_iter_init(struct rpc_xprt_iter *xpi,
  40. struct rpc_xprt_switch *xps);
  41. extern void xprt_iter_init_listall(struct rpc_xprt_iter *xpi,
  42. struct rpc_xprt_switch *xps);
  43. extern void xprt_iter_destroy(struct rpc_xprt_iter *xpi);
  44. extern struct rpc_xprt_switch *xprt_iter_xchg_switch(
  45. struct rpc_xprt_iter *xpi,
  46. struct rpc_xprt_switch *newswitch);
  47. extern struct rpc_xprt *xprt_iter_xprt(struct rpc_xprt_iter *xpi);
  48. extern struct rpc_xprt *xprt_iter_get_xprt(struct rpc_xprt_iter *xpi);
  49. extern struct rpc_xprt *xprt_iter_get_next(struct rpc_xprt_iter *xpi);
  50. extern bool rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps,
  51. const struct sockaddr *sap);
  52. #endif