From: Chesnokov Gleb <Chesnokov.G@raidix.com>
To: Sagi Grimberg <sagi@grimberg.me>, Jason Gunthorpe <jgg@nvidia.com>
Cc: "lanevdenoche@gmail.com" <lanevdenoche@gmail.com>,
"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
"dledford@redhat.com" <dledford@redhat.com>
Subject: Re: [PATCH 1/1] iser-target: Fix handling of RDMA_CV_EVENT_ADDR_CHANGE
Date: Wed, 1 Sep 2021 11:43:34 +0000 [thread overview]
Message-ID: <c6827ac071364d488a3115d2cdcbff6e@raidix.com> (raw)
In-Reply-To: <b5b8b842-897d-5cad-1f32-a212c9e91737@grimberg.me>
> There are two handlers in question here, the listener cm_id and
> the connection cm_id. The connection cma_id should definitely trigger
> disconnect and resource cleanup. The question is should the listener
> cma_id (which maps to the isert network portal - np) recreate the
> cma_id in this event.
1) How connection cm_id and isert_conn are created:
[cma.c] - cma_ib_req_handler()
- * Create conn_id via cma_ib_new_conn_id(listen_id)
- * Calls isert_connect_request(conn_id)
[ib_isert.c] - - isert_connect_request(cma_id)
- - * isert_conn = kzalloc()
- - * isert_conn->cm_id = cma_id
2) Acceptance of the connection request starts after creating the listener cm_id:
[ib_isert.c] - isert_setup_id()
[ib_isert.c] - - rdma_listen()
[cma.c] - - - cma_ib_listen()
[cma.c] - - - - ib_cm_insert_listen(cma_ib_req_handler)
3) Processing RDMA_CM_EVENT_ADDR_CHANGE for connection cm_id:
[ib_isert.c] - rdma_disconnect(cm_id)
[ib_isert.c] - rdma_destroy_id(cm_id)
[ib_isert.c] - kfree(iser_conn)
4) Processing RDMA_CM_EVENT_ADDR_CHANGE for listener cm_id:
Since iser_conn has been freed, it needs to be recreated.
There are 2 options here:
a) listener cm_id needs to be recreated, it calls rdma_listen(),
which in turn initiates the acceptance of the connection request,
after which iser_conn will be created.
b) listener cm_id does not need to be recreated,
that is, RDMA_CM_EVENT_ADDR_CHANGE is informative for it.
I have tested my test case with the following patch that matches point b:
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index 636d590765f9578c0ff595cdf74b79400bfa66ed..54f615828961576ffa1f74c8b9781a5cf48512a3 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -601,6 +601,8 @@ static int
isert_np_cma_handler(struct isert_np *isert_np,
enum rdma_cm_event_type event)
{
+ int ret = -1;
+
isert_dbg("%s (%d): isert np %p\n",
rdma_event_msg(event), event, isert_np);
@@ -609,19 +611,14 @@ isert_np_cma_handler(struct isert_np *isert_np,
isert_np->cm_id = NULL;
break;
case RDMA_CM_EVENT_ADDR_CHANGE:
- isert_np->cm_id = isert_setup_id(isert_np);
- if (IS_ERR(isert_np->cm_id)) {
- isert_err("isert np %p setup id failed: %ld\n",
- isert_np, PTR_ERR(isert_np->cm_id));
- isert_np->cm_id = NULL;
- }
+ ret = 0;
break;
default:
isert_err("isert np %p Unexpected event %d\n",
isert_np, event);
}
- return -1;
+ return ret;
}
static int
As a result, the listener cm_id remained, the connection request did not come, isert_conn was not recreated.
On the initiator, the load dropped to 0 and then ended.
With my patch that matches point a, the listener cm_id was recreated -> connection request was received -> isert_conn was created.
Based on the above, I can conclude that the RDMA_CM_EVENT_ADDR_CHANGE event is not informative for the listener cm_id.
Best regards,
Chesnokov Gleb
next prev parent reply other threads:[~2021-09-01 11:49 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-14 18:26 [PATCH 1/1] iser-target: Fix handling of RDMA_CV_EVENT_ADDR_CHANGE lanevdenoche
2021-07-18 8:50 ` Leon Romanovsky
[not found] ` <9e97e113abb64952a22430462310ca83@raidix.com>
2021-07-19 6:40 ` Leon Romanovsky
2021-07-19 12:13 ` Jason Gunthorpe
2021-07-19 16:07 ` Chesnokov Gleb
2021-07-19 17:09 ` Jason Gunthorpe
2021-07-19 18:27 ` Sagi Grimberg
2021-07-19 18:29 ` Sagi Grimberg
2021-07-19 20:47 ` Chesnokov Gleb
2021-07-22 14:23 ` Jason Gunthorpe
2021-07-22 19:54 ` Sagi Grimberg
2021-07-27 17:37 ` Jason Gunthorpe
2021-08-06 20:14 ` Sagi Grimberg
2021-08-17 8:30 ` Chesnokov Gleb
2021-08-17 21:27 ` Sagi Grimberg
2021-09-01 11:43 ` Chesnokov Gleb [this message]
2021-09-01 11:56 ` Jason Gunthorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c6827ac071364d488a3115d2cdcbff6e@raidix.com \
--to=chesnokov.g@raidix.com \
--cc=dledford@redhat.com \
--cc=jgg@nvidia.com \
--cc=lanevdenoche@gmail.com \
--cc=linux-rdma@vger.kernel.org \
--cc=sagi@grimberg.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.