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()
100 ret = sprintf(buf, "%s\n", xprt->address_strings[RPC_DISPLAY_ADDR]); in rpc_sysfs_xprt_dstaddr_show()
116 } else if (xprt->ops->get_srcaddr) { in rpc_sysfs_xprt_srcaddr_show()
117 ret = xprt->ops->get_srcaddr(xprt, buf, buflen); in rpc_sysfs_xprt_srcaddr_show()
119 if (ret < buflen - 1) { in rpc_sysfs_xprt_srcaddr_show()
145 if (xprt->ops->get_srcport) in rpc_sysfs_xprt_info_show()
146 srcport = xprt->ops->get_srcport(xprt); in rpc_sysfs_xprt_info_show()
154 xprt->last_used, xprt->cong, xprt->cwnd, xprt->max_reqs, in rpc_sysfs_xprt_info_show()
155 xprt->min_reqs, xprt->num_reqs, xprt->binding.qlen, in rpc_sysfs_xprt_info_show()
156 xprt->sending.qlen, xprt->pending.qlen, in rpc_sysfs_xprt_info_show()
157 xprt->backlog.qlen, xprt->main, srcport, in rpc_sysfs_xprt_info_show()
158 atomic_long_read(&xprt->queuelen), in rpc_sysfs_xprt_info_show()
159 xprt->address_strings[RPC_DISPLAY_PORT]); in rpc_sysfs_xprt_info_show()
171 int locked, connected, connecting, close_wait, bound, binding, in rpc_sysfs_xprt_state_show() local
174 if (!(xprt && xprt->state)) { in rpc_sysfs_xprt_state_show()
177 locked = test_bit(XPRT_LOCKED, &xprt->state); in rpc_sysfs_xprt_state_show()
178 connected = test_bit(XPRT_CONNECTED, &xprt->state); in rpc_sysfs_xprt_state_show()
179 connecting = test_bit(XPRT_CONNECTING, &xprt->state); in rpc_sysfs_xprt_state_show()
180 close_wait = test_bit(XPRT_CLOSE_WAIT, &xprt->state); in rpc_sysfs_xprt_state_show()
181 bound = test_bit(XPRT_BOUND, &xprt->state); in rpc_sysfs_xprt_state_show()
182 binding = test_bit(XPRT_BINDING, &xprt->state); in rpc_sysfs_xprt_state_show()
183 closing = test_bit(XPRT_CLOSING, &xprt->state); in rpc_sysfs_xprt_state_show()
184 congested = test_bit(XPRT_CONGESTED, &xprt->state); in rpc_sysfs_xprt_state_show()
185 cwnd_wait = test_bit(XPRT_CWND_WAIT, &xprt->state); in rpc_sysfs_xprt_state_show()
186 write_space = test_bit(XPRT_WRITE_SPACE, &xprt->state); in rpc_sysfs_xprt_state_show()
187 offline = test_bit(XPRT_OFFLINE, &xprt->state); in rpc_sysfs_xprt_state_show()
188 remove = test_bit(XPRT_REMOVE, &xprt->state); in rpc_sysfs_xprt_state_show()
191 locked ? "LOCKED" : "", in rpc_sysfs_xprt_state_show()
221 xprt_switch->xps_nxprts, xprt_switch->xps_nactive, in rpc_sysfs_xprt_switch_info_show()
222 xprt_switch->xps_nunique_destaddr_xprts, in rpc_sysfs_xprt_switch_info_show()
223 atomic_long_read(&xprt_switch->xps_queuelen)); in rpc_sysfs_xprt_switch_info_show()
241 if (!(xprt->xprt_class->ident == XPRT_TRANSPORT_TCP || in rpc_sysfs_xprt_dstaddr_store()
242 xprt->xprt_class->ident == XPRT_TRANSPORT_TCP_TLS || in rpc_sysfs_xprt_dstaddr_store()
243 xprt->xprt_class->ident == XPRT_TRANSPORT_RDMA)) { in rpc_sysfs_xprt_dstaddr_store()
245 return -EOPNOTSUPP; in rpc_sysfs_xprt_dstaddr_store()
248 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) { in rpc_sysfs_xprt_dstaddr_store()
249 count = -EINTR; in rpc_sysfs_xprt_dstaddr_store()
252 saddr = (struct sockaddr *)&xprt->addr; in rpc_sysfs_xprt_dstaddr_store()
266 saved_addr->addr = in rpc_sysfs_xprt_dstaddr_store()
267 rcu_dereference_raw(xprt->address_strings[RPC_DISPLAY_ADDR]); in rpc_sysfs_xprt_dstaddr_store()
268 rcu_assign_pointer(xprt->address_strings[RPC_DISPLAY_ADDR], dst_addr); in rpc_sysfs_xprt_dstaddr_store()
269 call_rcu(&saved_addr->rcu, free_xprt_addr); in rpc_sysfs_xprt_dstaddr_store()
270 xprt->addrlen = rpc_pton(xprt->xprt_net, buf, buf_len, saddr, in rpc_sysfs_xprt_dstaddr_store()
283 count = -ENOMEM; in rpc_sysfs_xprt_dstaddr_store()
307 count = -EINVAL; in rpc_sysfs_xprt_state_change()
311 if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) { in rpc_sysfs_xprt_state_change()
312 count = -EINTR; in rpc_sysfs_xprt_state_change()
315 if (xprt->main) { in rpc_sysfs_xprt_state_change()
316 count = -EINVAL; in rpc_sysfs_xprt_state_change()
324 if (test_bit(XPRT_OFFLINE, &xprt->state)) in rpc_sysfs_xprt_state_change()
327 count = -EINVAL; in rpc_sysfs_xprt_state_change()
342 return -ENOMEM; in rpc_sysfs_init()
344 rpc_sysfs_object_alloc("rpc-clients", rpc_sunrpc_kset, NULL); in rpc_sysfs_init()
348 rpc_sysfs_object_alloc("xprt-switches", rpc_sunrpc_kset, NULL); in rpc_sysfs_init()
358 return -ENOMEM; in rpc_sysfs_init()
387 return container_of(kobj, struct rpc_sysfs_client, kobject)->net; in rpc_sysfs_client_namespace()
392 return container_of(kobj, struct rpc_sysfs_xprt_switch, kobject)->net; in rpc_sysfs_xprt_switch_namespace()
398 kobject)->xprt->xprt_net; in rpc_sysfs_xprt_namespace()
458 static struct rpc_sysfs_client *rpc_sysfs_client_alloc(struct kobject *parent, in rpc_sysfs_client_alloc() argument
466 p->net = net; in rpc_sysfs_client_alloc()
467 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_client_alloc()
468 if (kobject_init_and_add(&p->kobject, &rpc_sysfs_client_type, in rpc_sysfs_client_alloc()
469 parent, "clnt-%d", clid) == 0) in rpc_sysfs_client_alloc()
471 kobject_put(&p->kobject); in rpc_sysfs_client_alloc()
477 rpc_sysfs_xprt_switch_alloc(struct kobject *parent, in rpc_sysfs_xprt_switch_alloc() argument
486 p->net = net; in rpc_sysfs_xprt_switch_alloc()
487 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_xprt_switch_alloc()
488 if (kobject_init_and_add(&p->kobject, in rpc_sysfs_xprt_switch_alloc()
490 parent, "switch-%d", in rpc_sysfs_xprt_switch_alloc()
491 xprt_switch->xps_id) == 0) in rpc_sysfs_xprt_switch_alloc()
493 kobject_put(&p->kobject); in rpc_sysfs_xprt_switch_alloc()
498 static struct rpc_sysfs_xprt *rpc_sysfs_xprt_alloc(struct kobject *parent, in rpc_sysfs_xprt_alloc() argument
507 p->kobject.kset = rpc_sunrpc_kset; in rpc_sysfs_xprt_alloc()
508 if (kobject_init_and_add(&p->kobject, &rpc_sysfs_xprt_type, in rpc_sysfs_xprt_alloc()
509 parent, "xprt-%d-%s", xprt->id, in rpc_sysfs_xprt_alloc()
510 xprt->address_strings[RPC_DISPLAY_PROTO]) == 0) in rpc_sysfs_xprt_alloc()
512 kobject_put(&p->kobject); in rpc_sysfs_xprt_alloc()
523 (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; in rpc_sysfs_client_setup()
529 net, clnt->cl_clid); in rpc_sysfs_client_setup()
534 clnt->cl_sysfs = rpc_client; in rpc_sysfs_client_setup()
535 rpc_client->clnt = clnt; in rpc_sysfs_client_setup()
536 rpc_client->xprt_switch = xprt_switch; in rpc_sysfs_client_setup()
537 kobject_uevent(&rpc_client->kobject, KOBJ_ADD); in rpc_sysfs_client_setup()
538 ret = sysfs_create_link_nowarn(&rpc_client->kobject, in rpc_sysfs_client_setup()
539 &xswitch->kobject, name); in rpc_sysfs_client_setup()
553 if (xprt_switch->xps_net) in rpc_sysfs_xprt_switch_setup()
554 net = xprt_switch->xps_net; in rpc_sysfs_xprt_switch_setup()
556 net = xprt->xprt_net; in rpc_sysfs_xprt_switch_setup()
561 xprt_switch->xps_sysfs = rpc_xprt_switch; in rpc_sysfs_xprt_switch_setup()
562 rpc_xprt_switch->xprt_switch = xprt_switch; in rpc_sysfs_xprt_switch_setup()
563 rpc_xprt_switch->xprt = xprt; in rpc_sysfs_xprt_switch_setup()
564 kobject_uevent(&rpc_xprt_switch->kobject, KOBJ_ADD); in rpc_sysfs_xprt_switch_setup()
566 xprt_switch->xps_sysfs = NULL; in rpc_sysfs_xprt_switch_setup()
576 (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; in rpc_sysfs_xprt_setup()
581 rpc_xprt = rpc_sysfs_xprt_alloc(&switch_obj->kobject, xprt, gfp_flags); in rpc_sysfs_xprt_setup()
583 xprt->xprt_sysfs = rpc_xprt; in rpc_sysfs_xprt_setup()
584 rpc_xprt->xprt = xprt; in rpc_sysfs_xprt_setup()
585 rpc_xprt->xprt_switch = xprt_switch; in rpc_sysfs_xprt_setup()
586 kobject_uevent(&rpc_xprt->kobject, KOBJ_ADD); in rpc_sysfs_xprt_setup()
592 struct rpc_sysfs_client *rpc_client = clnt->cl_sysfs; in rpc_sysfs_client_destroy()
597 sysfs_remove_link(&rpc_client->kobject, name); in rpc_sysfs_client_destroy()
598 kobject_uevent(&rpc_client->kobject, KOBJ_REMOVE); in rpc_sysfs_client_destroy()
599 kobject_del(&rpc_client->kobject); in rpc_sysfs_client_destroy()
600 kobject_put(&rpc_client->kobject); in rpc_sysfs_client_destroy()
601 clnt->cl_sysfs = NULL; in rpc_sysfs_client_destroy()
607 struct rpc_sysfs_xprt_switch *rpc_xprt_switch = xprt_switch->xps_sysfs; in rpc_sysfs_xprt_switch_destroy()
610 kobject_uevent(&rpc_xprt_switch->kobject, KOBJ_REMOVE); in rpc_sysfs_xprt_switch_destroy()
611 kobject_del(&rpc_xprt_switch->kobject); in rpc_sysfs_xprt_switch_destroy()
612 kobject_put(&rpc_xprt_switch->kobject); in rpc_sysfs_xprt_switch_destroy()
613 xprt_switch->xps_sysfs = NULL; in rpc_sysfs_xprt_switch_destroy()
619 struct rpc_sysfs_xprt *rpc_xprt = xprt->xprt_sysfs; in rpc_sysfs_xprt_destroy()
622 kobject_uevent(&rpc_xprt->kobject, KOBJ_REMOVE); in rpc_sysfs_xprt_destroy()
623 kobject_del(&rpc_xprt->kobject); in rpc_sysfs_xprt_destroy()
624 kobject_put(&rpc_xprt->kobject); in rpc_sysfs_xprt_destroy()
625 xprt->xprt_sysfs = NULL; in rpc_sysfs_xprt_destroy()