From 9a99dc1c41772e0b24348f089a7a7edb91fc7723 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Wed, 6 Jun 2018 13:55:47 -0400 Subject: [PATCH] Revert "net: sched: cls: Fix offloading when ingress dev is vxlan" This reverts commit d96a43c66464cdf0b249fdf47b6dcd65b83af8c0. This potentially breaks things, so reverting as per request by Jakub Kicinski. Signed-off-by: David S. Miller --- net/sched/cls_api.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 29fb4d68a144..cdc3c87c53e6 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);