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);