Lines Matching +full:parent +full:- +full:locked

1 // SPDX-License-Identifier: GPL-2.0
21 kfree(addr->addr); in free_xprt_addr()
47 struct kobject *parent) in rpc_sysfs_object_alloc() argument
53 kobj->kset = kset; in rpc_sysfs_object_alloc()
55 parent, "%s", name) == 0) in rpc_sysfs_object_alloc()
67 struct rpc_clnt *ret = c->clnt; in rpc_sysfs_client_kobj_get_clnt()
69 return refcount_inc_not_zero(&ret->cl_count) ? ret : NULL; in rpc_sysfs_client_kobj_get_clnt()
78 return xprt_get(x->xprt); in rpc_sysfs_xprt_kobj_get_xprt()
87 return xprt_switch_get(x->xprt_switch); in rpc_sysfs_xprt_kobj_get_xprt_switch()
96 return xprt_switch_get(x->xprt_switch); in rpc_sysfs_xprt_switch_kobj_get_xprt()
109 ret = sprintf(buf, "%u", clnt->cl_vers); in rpc_sysfs_clnt_version_show()
110 refcount_dec(&clnt->cl_count); in rpc_sysfs_clnt_version_show()
124 ret = sprintf(buf, "%s", clnt->cl_program->name); in rpc_sysfs_clnt_program_show()
125 refcount_dec(&clnt->cl_count); in rpc_sysfs_clnt_program_show()
139 ret = sprintf(buf, "%u\n", clnt->cl_max_connect); in rpc_sysfs_clnt_max_connect_show()
140 refcount_dec(&clnt->cl_count); in rpc_sysfs_clnt_max_connect_show()
155 ret = sprintf(buf, "%s\n", xprt->address_strings[RPC_DISPLAY_ADDR]); in rpc_sysfs_xprt_dstaddr_show()
171 } else if (xprt->ops->get_srcaddr) { in rpc_sysfs_xprt_srcaddr_show()
172 ret = xprt->ops->get_srcaddr(xprt, buf, buflen); in rpc_sysfs_xprt_srcaddr_show()
174 if (ret < buflen - 1) { in rpc_sysfs_xprt_srcaddr_show()
189 [RPC_XPRTSEC_TLS_ANON] = "tls-anon",
190 [RPC_XPRTSEC_TLS_X509] = "tls-x509",
205 ret = sprintf(buf, "%s\n", xprtsec_strings[xprt->xprtsec.policy]); in rpc_sysfs_xprt_xprtsec_show()
225 if (xprt->ops->get_srcport) in rpc_sysfs_xprt_info_show()
226 srcport = xprt->ops->get_srcport(xprt); in rpc_sysfs_xprt_info_show()
234 xprt->last_used, xprt->cong, xprt->cwnd, xprt->max_reqs, in rpc_sysfs_xprt_info_show()
235 xprt->min_reqs, xprt->num_reqs, xprt->binding.qlen, in rpc_sysfs_xprt_info_show()
236 xprt->sending.qlen, xprt->pending.qlen, in rpc_sysfs_xprt_info_show()
237 xprt->backlog.qlen, xprt->main, srcport, in rpc_sysfs_xprt_info_show()
238 atomic_long_read(&xprt->queuelen), in rpc_sysfs_xprt_info_show()
239 xprt->address_strings[RPC_DISPLAY_PORT]); in rpc_sysfs_xprt_info_show()
251 int locked, connected, connecting, close_wait, bound, binding, in rpc_sysfs_xprt_state_show() local
254 if (!(xprt && xprt->state)) { in rpc_sysfs_xprt_state_show()
257 locked = test_bit(XPRT_LOCKED, &xprt->state); in rpc_sysfs_xprt_state_show()
258 connected = test_bit(XPRT_CONNECTED, &xprt->state); in rpc_sysfs_xprt_state_show()
259 connecting = test_bit(XPRT_CONNECTING, &xprt->state); in rpc_sysfs_xprt_state_show()
260 close_wait = test_bit(XPRT_CLOSE_WAIT, &xprt->state); in rpc_sysfs_xprt_state_show()
261 bound = test_bit(XPRT_BOUND, &xprt->state); in rpc_sysfs_xprt_state_show()
262 binding = test_bit(XPRT_BINDING, &xprt->state); in rpc_sysfs_xprt_state_show()
263 closing = test_bit(XPRT_CLOSING, &xprt->state); in rpc_sysfs_xprt_state_show()
264 congested = test_bit(XPRT_CONGESTED, &xprt->state); in rpc_sysfs_xprt_state_show()
265 cwnd_wait = test_bit(XPRT_CWND_WAIT, &xprt->state); in rpc_sysfs_xprt_state_show()
266 write_space = test_bit(XPRT_WRITE_SPACE, &xprt->state); in rpc_sysfs_xprt_state_show()
267 offline = test_bit(XPRT_OFFLINE, &xprt->state); in rpc_sysfs_xprt_state_show()
268 remove = test_bit(XPRT_REMOVE, &xprt->state); in rpc_sysfs_xprt_state_show()
271 locked ? "LOCKED" : "", in rpc_sysfs_xprt_state_show()
309 xprt_switch->xps_nxprts, xprt_switch->xps_nactive, in rpc_sysfs_xprt_switch_info_show()
310 xprt_switch->xps_nunique_destaddr_xprts, in rpc_sysfs_xprt_switch_info_show()
311 atomic_long_read(&xprt_switch->xps_queuelen)); in rpc_sysfs_xprt_switch_info_show()
339 xprt_create_args.ident = xprt->xprt_class->ident; in rpc_sysfs_xprt_switch_add_xprt_store()
340 xprt_create_args.net = xprt->xprt_net; in rpc_sysfs_xprt_switch_add_xprt_store()
341 xprt_create_args.dstaddr = (struct sockaddr *)&xprt->addr; in rpc_sysfs_xprt_switch_add_xprt_store()
342 xprt_create_args.addrlen = xprt->addrlen; in rpc_sysfs_xprt_switch_add_xprt_store()
343 xprt_create_args.servername = xprt->servername; in rpc_sysfs_xprt_switch_add_xprt_store()
344 xprt_create_args.bc_xprt = xprt->bc_xprt; in rpc_sysfs_xprt_switch_add_xprt_store()
345 xprt_create_args.xprtsec = xprt->xprtsec; in rpc_sysfs_xprt_switch_add_xprt_store()
346 xprt_create_args.connect_timeout = xprt->connect_timeout; in rpc_sysfs_xprt_switch_add_xprt_store()
347 xprt_create_args.reconnect_timeout = xprt->max_reconnect_timeout; in rpc_sysfs_xprt_switch_add_xprt_store()
378 if (!(xprt->xprt_class->ident == XPRT_TRANSPORT_TCP || in rpc_sysfs_xprt_dstaddr_store()
379 xprt->xprt_class->ident == XPRT_TRANSPORT_TCP_TLS || in rpc_sysfs_xprt_dstaddr_store()
380 xprt->xprt_class->ident == XPRT_TRANSPORT_RDMA)) { in rpc_sysfs_xprt_dstaddr_store()
382 return -EOPNOTSUPP; in rpc_sysfs_xprt_dstaddr_store()
385 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) { in rpc_sysfs_xprt_dstaddr_store()
386 count = -EINTR; in rpc_sysfs_xprt_dstaddr_store()
389 saddr = (struct sockaddr *)&xprt->addr; in rpc_sysfs_xprt_dstaddr_store()
403 saved_addr->addr = in rpc_sysfs_xprt_dstaddr_store()
404 rcu_dereference_raw(xprt->address_strings[RPC_DISPLAY_ADDR]); in rpc_sysfs_xprt_dstaddr_store()
405 rcu_assign_pointer(xprt->address_strings[RPC_DISPLAY_ADDR], dst_addr); in rpc_sysfs_xprt_dstaddr_store()
406 call_rcu(&saved_addr->rcu, free_xprt_addr); in rpc_sysfs_xprt_dstaddr_store()
407 xprt->addrlen = rpc_pton(xprt->xprt_net, buf, buf_len, saddr, in rpc_sysfs_xprt_dstaddr_store()
420 count = -ENOMEM; in rpc_sysfs_xprt_dstaddr_store()
444 count = -EINVAL; in rpc_sysfs_xprt_state_change()
448 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) { in rpc_sysfs_xprt_state_change()
449 count = -EINTR; in rpc_sysfs_xprt_state_change()
452 if (xprt->main) { in rpc_sysfs_xprt_state_change()
453 count = -EINVAL; in rpc_sysfs_xprt_state_change()
461 if (test_bit(XPRT_OFFLINE, &xprt->state)) in rpc_sysfs_xprt_state_change()
464 count = -EINVAL; in rpc_sysfs_xprt_state_change()
487 if (xprt->main) { in rpc_sysfs_xprt_del_xprt()
488 count = -EINVAL; in rpc_sysfs_xprt_del_xprt()
492 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) { in rpc_sysfs_xprt_del_xprt()
493 count = -EINTR; in rpc_sysfs_xprt_del_xprt()
513 return -ENOMEM; in rpc_sysfs_init()
515 rpc_sysfs_object_alloc("rpc-clients", rpc_sunrpc_kset, NULL); in rpc_sysfs_init()
519 rpc_sysfs_object_alloc("xprt-switches", rpc_sunrpc_kset, NULL); in rpc_sysfs_init()
529 return -ENOMEM; in rpc_sysfs_init()
558 return container_of(kobj, struct rpc_sysfs_client, kobject)->net; in rpc_sysfs_client_namespace()
563 return container_of(kobj, struct rpc_sysfs_xprt_switch, kobject)->net; in rpc_sysfs_xprt_switch_namespace()
569 kobject)->xprt->xprt_net; in rpc_sysfs_xprt_namespace()
660 static struct rpc_sysfs_client *rpc_sysfs_client_alloc(struct kobject *parent, in rpc_sysfs_client_alloc() argument
668 p->net = net; in rpc_sysfs_client_alloc()
669 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_client_alloc()
670 if (kobject_init_and_add(&p->kobject, &rpc_sysfs_client_type, in rpc_sysfs_client_alloc()
671 parent, "clnt-%d", clid) == 0) in rpc_sysfs_client_alloc()
673 kobject_put(&p->kobject); in rpc_sysfs_client_alloc()
679 rpc_sysfs_xprt_switch_alloc(struct kobject *parent, in rpc_sysfs_xprt_switch_alloc() argument
688 p->net = net; in rpc_sysfs_xprt_switch_alloc()
689 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_xprt_switch_alloc()
690 if (kobject_init_and_add(&p->kobject, in rpc_sysfs_xprt_switch_alloc()
692 parent, "switch-%d", in rpc_sysfs_xprt_switch_alloc()
693 xprt_switch->xps_id) == 0) in rpc_sysfs_xprt_switch_alloc()
695 kobject_put(&p->kobject); in rpc_sysfs_xprt_switch_alloc()
700 static struct rpc_sysfs_xprt *rpc_sysfs_xprt_alloc(struct kobject *parent, in rpc_sysfs_xprt_alloc() argument
709 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_xprt_alloc()
710 if (kobject_init_and_add(&p->kobject, &rpc_sysfs_xprt_type, in rpc_sysfs_xprt_alloc()
711 parent, "xprt-%d-%s", xprt->id, in rpc_sysfs_xprt_alloc()
712 xprt->address_strings[RPC_DISPLAY_PROTO]) == 0) in rpc_sysfs_xprt_alloc()
714 kobject_put(&p->kobject); in rpc_sysfs_xprt_alloc()
725 (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; in rpc_sysfs_client_setup()
731 net, clnt->cl_clid); in rpc_sysfs_client_setup()
736 clnt->cl_sysfs = rpc_client; in rpc_sysfs_client_setup()
737 rpc_client->clnt = clnt; in rpc_sysfs_client_setup()
738 rpc_client->xprt_switch = xprt_switch; in rpc_sysfs_client_setup()
739 kobject_uevent(&rpc_client->kobject, KOBJ_ADD); in rpc_sysfs_client_setup()
740 ret = sysfs_create_link_nowarn(&rpc_client->kobject, in rpc_sysfs_client_setup()
741 &xswitch->kobject, name); in rpc_sysfs_client_setup()
755 if (xprt_switch->xps_net) in rpc_sysfs_xprt_switch_setup()
756 net = xprt_switch->xps_net; in rpc_sysfs_xprt_switch_setup()
758 net = xprt->xprt_net; in rpc_sysfs_xprt_switch_setup()
763 xprt_switch->xps_sysfs = rpc_xprt_switch; in rpc_sysfs_xprt_switch_setup()
764 rpc_xprt_switch->xprt_switch = xprt_switch; in rpc_sysfs_xprt_switch_setup()
765 rpc_xprt_switch->xprt = xprt; in rpc_sysfs_xprt_switch_setup()
766 kobject_uevent(&rpc_xprt_switch->kobject, KOBJ_ADD); in rpc_sysfs_xprt_switch_setup()
768 xprt_switch->xps_sysfs = NULL; in rpc_sysfs_xprt_switch_setup()
778 (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; in rpc_sysfs_xprt_setup()
783 rpc_xprt = rpc_sysfs_xprt_alloc(&switch_obj->kobject, xprt, gfp_flags); in rpc_sysfs_xprt_setup()
785 xprt->xprt_sysfs = rpc_xprt; in rpc_sysfs_xprt_setup()
786 rpc_xprt->xprt = xprt; in rpc_sysfs_xprt_setup()
787 rpc_xprt->xprt_switch = xprt_switch; in rpc_sysfs_xprt_setup()
788 kobject_uevent(&rpc_xprt->kobject, KOBJ_ADD); in rpc_sysfs_xprt_setup()
794 struct rpc_sysfs_client *rpc_client = clnt->cl_sysfs; in rpc_sysfs_client_destroy()
799 sysfs_remove_link(&rpc_client->kobject, name); in rpc_sysfs_client_destroy()
800 kobject_uevent(&rpc_client->kobject, KOBJ_REMOVE); in rpc_sysfs_client_destroy()
801 kobject_del(&rpc_client->kobject); in rpc_sysfs_client_destroy()
802 kobject_put(&rpc_client->kobject); in rpc_sysfs_client_destroy()
803 clnt->cl_sysfs = NULL; in rpc_sysfs_client_destroy()
809 struct rpc_sysfs_xprt_switch *rpc_xprt_switch = xprt_switch->xps_sysfs; in rpc_sysfs_xprt_switch_destroy()
812 kobject_uevent(&rpc_xprt_switch->kobject, KOBJ_REMOVE); in rpc_sysfs_xprt_switch_destroy()
813 kobject_del(&rpc_xprt_switch->kobject); in rpc_sysfs_xprt_switch_destroy()
814 kobject_put(&rpc_xprt_switch->kobject); in rpc_sysfs_xprt_switch_destroy()
815 xprt_switch->xps_sysfs = NULL; in rpc_sysfs_xprt_switch_destroy()
821 struct rpc_sysfs_xprt *rpc_xprt = xprt->xprt_sysfs; in rpc_sysfs_xprt_destroy()
824 kobject_uevent(&rpc_xprt->kobject, KOBJ_REMOVE); in rpc_sysfs_xprt_destroy()
825 kobject_del(&rpc_xprt->kobject); in rpc_sysfs_xprt_destroy()
826 kobject_put(&rpc_xprt->kobject); in rpc_sysfs_xprt_destroy()
827 xprt->xprt_sysfs = NULL; in rpc_sysfs_xprt_destroy()