s390/qeth: fix using of ref counter for rxip addresses
authorKittipon Meesompop <kmeesomp@linux.vnet.ibm.com>
Tue, 15 Aug 2017 15:02:50 +0000 (17:02 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Aug 2017 17:58:40 +0000 (10:58 -0700)
IP-address setting and removal are delayed when the device is not yet in
state SOFTSETUP or UP. ref_counter has been implemented only for
ip-address with type normal. In this patch ref_counter logic is also used
for ip-address with type rxip to allow appropriate handling of multiple
postponed rxip add and del calls.

Signed-off-by: Kittipon Meesompop <kmeesomp@linux.vnet.ibm.com>
Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_l3_main.c

index 41bd00454d0f34d267688573a82c38d88d99cae9..0a3dc14a1381ddd2ed2463efa307d609ca83f05d 100644 (file)
@@ -247,7 +247,8 @@ int qeth_l3_delete_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
                return -ENOENT;
 
        addr->ref_counter--;
-       if (addr->type == QETH_IP_TYPE_NORMAL && addr->ref_counter > 0)
+       if (addr->ref_counter > 0 && (addr->type == QETH_IP_TYPE_NORMAL ||
+                                     addr->type == QETH_IP_TYPE_RXIP))
                return rc;
        if (addr->in_progress)
                return -EINPROGRESS;
@@ -329,8 +330,9 @@ int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
                        kfree(addr);
                }
        } else {
-                       if (addr->type == QETH_IP_TYPE_NORMAL)
-                               addr->ref_counter++;
+               if (addr->type == QETH_IP_TYPE_NORMAL ||
+                   addr->type == QETH_IP_TYPE_RXIP)
+                       addr->ref_counter++;
        }
 
        return rc;