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()
68 return xprt_get(x->xprt); in rpc_sysfs_xprt_kobj_get_xprt()
77 return xprt_switch_get(x->xprt_switch); in rpc_sysfs_xprt_kobj_get_xprt_switch()
86 return xprt_switch_get(x->xprt_switch); in rpc_sysfs_xprt_switch_kobj_get_xprt()
98 ret = sprintf(buf, "%s\n", xprt->address_strings[RPC_DISPLAY_ADDR]); in rpc_sysfs_xprt_dstaddr_show()
110 ssize_t ret = -1; in rpc_sysfs_xprt_srcaddr_show()
116 if (kernel_getsockname(sock->sock, (struct sockaddr *)&saddr) < 0) in rpc_sysfs_xprt_srcaddr_show()
140 xprt->last_used, xprt->cong, xprt->cwnd, xprt->max_reqs, in rpc_sysfs_xprt_info_show()
141 xprt->min_reqs, xprt->num_reqs, xprt->binding.qlen, in rpc_sysfs_xprt_info_show()
142 xprt->sending.qlen, xprt->pending.qlen, in rpc_sysfs_xprt_info_show()
143 xprt->backlog.qlen, xprt->main, in rpc_sysfs_xprt_info_show()
144 (xprt->xprt_class->ident == XPRT_TRANSPORT_TCP) ? in rpc_sysfs_xprt_info_show()
146 atomic_long_read(&xprt->queuelen), in rpc_sysfs_xprt_info_show()
147 (xprt->xprt_class->ident == XPRT_TRANSPORT_TCP) ? in rpc_sysfs_xprt_info_show()
148 xprt->address_strings[RPC_DISPLAY_PORT] : "0"); in rpc_sysfs_xprt_info_show()
159 int locked, connected, connecting, close_wait, bound, binding, in rpc_sysfs_xprt_state_show() local
165 if (!xprt->state) { in rpc_sysfs_xprt_state_show()
168 locked = test_bit(XPRT_LOCKED, &xprt->state); in rpc_sysfs_xprt_state_show()
169 connected = test_bit(XPRT_CONNECTED, &xprt->state); in rpc_sysfs_xprt_state_show()
170 connecting = test_bit(XPRT_CONNECTING, &xprt->state); in rpc_sysfs_xprt_state_show()
171 close_wait = test_bit(XPRT_CLOSE_WAIT, &xprt->state); in rpc_sysfs_xprt_state_show()
172 bound = test_bit(XPRT_BOUND, &xprt->state); in rpc_sysfs_xprt_state_show()
173 binding = test_bit(XPRT_BINDING, &xprt->state); in rpc_sysfs_xprt_state_show()
174 closing = test_bit(XPRT_CLOSING, &xprt->state); in rpc_sysfs_xprt_state_show()
175 congested = test_bit(XPRT_CONGESTED, &xprt->state); in rpc_sysfs_xprt_state_show()
176 cwnd_wait = test_bit(XPRT_CWND_WAIT, &xprt->state); in rpc_sysfs_xprt_state_show()
177 write_space = test_bit(XPRT_WRITE_SPACE, &xprt->state); in rpc_sysfs_xprt_state_show()
178 offline = test_bit(XPRT_OFFLINE, &xprt->state); in rpc_sysfs_xprt_state_show()
179 remove = test_bit(XPRT_REMOVE, &xprt->state); in rpc_sysfs_xprt_state_show()
182 locked ? "LOCKED" : "", in rpc_sysfs_xprt_state_show()
212 xprt_switch->xps_nxprts, xprt_switch->xps_nactive, in rpc_sysfs_xprt_switch_info_show()
213 xprt_switch->xps_nunique_destaddr_xprts, in rpc_sysfs_xprt_switch_info_show()
214 atomic_long_read(&xprt_switch->xps_queuelen)); in rpc_sysfs_xprt_switch_info_show()
232 if (!(xprt->xprt_class->ident == XPRT_TRANSPORT_TCP || in rpc_sysfs_xprt_dstaddr_store()
233 xprt->xprt_class->ident == XPRT_TRANSPORT_RDMA)) { in rpc_sysfs_xprt_dstaddr_store()
235 return -EOPNOTSUPP; in rpc_sysfs_xprt_dstaddr_store()
238 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) { in rpc_sysfs_xprt_dstaddr_store()
239 count = -EINTR; in rpc_sysfs_xprt_dstaddr_store()
242 saddr = (struct sockaddr *)&xprt->addr; in rpc_sysfs_xprt_dstaddr_store()
256 saved_addr->addr = in rpc_sysfs_xprt_dstaddr_store()
257 rcu_dereference_raw(xprt->address_strings[RPC_DISPLAY_ADDR]); in rpc_sysfs_xprt_dstaddr_store()
258 rcu_assign_pointer(xprt->address_strings[RPC_DISPLAY_ADDR], dst_addr); in rpc_sysfs_xprt_dstaddr_store()
259 call_rcu(&saved_addr->rcu, free_xprt_addr); in rpc_sysfs_xprt_dstaddr_store()
260 xprt->addrlen = rpc_pton(xprt->xprt_net, buf, buf_len, saddr, in rpc_sysfs_xprt_dstaddr_store()
273 count = -ENOMEM; in rpc_sysfs_xprt_dstaddr_store()
295 return -EINVAL; in rpc_sysfs_xprt_state_change()
297 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) { in rpc_sysfs_xprt_state_change()
298 count = -EINTR; in rpc_sysfs_xprt_state_change()
301 if (xprt->main) { in rpc_sysfs_xprt_state_change()
302 count = -EINVAL; in rpc_sysfs_xprt_state_change()
306 set_bit(XPRT_OFFLINE, &xprt->state); in rpc_sysfs_xprt_state_change()
307 spin_lock(&xps->xps_lock); in rpc_sysfs_xprt_state_change()
308 xps->xps_nactive--; in rpc_sysfs_xprt_state_change()
309 spin_unlock(&xps->xps_lock); in rpc_sysfs_xprt_state_change()
311 clear_bit(XPRT_OFFLINE, &xprt->state); in rpc_sysfs_xprt_state_change()
312 spin_lock(&xps->xps_lock); in rpc_sysfs_xprt_state_change()
313 xps->xps_nactive++; in rpc_sysfs_xprt_state_change()
314 spin_unlock(&xps->xps_lock); in rpc_sysfs_xprt_state_change()
316 if (test_bit(XPRT_OFFLINE, &xprt->state)) { in rpc_sysfs_xprt_state_change()
317 set_bit(XPRT_REMOVE, &xprt->state); in rpc_sysfs_xprt_state_change()
319 if (test_bit(XPRT_CONNECTED, &xprt->state)) { in rpc_sysfs_xprt_state_change()
320 if (!xprt->sending.qlen && in rpc_sysfs_xprt_state_change()
321 !xprt->pending.qlen && in rpc_sysfs_xprt_state_change()
322 !xprt->backlog.qlen && in rpc_sysfs_xprt_state_change()
323 !atomic_long_read(&xprt->queuelen)) in rpc_sysfs_xprt_state_change()
327 count = -EINVAL; in rpc_sysfs_xprt_state_change()
343 return -ENOMEM; in rpc_sysfs_init()
345 rpc_sysfs_object_alloc("rpc-clients", rpc_sunrpc_kset, NULL); in rpc_sysfs_init()
349 rpc_sysfs_object_alloc("xprt-switches", rpc_sunrpc_kset, NULL); in rpc_sysfs_init()
359 return -ENOMEM; in rpc_sysfs_init()
388 return container_of(kobj, struct rpc_sysfs_client, kobject)->net; in rpc_sysfs_client_namespace()
393 return container_of(kobj, struct rpc_sysfs_xprt_switch, kobject)->net; in rpc_sysfs_xprt_switch_namespace()
399 kobject)->xprt->xprt_net; in rpc_sysfs_xprt_namespace()
457 static struct rpc_sysfs_client *rpc_sysfs_client_alloc(struct kobject *parent, in rpc_sysfs_client_alloc() argument
465 p->net = net; in rpc_sysfs_client_alloc()
466 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_client_alloc()
467 if (kobject_init_and_add(&p->kobject, &rpc_sysfs_client_type, in rpc_sysfs_client_alloc()
468 parent, "clnt-%d", clid) == 0) in rpc_sysfs_client_alloc()
470 kobject_put(&p->kobject); in rpc_sysfs_client_alloc()
476 rpc_sysfs_xprt_switch_alloc(struct kobject *parent, in rpc_sysfs_xprt_switch_alloc() argument
485 p->net = net; in rpc_sysfs_xprt_switch_alloc()
486 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_xprt_switch_alloc()
487 if (kobject_init_and_add(&p->kobject, in rpc_sysfs_xprt_switch_alloc()
489 parent, "switch-%d", in rpc_sysfs_xprt_switch_alloc()
490 xprt_switch->xps_id) == 0) in rpc_sysfs_xprt_switch_alloc()
492 kobject_put(&p->kobject); in rpc_sysfs_xprt_switch_alloc()
497 static struct rpc_sysfs_xprt *rpc_sysfs_xprt_alloc(struct kobject *parent, in rpc_sysfs_xprt_alloc() argument
506 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_xprt_alloc()
507 if (kobject_init_and_add(&p->kobject, &rpc_sysfs_xprt_type, in rpc_sysfs_xprt_alloc()
508 parent, "xprt-%d-%s", xprt->id, in rpc_sysfs_xprt_alloc()
509 xprt->address_strings[RPC_DISPLAY_PROTO]) == 0) in rpc_sysfs_xprt_alloc()
511 kobject_put(&p->kobject); in rpc_sysfs_xprt_alloc()
523 net, clnt->cl_clid); in rpc_sysfs_client_setup()
527 (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; in rpc_sysfs_client_setup()
530 clnt->cl_sysfs = rpc_client; in rpc_sysfs_client_setup()
531 rpc_client->clnt = clnt; in rpc_sysfs_client_setup()
532 rpc_client->xprt_switch = xprt_switch; in rpc_sysfs_client_setup()
533 kobject_uevent(&rpc_client->kobject, KOBJ_ADD); in rpc_sysfs_client_setup()
534 ret = sysfs_create_link_nowarn(&rpc_client->kobject, in rpc_sysfs_client_setup()
535 &xswitch->kobject, name); in rpc_sysfs_client_setup()
549 if (xprt_switch->xps_net) in rpc_sysfs_xprt_switch_setup()
550 net = xprt_switch->xps_net; in rpc_sysfs_xprt_switch_setup()
552 net = xprt->xprt_net; in rpc_sysfs_xprt_switch_setup()
557 xprt_switch->xps_sysfs = rpc_xprt_switch; in rpc_sysfs_xprt_switch_setup()
558 rpc_xprt_switch->xprt_switch = xprt_switch; in rpc_sysfs_xprt_switch_setup()
559 rpc_xprt_switch->xprt = xprt; in rpc_sysfs_xprt_switch_setup()
560 kobject_uevent(&rpc_xprt_switch->kobject, KOBJ_ADD); in rpc_sysfs_xprt_switch_setup()
570 (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; in rpc_sysfs_xprt_setup()
572 rpc_xprt = rpc_sysfs_xprt_alloc(&switch_obj->kobject, xprt, gfp_flags); in rpc_sysfs_xprt_setup()
574 xprt->xprt_sysfs = rpc_xprt; in rpc_sysfs_xprt_setup()
575 rpc_xprt->xprt = xprt; in rpc_sysfs_xprt_setup()
576 rpc_xprt->xprt_switch = xprt_switch; in rpc_sysfs_xprt_setup()
577 kobject_uevent(&rpc_xprt->kobject, KOBJ_ADD); in rpc_sysfs_xprt_setup()
583 struct rpc_sysfs_client *rpc_client = clnt->cl_sysfs; in rpc_sysfs_client_destroy()
588 sysfs_remove_link(&rpc_client->kobject, name); in rpc_sysfs_client_destroy()
589 kobject_uevent(&rpc_client->kobject, KOBJ_REMOVE); in rpc_sysfs_client_destroy()
590 kobject_del(&rpc_client->kobject); in rpc_sysfs_client_destroy()
591 kobject_put(&rpc_client->kobject); in rpc_sysfs_client_destroy()
592 clnt->cl_sysfs = NULL; in rpc_sysfs_client_destroy()
598 struct rpc_sysfs_xprt_switch *rpc_xprt_switch = xprt_switch->xps_sysfs; in rpc_sysfs_xprt_switch_destroy()
601 kobject_uevent(&rpc_xprt_switch->kobject, KOBJ_REMOVE); in rpc_sysfs_xprt_switch_destroy()
602 kobject_del(&rpc_xprt_switch->kobject); in rpc_sysfs_xprt_switch_destroy()
603 kobject_put(&rpc_xprt_switch->kobject); in rpc_sysfs_xprt_switch_destroy()
604 xprt_switch->xps_sysfs = NULL; in rpc_sysfs_xprt_switch_destroy()
610 struct rpc_sysfs_xprt *rpc_xprt = xprt->xprt_sysfs; in rpc_sysfs_xprt_destroy()
613 kobject_uevent(&rpc_xprt->kobject, KOBJ_REMOVE); in rpc_sysfs_xprt_destroy()
614 kobject_del(&rpc_xprt->kobject); in rpc_sysfs_xprt_destroy()
615 kobject_put(&rpc_xprt->kobject); in rpc_sysfs_xprt_destroy()
616 xprt->xprt_sysfs = NULL; in rpc_sysfs_xprt_destroy()