From b7ca756ccba06bb63f5ba555f2b6ba2e01e70940 Mon Sep 17 00:00:00 2001 From: Andy Grover Date: Thu, 13 Jan 2011 11:40:31 -0800 Subject: [PATCH] rds: check for excessive looping in rds_send_xmit Signed-off-by: Andy Grover Signed-off-by: Chris Mason Signed-off-by: Bang Nguyen --- net/rds/send.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/net/rds/send.c b/net/rds/send.c index ed1ad6962baa6..e1f7f0585b27f 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. -- 2.50.1