[PATCH for-next 02/10] RDMA/rtrs-srv: Prevent sysfs error with path name "ctl"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Gioh Kim <gi-oh.kim@xxxxxxxxx>

If the client tries to create a path with name "ctl",
the server tries to creates /sys/devices/virtual/rtrs-server/ctl/.
Then server generated below error because there is already ctl directory
which manages some setup of the server.

sysfs: cannot create duplicate filename '/devices/virtual/rtrs-server/ctl'
Workqueue: ib-comp-wq ib_cq_poll_work [ib_core]
Call Trace:
dump_stack+0x50/0x63
sysfs_warn_dup.cold+0x17/0x24
sysfs_create_dir_ns+0xb6/0xd0
kobject_add_internal+0xa6/0x2a0
kobject_add+0x7e/0xb0
? _cond_resched+0x15/0x30
device_add+0x121/0x640
rtrs_srv_create_sess_files+0x18f/0x1f0 [rtrs_server]
? __alloc_pages_nodemask+0x16c/0x2b0
? kmalloc_order+0x7c/0x90
? kmalloc_order_trace+0x1d/0xa0
? rtrs_iu_alloc+0x17e/0x1bf [rtrs_core]
rtrs_srv_info_req_done+0x417/0x5b0 [rtrs_server]
? __switch_to_asm+0x40/0x70
__ib_process_cq+0x76/0xd0 [ib_core]
ib_cq_poll_work+0x26/0x80 [ib_core]
process_one_work+0x1df/0x3a0
worker_thread+0x4a/0x3c0
kthread+0xfb/0x130
? process_one_work+0x3a0/0x3a0
? kthread_park+0x90/0x90
ret_from_fork+0x1f/0x40
kobject_add_internal failed for ctl with -EEXIST, don't try to register things with the same name in the same directory.
rtrs_server L178: device_add(): -17

This patch checks the path name and disconnect on server to prevent
the kernel error.

Signed-off-by: Gioh Kim <gi-oh.kim@xxxxxxxxx>
Signed-off-by: Jack Wang <jinpu.wang@xxxxxxxxx>
---
 drivers/infiniband/ulp/rtrs/rtrs-srv.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/infiniband/ulp/rtrs/rtrs-srv.c b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
index cd9a4ccf4c28..b814a6052cf1 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs-srv.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
@@ -758,6 +758,14 @@ static bool exist_sessname(struct rtrs_srv_ctx *ctx,
 	struct rtrs_srv_sess *sess;
 	bool found = false;
 
+	/*
+	 * Session name "ct" is not allowed because
+	 * /sys/devices/virtual/rtrs-server/ctl already exists
+	 * for setup management.
+	 */
+	if (!strcmp(sessname, "ctl"))
+		return true;
+
 	mutex_lock(&ctx->srv_mutex);
 	list_for_each_entry(srv, &ctx->srv_list, ctx_list) {
 		mutex_lock(&srv->paths_mutex);
-- 
2.25.1




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux