All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gerd Rausch <gerd.rausch@oracle.com>
To: Santosh Shilimkar <santosh.shilimkar@oracle.com>,
	netdev@vger.kernel.org, linux-rdma@vger.kernel.org,
	rds-devel@oss.oracle.com
Cc: David Miller <davem@davemloft.net>
Subject: [PATCH net-next v2 1/4] RDS: limit the number of times we loop in rds_send_xmit
Date: Thu, 15 Aug 2019 07:42:03 -0700	[thread overview]
Message-ID: <90b76f24-d799-5362-df53-19102d781e3e@oracle.com> (raw)
In-Reply-To: <cover.1565879451.git.gerd.rausch@oracle.com>

From: Chris Mason <chris.mason@oracle.com>
Date: Fri, 3 Feb 2012 11:07:54 -0500

This will kick the RDS worker thread if we have been looping
too long.

Original commit from 2012 updated to include a change by
Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
that triggers "must_wake" if "rds_ib_recv_refill_one" fails.

Signed-off-by: Gerd Rausch <gerd.rausch@oracle.com>
---
 net/rds/ib_recv.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c
index 3cae88cbdaa0..1a8a4a760b84 100644
--- a/net/rds/ib_recv.c
+++ b/net/rds/ib_recv.c
@@ -385,6 +385,7 @@ void rds_ib_recv_refill(struct rds_connection *conn, int prefill, gfp_t gfp)
 	unsigned int posted = 0;
 	int ret = 0;
 	bool can_wait = !!(gfp & __GFP_DIRECT_RECLAIM);
+	bool must_wake = false;
 	u32 pos;
 
 	/* the goal here is to just make sure that someone, somewhere
@@ -405,6 +406,7 @@ void rds_ib_recv_refill(struct rds_connection *conn, int prefill, gfp_t gfp)
 		recv = &ic->i_recvs[pos];
 		ret = rds_ib_recv_refill_one(conn, recv, gfp);
 		if (ret) {
+			must_wake = true;
 			break;
 		}
 
@@ -423,6 +425,11 @@ void rds_ib_recv_refill(struct rds_connection *conn, int prefill, gfp_t gfp)
 		}
 
 		posted++;
+
+		if ((posted > 128 && need_resched()) || posted > 8192) {
+			must_wake = true;
+			break;
+		}
 	}
 
 	/* We're doing flow control - update the window. */
@@ -445,10 +452,13 @@ void rds_ib_recv_refill(struct rds_connection *conn, int prefill, gfp_t gfp)
 	 * if we should requeue.
 	 */
 	if (rds_conn_up(conn) &&
-	    ((can_wait && rds_ib_ring_low(&ic->i_recv_ring)) ||
+	    (must_wake ||
+	    (can_wait && rds_ib_ring_low(&ic->i_recv_ring)) ||
 	    rds_ib_ring_empty(&ic->i_recv_ring))) {
 		queue_delayed_work(rds_wq, &conn->c_recv_w, 1);
 	}
+	if (can_wait)
+		cond_resched();
 }
 
 /*
-- 
2.22.1



  parent reply	other threads:[~2019-08-15 14:42 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-13 18:20 [PATCH net-next 1/5] RDS: Re-add pf/sol access via sysctl Gerd Rausch
2019-08-13 22:07 ` santosh.shilimkar
2019-08-14 15:56 ` Doug Ledford
2019-08-14 17:41   ` Gerd Rausch
2019-08-14 18:01   ` santosh.shilimkar
2019-08-14 18:21     ` David Miller
2019-08-14 18:36       ` santosh.shilimkar
2019-08-14 21:31         ` David Miller
2019-08-14 21:45           ` Gerd Rausch
2019-08-15  1:25             ` David Miller
2019-08-15 14:40               ` [PATCH net-next v2 0/4] net/rds: Fixes from internal Oracle repo Gerd Rausch
2019-08-15 19:04                 ` David Miller
     [not found]               ` <cover.1565879451.git.gerd.rausch@oracle.com>
2019-08-15 14:42                 ` Gerd Rausch [this message]
2019-08-15 16:16                   ` [PATCH net-next v2 1/4] RDS: limit the number of times we loop in rds_send_xmit santosh.shilimkar
2019-08-15 14:42                 ` [PATCH net-next v2 2/4] RDS: don't use GFP_ATOMIC for sk_alloc in rds_create Gerd Rausch
2019-08-15 16:17                   ` santosh.shilimkar
2019-08-15 14:42                 ` [PATCH net-next v2 3/4] net/rds: Add a few missing rds_stat_names entries Gerd Rausch
2019-08-15 16:17                   ` santosh.shilimkar
2019-08-15 14:43                 ` [PATCH net-next v2 4/4] rds: check for excessive looping in rds_send_xmit Gerd Rausch
2019-08-15 16:18                   ` santosh.shilimkar

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=90b76f24-d799-5362-df53-19102d781e3e@oracle.com \
    --to=gerd.rausch@oracle.com \
    --cc=davem@davemloft.net \
    --cc=linux-rdma@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=rds-devel@oss.oracle.com \
    --cc=santosh.shilimkar@oracle.com \
    /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.