Lines Matching refs:xpi
177 const struct rpc_xprt_iter_ops *xprt_iter_ops(const struct rpc_xprt_iter *xpi) in xprt_iter_ops() argument
179 if (xpi->xpi_ops != NULL) in xprt_iter_ops()
180 return xpi->xpi_ops; in xprt_iter_ops()
181 return rcu_dereference(xpi->xpi_xpswitch)->xps_iter_ops; in xprt_iter_ops()
185 void xprt_iter_no_rewind(struct rpc_xprt_iter *xpi) in xprt_iter_no_rewind() argument
190 void xprt_iter_default_rewind(struct rpc_xprt_iter *xpi) in xprt_iter_default_rewind() argument
192 WRITE_ONCE(xpi->xpi_cursor, NULL); in xprt_iter_default_rewind()
202 struct rpc_xprt *xprt_iter_first_entry(struct rpc_xprt_iter *xpi) in xprt_iter_first_entry() argument
204 struct rpc_xprt_switch *xps = rcu_dereference(xpi->xpi_xpswitch); in xprt_iter_first_entry()
225 struct rpc_xprt *xprt_iter_current_entry(struct rpc_xprt_iter *xpi) in xprt_iter_current_entry() argument
227 struct rpc_xprt_switch *xps = rcu_dereference(xpi->xpi_xpswitch); in xprt_iter_current_entry()
233 if (xpi->xpi_cursor == NULL || xps->xps_nxprts < 2) in xprt_iter_current_entry()
235 return xprt_switch_find_current_entry(head, xpi->xpi_cursor); in xprt_iter_current_entry()
293 struct rpc_xprt *xprt_iter_next_entry_multiple(struct rpc_xprt_iter *xpi, in xprt_iter_next_entry_multiple() argument
296 struct rpc_xprt_switch *xps = rcu_dereference(xpi->xpi_xpswitch); in xprt_iter_next_entry_multiple()
301 &xpi->xpi_cursor, in xprt_iter_next_entry_multiple()
318 struct rpc_xprt *xprt_iter_next_entry_roundrobin(struct rpc_xprt_iter *xpi) in xprt_iter_next_entry_roundrobin() argument
320 return xprt_iter_next_entry_multiple(xpi, in xprt_iter_next_entry_roundrobin()
325 struct rpc_xprt *xprt_iter_next_entry_all(struct rpc_xprt_iter *xpi) in xprt_iter_next_entry_all() argument
327 return xprt_iter_next_entry_multiple(xpi, xprt_switch_find_next_entry); in xprt_iter_next_entry_all()
338 void xprt_iter_rewind(struct rpc_xprt_iter *xpi) in xprt_iter_rewind() argument
341 xprt_iter_ops(xpi)->xpi_rewind(xpi); in xprt_iter_rewind()
345 static void __xprt_iter_init(struct rpc_xprt_iter *xpi, in __xprt_iter_init() argument
349 rcu_assign_pointer(xpi->xpi_xpswitch, xprt_switch_get(xps)); in __xprt_iter_init()
350 xpi->xpi_cursor = NULL; in __xprt_iter_init()
351 xpi->xpi_ops = ops; in __xprt_iter_init()
363 void xprt_iter_init(struct rpc_xprt_iter *xpi, in xprt_iter_init() argument
366 __xprt_iter_init(xpi, xps, NULL); in xprt_iter_init()
377 void xprt_iter_init_listall(struct rpc_xprt_iter *xpi, in xprt_iter_init_listall() argument
380 __xprt_iter_init(xpi, xps, &rpc_xprt_iter_listall); in xprt_iter_init_listall()
390 struct rpc_xprt_switch *xprt_iter_xchg_switch(struct rpc_xprt_iter *xpi, in xprt_iter_xchg_switch() argument
396 oldswitch = xchg(&xpi->xpi_xpswitch, RCU_INITIALIZER(newswitch)); in xprt_iter_xchg_switch()
398 xprt_iter_rewind(xpi); in xprt_iter_xchg_switch()
406 void xprt_iter_destroy(struct rpc_xprt_iter *xpi) in xprt_iter_destroy() argument
408 xprt_switch_put(xprt_iter_xchg_switch(xpi, NULL)); in xprt_iter_destroy()
419 struct rpc_xprt *xprt_iter_xprt(struct rpc_xprt_iter *xpi) in xprt_iter_xprt() argument
422 return xprt_iter_ops(xpi)->xpi_xprt(xpi); in xprt_iter_xprt()
426 struct rpc_xprt *xprt_iter_get_helper(struct rpc_xprt_iter *xpi, in xprt_iter_get_helper() argument
432 ret = fn(xpi); in xprt_iter_get_helper()
447 struct rpc_xprt *xprt_iter_get_xprt(struct rpc_xprt_iter *xpi) in xprt_iter_get_xprt() argument
452 xprt = xprt_iter_get_helper(xpi, xprt_iter_ops(xpi)->xpi_xprt); in xprt_iter_get_xprt()
464 struct rpc_xprt *xprt_iter_get_next(struct rpc_xprt_iter *xpi) in xprt_iter_get_next() argument
469 xprt = xprt_iter_get_helper(xpi, xprt_iter_ops(xpi)->xpi_next); in xprt_iter_get_next()