return 0;
 }
 
+/**
+ * iavf_find_cf - Find the cloud filter in the list
+ * @adapter: Board private structure
+ * @cookie: filter specific cookie
+ *
+ * Returns ptr to the filter object or NULL. Must be called while holding the
+ * cloud_filter_list_lock.
+ */
+static struct iavf_cloud_filter *iavf_find_cf(struct iavf_adapter *adapter,
+                                             unsigned long *cookie)
+{
+       struct iavf_cloud_filter *filter = NULL;
+
+       if (!cookie)
+               return NULL;
+
+       list_for_each_entry(filter, &adapter->cloud_filter_list, list) {
+               if (!memcmp(cookie, &filter->cookie, sizeof(filter->cookie)))
+                       return filter;
+       }
+       return NULL;
+}
+
 /**
  * iavf_configure_clsflower - Add tc flower filters
  * @adapter: board private structure
 
        filter->cookie = cls_flower->cookie;
 
+       /* bail out here if filter already exists */
+       spin_lock_bh(&adapter->cloud_filter_list_lock);
+       if (iavf_find_cf(adapter, &cls_flower->cookie)) {
+               dev_err(&adapter->pdev->dev, "Failed to add TC Flower filter, it already exists\n");
+               err = -EEXIST;
+               goto spin_unlock;
+       }
+       spin_unlock_bh(&adapter->cloud_filter_list_lock);
+
        /* set the mask to all zeroes to begin with */
        memset(&filter->f.mask.tcp_spec, 0, sizeof(struct virtchnl_l4_spec));
        /* start out with flow type and eth type IPv4 to begin with */
        adapter->num_cloud_filters++;
        filter->add = true;
        adapter->aq_required |= IAVF_FLAG_AQ_ADD_CLOUD_FILTER;
+spin_unlock:
        spin_unlock_bh(&adapter->cloud_filter_list_lock);
 err:
        if (err)
        return err;
 }
 
-/* iavf_find_cf - Find the cloud filter in the list
- * @adapter: Board private structure
- * @cookie: filter specific cookie
- *
- * Returns ptr to the filter object or NULL. Must be called while holding the
- * cloud_filter_list_lock.
- */
-static struct iavf_cloud_filter *iavf_find_cf(struct iavf_adapter *adapter,
-                                             unsigned long *cookie)
-{
-       struct iavf_cloud_filter *filter = NULL;
-
-       if (!cookie)
-               return NULL;
-
-       list_for_each_entry(filter, &adapter->cloud_filter_list, list) {
-               if (!memcmp(cookie, &filter->cookie, sizeof(filter->cookie)))
-                       return filter;
-       }
-       return NULL;
-}
-
 /**
  * iavf_delete_clsflower - Remove tc flower filters
  * @adapter: board private structure