From: Andy Grover Date: Thu, 13 Jan 2011 19:40:31 +0000 (-0800) Subject: rds: check for excessive looping in rds_send_xmit X-Git-Tag: v4.1.12-92~319^2^2~2^2~55 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=b7ca756ccba06bb63f5ba555f2b6ba2e01e70940;p=users%2Fjedix%2Flinux-maple.git rds: check for excessive looping in rds_send_xmit Signed-off-by: Andy Grover Signed-off-by: Chris Mason Signed-off-by: Bang Nguyen --- diff --git a/net/rds/send.c b/net/rds/send.c index ed1ad6962baa..e1f7f0585b27 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -134,6 +134,7 @@ int rds_send_xmit(struct rds_connection *conn) struct scatterlist *sg; int ret = 0; LIST_HEAD(to_be_dropped); + int same_rm = 0; restart: @@ -171,6 +172,18 @@ restart: rm = conn->c_xmit_rm; + if (!rm) { + same_rm = 0; + } else { + same_rm++; + if ((same_rm >= 4096) && printk_ratelimit()) { + printk(KERN_ERR "RDS: Stuck rm\n"); + cond_resched(); + ret = -EAGAIN; + break; + } + } + /* * If between sending messages, we can send a pending congestion * map update.