return false;
 }
 
-int hclge_enable_vport_vlan_filter(struct hclge_vport *vport, bool request_en)
+static int __hclge_enable_vport_vlan_filter(struct hclge_vport *vport,
+                                           bool request_en)
 {
-       struct hclge_dev *hdev = vport->back;
        bool need_en;
        int ret;
 
-       mutex_lock(&hdev->vport_lock);
-
-       vport->req_vlan_fltr_en = request_en;
-
        need_en = hclge_need_enable_vport_vlan_filter(vport);
-       if (need_en == vport->cur_vlan_fltr_en) {
-               mutex_unlock(&hdev->vport_lock);
+       if (need_en == vport->cur_vlan_fltr_en)
                return 0;
-       }
 
        ret = hclge_set_vport_vlan_filter(vport, need_en);
-       if (ret) {
-               mutex_unlock(&hdev->vport_lock);
+       if (ret)
                return ret;
-       }
 
        vport->cur_vlan_fltr_en = need_en;
 
+       return 0;
+}
+
+int hclge_enable_vport_vlan_filter(struct hclge_vport *vport, bool request_en)
+{
+       struct hclge_dev *hdev = vport->back;
+       int ret;
+
+       mutex_lock(&hdev->vport_lock);
+       vport->req_vlan_fltr_en = request_en;
+       ret = __hclge_enable_vport_vlan_filter(vport, request_en);
        mutex_unlock(&hdev->vport_lock);
 
-       return 0;
+       return ret;
 }
 
 static int hclge_enable_vlan_filter(struct hnae3_handle *handle, bool enable)
                                        &vport->state))
                        continue;
 
-               ret = hclge_enable_vport_vlan_filter(vport,
-                                                    vport->req_vlan_fltr_en);
+               mutex_lock(&hdev->vport_lock);
+               ret = __hclge_enable_vport_vlan_filter(vport,
+                                                      vport->req_vlan_fltr_en);
                if (ret) {
                        dev_err(&hdev->pdev->dev,
                                "failed to sync vlan filter state for vport%u, ret = %d\n",
                                vport->vport_id, ret);
                        set_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE,
                                &vport->state);
+                       mutex_unlock(&hdev->vport_lock);
                        return;
                }
+               mutex_unlock(&hdev->vport_lock);
        }
 }