xps 208 include/linux/sunrpc/clnt.h struct rpc_xprt_switch *xps, xps 46 include/linux/sunrpc/xprtmultipath.h extern struct rpc_xprt_switch *xprt_switch_get(struct rpc_xprt_switch *xps); xps 47 include/linux/sunrpc/xprtmultipath.h extern void xprt_switch_put(struct rpc_xprt_switch *xps); xps 49 include/linux/sunrpc/xprtmultipath.h extern void rpc_xprt_switch_set_roundrobin(struct rpc_xprt_switch *xps); xps 51 include/linux/sunrpc/xprtmultipath.h extern void rpc_xprt_switch_add_xprt(struct rpc_xprt_switch *xps, xps 53 include/linux/sunrpc/xprtmultipath.h extern void rpc_xprt_switch_remove_xprt(struct rpc_xprt_switch *xps, xps 57 include/linux/sunrpc/xprtmultipath.h struct rpc_xprt_switch *xps); xps 60 include/linux/sunrpc/xprtmultipath.h struct rpc_xprt_switch *xps); xps 72 include/linux/sunrpc/xprtmultipath.h extern bool rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps, xps 1225 net/sunrpc/auth_gss/auth_gss.c struct rpc_xprt_switch *xps = rcu_access_pointer(clnt->cl_xpi.xpi_xpswitch); xps 1230 net/sunrpc/auth_gss/auth_gss.c if (rcu_access_pointer(parent->cl_xpi.xpi_xpswitch) != xps) xps 362 net/sunrpc/clnt.c struct rpc_xprt_switch *xps, xps 421 net/sunrpc/clnt.c xprt_iter_init(&clnt->cl_xpi, xps); xps 422 net/sunrpc/clnt.c xprt_switch_put(xps); xps 451 net/sunrpc/clnt.c xprt_switch_put(xps); xps 460 net/sunrpc/clnt.c struct rpc_xprt_switch *xps; xps 464 net/sunrpc/clnt.c xps = args->bc_xprt->xpt_bc_xps; xps 465 net/sunrpc/clnt.c xprt_switch_get(xps); xps 467 net/sunrpc/clnt.c xps = xprt_switch_alloc(xprt, GFP_KERNEL); xps 468 net/sunrpc/clnt.c if (xps == NULL) { xps 473 net/sunrpc/clnt.c xprt_switch_get(xps); xps 474 net/sunrpc/clnt.c xprt->bc_xprt->xpt_bc_xps = xps; xps 477 net/sunrpc/clnt.c clnt = rpc_new_client(args, xps, xprt, NULL); xps 615 net/sunrpc/clnt.c struct rpc_xprt_switch *xps; xps 623 net/sunrpc/clnt.c xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); xps 625 net/sunrpc/clnt.c if (xprt == NULL || xps == NULL) { xps 627 net/sunrpc/clnt.c xprt_switch_put(xps); xps 633 net/sunrpc/clnt.c new = rpc_new_client(args, xps, xprt, clnt); xps 717 net/sunrpc/clnt.c struct rpc_xprt_switch *xps, *oldxps; xps 729 net/sunrpc/clnt.c xps = xprt_switch_alloc(xprt, GFP_KERNEL); xps 730 net/sunrpc/clnt.c if (xps == NULL) { xps 739 net/sunrpc/clnt.c oldxps = xprt_iter_xchg_switch(&clnt->cl_xpi, xps); xps 771 net/sunrpc/clnt.c xps = xprt_iter_xchg_switch(&clnt->cl_xpi, oldxps); xps 775 net/sunrpc/clnt.c xprt_switch_put(xps); xps 785 net/sunrpc/clnt.c struct rpc_xprt_switch *xps; xps 788 net/sunrpc/clnt.c xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); xps 790 net/sunrpc/clnt.c if (xps == NULL) xps 792 net/sunrpc/clnt.c xprt_iter_init_listall(xpi, xps); xps 793 net/sunrpc/clnt.c xprt_switch_put(xps); xps 984 net/sunrpc/clnt.c struct rpc_xprt_switch *xps; xps 989 net/sunrpc/clnt.c xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch); xps 990 net/sunrpc/clnt.c atomic_long_inc(&xps->xps_queuelen); xps 1000 net/sunrpc/clnt.c struct rpc_xprt_switch *xps; xps 1004 net/sunrpc/clnt.c xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch); xps 1005 net/sunrpc/clnt.c atomic_long_dec(&xps->xps_queuelen); xps 2764 net/sunrpc/clnt.c struct rpc_xprt_switch *xps; xps 2773 net/sunrpc/clnt.c rpc_xprt_switch_add_xprt(data->xps, data->xprt); xps 2781 net/sunrpc/clnt.c xprt_switch_put(data->xps); xps 2798 net/sunrpc/clnt.c struct rpc_xprt_switch *xps, struct rpc_xprt *xprt, xps 2807 net/sunrpc/clnt.c data->xps = xprt_switch_get(xps); xps 2809 net/sunrpc/clnt.c if (rpc_xprt_switch_has_addr(data->xps, (struct sockaddr *)&xprt->addr)) { xps 2844 net/sunrpc/clnt.c struct rpc_xprt_switch *xps, xps 2853 net/sunrpc/clnt.c xprt_switch_get(xps); xps 2855 net/sunrpc/clnt.c if (rpc_xprt_switch_has_addr(xps, (struct sockaddr *)&xprt->addr)) xps 2876 net/sunrpc/clnt.c xprt_switch_put(xps); xps 2882 net/sunrpc/clnt.c xprt_switch_put(xps); xps 2910 net/sunrpc/clnt.c struct rpc_xprt_switch *xps; xps 2918 net/sunrpc/clnt.c xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); xps 2920 net/sunrpc/clnt.c if (xps == NULL || xprt == NULL) { xps 2922 net/sunrpc/clnt.c xprt_switch_put(xps); xps 2941 net/sunrpc/clnt.c rpc_xprt_switch_set_roundrobin(xps); xps 2943 net/sunrpc/clnt.c ret = setup(clnt, xps, xprt, data); xps 2947 net/sunrpc/clnt.c rpc_xprt_switch_add_xprt(xps, xprt); xps 2951 net/sunrpc/clnt.c xprt_switch_put(xps); xps 3010 net/sunrpc/clnt.c struct rpc_xprt_switch *xps; xps 3014 net/sunrpc/clnt.c xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch); xps 3015 net/sunrpc/clnt.c ret = rpc_xprt_switch_has_addr(xps, sap); xps 657 net/sunrpc/rpcb_clnt.c struct rpc_xprt_switch *xps = rcu_access_pointer(clnt->cl_xpi.xpi_xpswitch); xps 660 net/sunrpc/rpcb_clnt.c if (rcu_access_pointer(parent->cl_xpi.xpi_xpswitch) != xps) xps 29 net/sunrpc/xprtmultipath.c static void xprt_switch_add_xprt_locked(struct rpc_xprt_switch *xps, xps 34 net/sunrpc/xprtmultipath.c list_add_tail_rcu(&xprt->xprt_switch, &xps->xps_xprt_list); xps 36 net/sunrpc/xprtmultipath.c if (xps->xps_nxprts == 0) xps 37 net/sunrpc/xprtmultipath.c xps->xps_net = xprt->xprt_net; xps 38 net/sunrpc/xprtmultipath.c xps->xps_nxprts++; xps 39 net/sunrpc/xprtmultipath.c xps->xps_nactive++; xps 49 net/sunrpc/xprtmultipath.c void rpc_xprt_switch_add_xprt(struct rpc_xprt_switch *xps, xps 54 net/sunrpc/xprtmultipath.c spin_lock(&xps->xps_lock); xps 55 net/sunrpc/xprtmultipath.c if (xps->xps_net == xprt->xprt_net || xps->xps_net == NULL) xps 56 net/sunrpc/xprtmultipath.c xprt_switch_add_xprt_locked(xps, xprt); xps 57 net/sunrpc/xprtmultipath.c spin_unlock(&xps->xps_lock); xps 60 net/sunrpc/xprtmultipath.c static void xprt_switch_remove_xprt_locked(struct rpc_xprt_switch *xps, xps 65 net/sunrpc/xprtmultipath.c xps->xps_nactive--; xps 66 net/sunrpc/xprtmultipath.c xps->xps_nxprts--; xps 67 net/sunrpc/xprtmultipath.c if (xps->xps_nxprts == 0) xps 68 net/sunrpc/xprtmultipath.c xps->xps_net = NULL; xps 80 net/sunrpc/xprtmultipath.c void rpc_xprt_switch_remove_xprt(struct rpc_xprt_switch *xps, xps 83 net/sunrpc/xprtmultipath.c spin_lock(&xps->xps_lock); xps 84 net/sunrpc/xprtmultipath.c xprt_switch_remove_xprt_locked(xps, xprt); xps 85 net/sunrpc/xprtmultipath.c spin_unlock(&xps->xps_lock); xps 100 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xps; xps 102 net/sunrpc/xprtmultipath.c xps = kmalloc(sizeof(*xps), gfp_flags); xps 103 net/sunrpc/xprtmultipath.c if (xps != NULL) { xps 104 net/sunrpc/xprtmultipath.c spin_lock_init(&xps->xps_lock); xps 105 net/sunrpc/xprtmultipath.c kref_init(&xps->xps_kref); xps 106 net/sunrpc/xprtmultipath.c xps->xps_nxprts = xps->xps_nactive = 0; xps 107 net/sunrpc/xprtmultipath.c atomic_long_set(&xps->xps_queuelen, 0); xps 108 net/sunrpc/xprtmultipath.c xps->xps_net = NULL; xps 109 net/sunrpc/xprtmultipath.c INIT_LIST_HEAD(&xps->xps_xprt_list); xps 110 net/sunrpc/xprtmultipath.c xps->xps_iter_ops = &rpc_xprt_iter_singular; xps 111 net/sunrpc/xprtmultipath.c xprt_switch_add_xprt_locked(xps, xprt); xps 114 net/sunrpc/xprtmultipath.c return xps; xps 117 net/sunrpc/xprtmultipath.c static void xprt_switch_free_entries(struct rpc_xprt_switch *xps) xps 119 net/sunrpc/xprtmultipath.c spin_lock(&xps->xps_lock); xps 120 net/sunrpc/xprtmultipath.c while (!list_empty(&xps->xps_xprt_list)) { xps 123 net/sunrpc/xprtmultipath.c xprt = list_first_entry(&xps->xps_xprt_list, xps 125 net/sunrpc/xprtmultipath.c xprt_switch_remove_xprt_locked(xps, xprt); xps 126 net/sunrpc/xprtmultipath.c spin_unlock(&xps->xps_lock); xps 128 net/sunrpc/xprtmultipath.c spin_lock(&xps->xps_lock); xps 130 net/sunrpc/xprtmultipath.c spin_unlock(&xps->xps_lock); xps 135 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xps = container_of(kref, xps 138 net/sunrpc/xprtmultipath.c xprt_switch_free_entries(xps); xps 139 net/sunrpc/xprtmultipath.c kfree_rcu(xps, xps_rcu); xps 148 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xprt_switch_get(struct rpc_xprt_switch *xps) xps 150 net/sunrpc/xprtmultipath.c if (xps != NULL && kref_get_unless_zero(&xps->xps_kref)) xps 151 net/sunrpc/xprtmultipath.c return xps; xps 161 net/sunrpc/xprtmultipath.c void xprt_switch_put(struct rpc_xprt_switch *xps) xps 163 net/sunrpc/xprtmultipath.c if (xps != NULL) xps 164 net/sunrpc/xprtmultipath.c kref_put(&xps->xps_kref, xprt_switch_free); xps 173 net/sunrpc/xprtmultipath.c void rpc_xprt_switch_set_roundrobin(struct rpc_xprt_switch *xps) xps 175 net/sunrpc/xprtmultipath.c if (READ_ONCE(xps->xps_iter_ops) != &rpc_xprt_iter_roundrobin) xps 176 net/sunrpc/xprtmultipath.c WRITE_ONCE(xps->xps_iter_ops, &rpc_xprt_iter_roundrobin); xps 219 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xps = rcu_dereference(xpi->xpi_xpswitch); xps 221 net/sunrpc/xprtmultipath.c if (xps == NULL) xps 223 net/sunrpc/xprtmultipath.c return xprt_switch_find_first_entry(&xps->xps_xprt_list); xps 245 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xps = rcu_dereference(xpi->xpi_xpswitch); xps 248 net/sunrpc/xprtmultipath.c if (xps == NULL) xps 250 net/sunrpc/xprtmultipath.c head = &xps->xps_xprt_list; xps 251 net/sunrpc/xprtmultipath.c if (xpi->xpi_cursor == NULL || xps->xps_nxprts < 2) xps 256 net/sunrpc/xprtmultipath.c bool rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps, xps 262 net/sunrpc/xprtmultipath.c if (xps == NULL || sap == NULL) xps 265 net/sunrpc/xprtmultipath.c head = &xps->xps_xprt_list; xps 294 net/sunrpc/xprtmultipath.c struct rpc_xprt *xprt_switch_set_next_cursor(struct rpc_xprt_switch *xps, xps 301 net/sunrpc/xprtmultipath.c pos = find_next(xps, old); xps 310 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xps = rcu_dereference(xpi->xpi_xpswitch); xps 312 net/sunrpc/xprtmultipath.c if (xps == NULL) xps 314 net/sunrpc/xprtmultipath.c return xprt_switch_set_next_cursor(xps, &xpi->xpi_cursor, find_next); xps 330 net/sunrpc/xprtmultipath.c struct rpc_xprt *xprt_switch_find_next_entry_roundrobin(struct rpc_xprt_switch *xps, xps 333 net/sunrpc/xprtmultipath.c struct list_head *head = &xps->xps_xprt_list; xps 344 net/sunrpc/xprtmultipath.c xps_queuelen = atomic_long_read(&xps->xps_queuelen); xps 345 net/sunrpc/xprtmultipath.c nactive = READ_ONCE(xps->xps_nactive); xps 362 net/sunrpc/xprtmultipath.c struct rpc_xprt *xprt_switch_find_next_entry_all(struct rpc_xprt_switch *xps, xps 365 net/sunrpc/xprtmultipath.c return xprt_switch_find_next_entry(&xps->xps_xprt_list, cur); xps 391 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xps, xps 394 net/sunrpc/xprtmultipath.c rcu_assign_pointer(xpi->xpi_xpswitch, xprt_switch_get(xps)); xps 409 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xps) xps 411 net/sunrpc/xprtmultipath.c __xprt_iter_init(xpi, xps, NULL); xps 423 net/sunrpc/xprtmultipath.c struct rpc_xprt_switch *xps) xps 425 net/sunrpc/xprtmultipath.c __xprt_iter_init(xpi, xps, &rpc_xprt_iter_listall);