]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
ibmvnic: set ltb->buff to NULL after freeing
authorSukadev Bhattiprolu <sukadev@linux.ibm.com>
Thu, 24 Jun 2021 04:13:14 +0000 (21:13 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 24 Jun 2021 18:22:23 +0000 (11:22 -0700)
free_long_term_buff() checks ltb->buff to decide whether we have a long
term buffer to free. So set ltb->buff to NULL afer freeing. While here,
also clear ->map_id, fix up some coding style and log an error.

Fixes: 9c4eaabd1bb39 ("Check CRQ command return codes")
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ibm/ibmvnic.c

index 779de81a54a61b51174d96394aa11daa791449dc..b8bdab0b27010afe9abcb933a9db3602f42cdfa0 100644 (file)
@@ -211,12 +211,11 @@ static int alloc_long_term_buff(struct ibmvnic_adapter *adapter,
        mutex_lock(&adapter->fw_lock);
        adapter->fw_done_rc = 0;
        reinit_completion(&adapter->fw_done);
-       rc = send_request_map(adapter, ltb->addr,
-                             ltb->size, ltb->map_id);
+
+       rc = send_request_map(adapter, ltb->addr, ltb->size, ltb->map_id);
        if (rc) {
-               dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr);
-               mutex_unlock(&adapter->fw_lock);
-               return rc;
+               dev_err(dev, "send_request_map failed, rc = %d\n", rc);
+               goto out;
        }
 
        rc = ibmvnic_wait_for_completion(adapter, &adapter->fw_done, 10000);
@@ -224,20 +223,23 @@ static int alloc_long_term_buff(struct ibmvnic_adapter *adapter,
                dev_err(dev,
                        "Long term map request aborted or timed out,rc = %d\n",
                        rc);
-               dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr);
-               mutex_unlock(&adapter->fw_lock);
-               return rc;
+               goto out;
        }
 
        if (adapter->fw_done_rc) {
                dev_err(dev, "Couldn't map long term buffer,rc = %d\n",
                        adapter->fw_done_rc);
+               rc = -1;
+               goto out;
+       }
+       rc = 0;
+out:
+       if (rc) {
                dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr);
-               mutex_unlock(&adapter->fw_lock);
-               return -1;
+               ltb->buff = NULL;
        }
        mutex_unlock(&adapter->fw_lock);
-       return 0;
+       return rc;
 }
 
 static void free_long_term_buff(struct ibmvnic_adapter *adapter,
@@ -257,6 +259,8 @@ static void free_long_term_buff(struct ibmvnic_adapter *adapter,
            adapter->reset_reason != VNIC_RESET_TIMEOUT)
                send_request_unmap(adapter, ltb->map_id);
        dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr);
+       ltb->buff = NULL;
+       ltb->map_id = 0;
 }
 
 static int reset_long_term_buff(struct ibmvnic_adapter *adapter,