net: dsa: qca8k: fix missing unlock on error in qca8k_vlan_(add|del)
authorWei Yongjun <weiyongjun1@huawei.com>
Tue, 18 May 2021 11:24:13 +0000 (11:24 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 May 2021 20:39:32 +0000 (13:39 -0700)
Add the missing unlock before return from function qca8k_vlan_add()
and qca8k_vlan_del() in the error handling case.

Fixes: 028f5f8ef44f ("net: dsa: qca8k: handle error with qca8k_read operation")
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/qca8k.c

index 4753228..1f1b7c4 100644 (file)
@@ -506,8 +506,10 @@ qca8k_vlan_add(struct qca8k_priv *priv, u8 port, u16 vid, bool untagged)
                goto out;
 
        reg = qca8k_read(priv, QCA8K_REG_VTU_FUNC0);
-       if (reg < 0)
-               return reg;
+       if (reg < 0) {
+               ret = reg;
+               goto out;
+       }
        reg |= QCA8K_VTU_FUNC0_VALID | QCA8K_VTU_FUNC0_IVL_EN;
        reg &= ~(QCA8K_VTU_FUNC0_EG_MODE_MASK << QCA8K_VTU_FUNC0_EG_MODE_S(port));
        if (untagged)
@@ -519,7 +521,7 @@ qca8k_vlan_add(struct qca8k_priv *priv, u8 port, u16 vid, bool untagged)
 
        ret = qca8k_write(priv, QCA8K_REG_VTU_FUNC0, reg);
        if (ret)
-               return ret;
+               goto out;
        ret = qca8k_vlan_access(priv, QCA8K_VLAN_LOAD, vid);
 
 out:
@@ -541,8 +543,10 @@ qca8k_vlan_del(struct qca8k_priv *priv, u8 port, u16 vid)
                goto out;
 
        reg = qca8k_read(priv, QCA8K_REG_VTU_FUNC0);
-       if (reg < 0)
-               return reg;
+       if (reg < 0) {
+               ret = reg;
+               goto out;
+       }
        reg &= ~(3 << QCA8K_VTU_FUNC0_EG_MODE_S(port));
        reg |= QCA8K_VTU_FUNC0_EG_MODE_NOT <<
                        QCA8K_VTU_FUNC0_EG_MODE_S(port);
@@ -564,7 +568,7 @@ qca8k_vlan_del(struct qca8k_priv *priv, u8 port, u16 vid)
        } else {
                ret = qca8k_write(priv, QCA8K_REG_VTU_FUNC0, reg);
                if (ret)
-                       return ret;
+                       goto out;
                ret = qca8k_vlan_access(priv, QCA8K_VLAN_LOAD, vid);
        }