]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/rds/send.c
Merge tag 'backlight-next-5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/lee...
[linux.git] / net / rds / send.c
index 031b1e97a46639c86da300fa777009078488f5e9..82dcd8b84fe779ab42c4c81e5a7c1faf94c2158d 100644 (file)
@@ -145,6 +145,7 @@ int rds_send_xmit(struct rds_conn_path *cp)
        LIST_HEAD(to_be_dropped);
        int batch_count;
        unsigned long send_gen = 0;
+       int same_rm = 0;
 
 restart:
        batch_count = 0;
@@ -200,6 +201,17 @@ int rds_send_xmit(struct rds_conn_path *cp)
 
                rm = cp->cp_xmit_rm;
 
+               if (!rm) {
+                       same_rm = 0;
+               } else {
+                       same_rm++;
+                       if (same_rm >= 4096) {
+                               rds_stats_inc(s_send_stuck_rm);
+                               ret = -EAGAIN;
+                               break;
+                       }
+               }
+
                /*
                 * If between sending messages, we can send a pending congestion
                 * map update.
@@ -1132,7 +1144,7 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len)
                case AF_INET:
                        if (usin->sin_addr.s_addr == htonl(INADDR_ANY) ||
                            usin->sin_addr.s_addr == htonl(INADDR_BROADCAST) ||
-                           IN_MULTICAST(ntohl(usin->sin_addr.s_addr))) {
+                           ipv4_is_multicast(usin->sin_addr.s_addr)) {
                                ret = -EINVAL;
                                goto out;
                        }
@@ -1163,7 +1175,7 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len)
                                addr4 = sin6->sin6_addr.s6_addr32[3];
                                if (addr4 == htonl(INADDR_ANY) ||
                                    addr4 == htonl(INADDR_BROADCAST) ||
-                                   IN_MULTICAST(ntohl(addr4))) {
+                                   ipv4_is_multicast(addr4)) {
                                        ret = -EINVAL;
                                        goto out;
                                }