diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index 29fb4d68a144eb0a16b8ae0415ba83217a25df03..cdc3c87c53e62d4db4bb18fa5f59d7889b9866cb 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -807,6 +807,10 @@ static int tcf_block_cb_call(struct tcf_block *block, enum tc_setup_type type,
 	int ok_count = 0;
 	int err;
 
+	/* Make sure all netdevs sharing this block are offload-capable. */
+	if (block->nooffloaddevcnt && err_stop)
+		return -EOPNOTSUPP;
+
 	list_for_each_entry(block_cb, &block->cb_list, list) {
 		err = block_cb->cb(type, type_data, block_cb->cb_priv);
 		if (err) {
@@ -1725,31 +1729,21 @@ static int tc_exts_setup_cb_egdev_call(struct tcf_exts *exts,
 int tc_setup_cb_call(struct tcf_block *block, struct tcf_exts *exts,
 		     enum tc_setup_type type, void *type_data, bool err_stop)
 {
-	int ok_count = 0;
+	int ok_count;
 	int ret;
 
-	if (!block->nooffloaddevcnt) {
-		ret = tcf_block_cb_call(block, type, type_data, err_stop);
-		if (ret < 0)
-			return ret;
-		ok_count = ret;
-	}
+	ret = tcf_block_cb_call(block, type, type_data, err_stop);
+	if (ret < 0)
+		return ret;
+	ok_count = ret;
 
 	if (!exts || ok_count)
-		goto skip_egress;
-
+		return ok_count;
 	ret = tc_exts_setup_cb_egdev_call(exts, type, type_data, err_stop);
 	if (ret < 0)
 		return ret;
 	ok_count += ret;
 
-skip_egress:
-	/* if one of the netdevs sharing this block are not offload-capable
-	 * make sure we succeeded in egress instead.
-	 */
-	if (block->nooffloaddevcnt && !ok_count && err_stop)
-		return -EOPNOTSUPP;
-
 	return ok_count;
 }
 EXPORT_SYMBOL(tc_setup_cb_call);