struct dsa_switch *ds = felix->ds;
        int key_length, upstream, err;
 
-       /* We don't need to install the rxvlan into the other ports' filtering
-        * tables, because we're just pushing the rxvlan when sending towards
-        * the CPU
-        */
-       if (!pvid)
-               return 0;
-
        key_length = ocelot->vcap[VCAP_ES0].keys[VCAP_ES0_IGR_PORT].length;
        upstream = dsa_upstream_port(ds, port);
 
 
        outer_tagging_rule = ocelot_vcap_block_find_filter_by_id(block_vcap_es0,
                                                                 port, false);
-       /* In rxvlan_add, we had the "if (!pvid) return 0" logic to avoid
-        * installing outer tagging ES0 rules where they weren't needed.
-        * But in rxvlan_del, the API doesn't give us the "flags" anymore,
-        * so that forces us to be slightly sloppy here, and just assume that
-        * if we didn't find an outer_tagging_rule it means that there was
-        * none in the first place, i.e. rxvlan_del is called on a non-pvid
-        * port. This is most probably true though.
-        */
        if (!outer_tagging_rule)
-               return 0;
+               return -ENOENT;
 
        return ocelot_vcap_filter_del(ocelot, outer_tagging_rule);
 }
        untagging_rule = ocelot_vcap_block_find_filter_by_id(block_vcap_is1,
                                                             port, false);
        if (!untagging_rule)
-               return 0;
+               return -ENOENT;
 
        err = ocelot_vcap_filter_del(ocelot, untagging_rule);
        if (err)