]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
rds: check for excessive looping in rds_send_xmit
authorAndy Grover <andy.grover@oracle.com>
Thu, 13 Jan 2011 19:40:31 +0000 (11:40 -0800)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 7 Jul 2015 23:41:28 +0000 (16:41 -0700)
Signed-off-by: Andy Grover <andy.grover@oracle.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Signed-off-by: Bang Nguyen <bang.nguyen@oracle.com>
net/rds/send.c

index ed1ad6962baa6c1915c71f9d795d9cd2134a495b..e1f7f0585b27fa2e76d98550de534e16b651bc25 100644 (file)
@@ -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.