All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gioh Kim <gi-oh.kim@ionos.com>
To: linux-rdma@vger.kernel.org
Cc: bvanassche@acm.org, leon@kernel.org, dledford@redhat.com,
	jgg@ziepe.ca, haris.iqbal@ionos.com, jinpu.wang@ionos.com,
	Md Haris Iqbal <haris.iqbal@cloud.ionos.com>,
	Gioh Kim <gi-oh.kim@ionos.com>
Subject: [PATCH for-next 13/20] RDMA/rtrs-clt: Check state of the rtrs_clt_sess before reading its stats
Date: Mon,  3 May 2021 13:48:11 +0200	[thread overview]
Message-ID: <20210503114818.288896-14-gi-oh.kim@ionos.com> (raw)
In-Reply-To: <20210503114818.288896-1-gi-oh.kim@ionos.com>

From: Md Haris Iqbal <haris.iqbal@cloud.ionos.com>

When get_next_path_min_inflight is called to select the next path, it
iterates over the list of available rtrs_clt_sess (paths). It then reads
the number of inflight IOs for that path to select one which has the least
inflight IO.

But it may so happen that rtrs_clt_sess (path) is no longer in the
connected state because closing or error recovery paths can change
the status of the rtrs_clt_Sess.

For example, the client sent the heart-beat and did not get the
response, it would change the session status and stop IO processing.
The added checking of this patch can prevent accessing the broken path
and generating duplicated error messages.

It is ok if the status is changed after checking the status because
the error recovery path does not free memory and only tries to
reconnection. And also it is ok if the session is closed after checking
the status because closing the session changes the session status and
flush all IO beforing free memory. If the session is being accessed for
IO processing, the closing session will wait.

Fixes: 6a98d71daea18 ("RDMA/rtrs: client: main functionality")
Signed-off-by: Md Haris Iqbal <haris.iqbal@ionos.com>
Reviewed-by: Gioh Kim <gi-oh.kim@ionos.com>
Signed-off-by: Gioh Kim <gi-oh.kim@ionos.com>
---
 drivers/infiniband/ulp/rtrs/rtrs-clt.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
index a57b77998573..c8a7807793bf 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
@@ -813,6 +813,9 @@ static struct rtrs_clt_sess *get_next_path_min_inflight(struct path_it *it)
 	int inflight;
 
 	list_for_each_entry_rcu(sess, &clt->paths_list, s.entry) {
+		if (unlikely(READ_ONCE(sess->state) != RTRS_CLT_CONNECTED))
+			continue;
+
 		if (unlikely(!list_empty(raw_cpu_ptr(sess->mp_skip_entry))))
 			continue;
 
-- 
2.25.1


  parent reply	other threads:[~2021-05-03 11:48 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-03 11:47 [PATCH for-next 00/20] Misc update for rtrs Gioh Kim
2021-05-03 11:47 ` [PATCH for-next 01/20] RDMA/rtrs-srv: Kill reject_w_econnreset label Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 02/20] RDMA/rtrs-clt: Remove MAX_SESS_QUEUE_DEPTH from rtrs_send_sess_info Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 03/20] RDMA/rtrs-clt: No need to check queue_depth when receiving Gioh Kim
2021-05-09 11:24   ` Leon Romanovsky
2021-05-10 11:00     ` Haris Iqbal
2021-05-10 11:53       ` Leon Romanovsky
2021-05-10 12:06         ` Haris Iqbal
2021-05-10 12:17           ` Leon Romanovsky
2021-05-10 12:26             ` Haris Iqbal
2021-05-03 11:48 ` [PATCH for-next 04/20] RDMA/rtrs-srv: Add error messages for cases when failing RDMA connection Gioh Kim
2021-05-09 11:27   ` Leon Romanovsky
2021-05-10 10:55     ` Haris Iqbal
2021-05-10 12:03       ` Leon Romanovsky
2021-05-10 12:16         ` Haris Iqbal
2021-05-10 12:19           ` Leon Romanovsky
2021-05-03 11:48 ` [PATCH for-next 05/20] RDMA/rtrs-srv: Clean up the code in __rtrs_srv_change_state Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 06/20] RDMA/rtrs: Change MAX_SESS_QUEUE_DEPTH Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 07/20] RDMA/rtrs: Define MIN_CHUNK_SIZE Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 08/20] RDMA/rtrs: Use strscpy instead of strlcpy Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 09/20] RDMA/rtrs-clt: Kill rtrs_clt_{start,stop}_hb Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 10/20] RDMA/rtrs-clt: Kill rtrs_clt_disconnect_from_sysfs Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 11/20] RDMA/rtrs-srv: Kill __rtrs_srv_change_state Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 12/20] RDMA/rtrs-clt: Remove redundant 'break' Gioh Kim
2021-05-03 11:48 ` Gioh Kim [this message]
2021-05-03 11:48 ` [PATCH for-next 14/20] RDMA/rtrs-srv: Replace atomic_t with percpu_ref for ids_inflight Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 15/20] RDMA/rtrs: Do not reset hb_missed_max after re-connection Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 16/20] RDMA/rtrs-srv: Duplicated session name is not allowed Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 17/20] RDMA/rtrs-srv: Fix memory leak of unfreed rtrs_srv_stats object Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 18/20] RDMA/rtrs-srv: Fix memory leak when having multiple sessions Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 19/20] RDMA/rtrs-clt: Check if the queue_depth has changed during a reconnection Gioh Kim
2021-05-03 11:48 ` [PATCH for-next 20/20] RDMA/rtrs-clt: Fix memory leak of not-freed sess->stats and stats->pcpu_stats Gioh Kim

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=20210503114818.288896-14-gi-oh.kim@ionos.com \
    --to=gi-oh.kim@ionos.com \
    --cc=bvanassche@acm.org \
    --cc=dledford@redhat.com \
    --cc=haris.iqbal@cloud.ionos.com \
    --cc=haris.iqbal@ionos.com \
    --cc=jgg@ziepe.ca \
    --cc=jinpu.wang@ionos.com \
    --cc=leon@kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    /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.