summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-01-25 00:01:11 +0300
committerDavid S. Miller <davem@davemloft.net>2018-01-25 00:01:11 +0300
commit131f1ed317d2ca92a1b7ada4e658cc2a3a0e4ce6 (patch)
tree46014315e7b1f1d4c22b47b514a905cd823ddb99 /include
parent46410c2efa9cb5b2f40c9ce24a75d147f44aedeb (diff)
parentc846adb6be17d77395c579a61c44d2863e6f9762 (diff)
downloadlinux-131f1ed317d2ca92a1b7ada4e658cc2a3a0e4ce6.tar.xz
Merge branch 'net-sched-propagate-extack-to-cls-offloads-on-destroy-and-only-with-skip_sw'
Jakub Kicinski says: ==================== net: sched: propagate extack to cls offloads on destroy and only with skip_sw This series some of Jiri's comments and the fact that today drivers may produce extack even if there is no skip_sw flag (meaning the driver failure is not really a problem), and warning messages will only confuse the users. First patch propagates extack to destroy as requested by Jiri, extack is then propagated to the driver callback for each classifier. I chose not to provide the extack on error paths. As a rule of thumb it seems best to keep the extack of the condition which caused the error. E.g. err = this_will_fail(arg, extack); if (err) { undo_things(arg, NULL /* don't pass extack */); return err; } Note that NL_SET_ERR_MSG() will ignore the message if extack is NULL. I was pondering whether we should make NL_SET_ERR_MSG() refuse to overwrite the msg, but there seem to be cases in the tree where extack is set like this: err = this_will_fail(arg, extack); if (err) { undo_things(arg, NULL /* don't pass extack */); NL_SET_ERR_MSG(extack, "extack is set after undo call :/"); return err; } I think not passing extack to undo calls is reasonable. v2: - rename the temporary tc_cls_common_offload_init(). ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/pkt_cls.h24
-rw-r--r--include/net/sch_generic.h3
2 files changed, 14 insertions, 13 deletions
diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h
index 2f8f16a4d88e..1a41513cec7f 100644
--- a/include/net/pkt_cls.h
+++ b/include/net/pkt_cls.h
@@ -605,17 +605,6 @@ struct tc_cls_common_offload {
struct netlink_ext_ack *extack;
};
-static inline void
-tc_cls_common_offload_init(struct tc_cls_common_offload *cls_common,
- const struct tcf_proto *tp,
- struct netlink_ext_ack *extack)
-{
- cls_common->chain_index = tp->chain->index;
- cls_common->protocol = tp->protocol;
- cls_common->prio = tp->prio;
- cls_common->extack = extack;
-}
-
struct tc_cls_u32_knode {
struct tcf_exts *exts;
struct tc_u32_sel *sel;
@@ -694,6 +683,18 @@ static inline bool tc_in_hw(u32 flags)
return (flags & TCA_CLS_FLAGS_IN_HW) ? true : false;
}
+static inline void
+tc_cls_common_offload_init(struct tc_cls_common_offload *cls_common,
+ const struct tcf_proto *tp, u32 flags,
+ struct netlink_ext_ack *extack)
+{
+ cls_common->chain_index = tp->chain->index;
+ cls_common->protocol = tp->protocol;
+ cls_common->prio = tp->prio;
+ if (tc_skip_sw(flags))
+ cls_common->extack = extack;
+}
+
enum tc_fl_command {
TC_CLSFLOWER_REPLACE,
TC_CLSFLOWER_DESTROY,
@@ -736,7 +737,6 @@ struct tc_cls_bpf_offload {
struct bpf_prog *oldprog;
const char *name;
bool exts_integrated;
- u32 gen_flags;
};
struct tc_mqprio_qopt_offload {
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index cd1be1f25c36..eac43e8ca96d 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -233,7 +233,8 @@ struct tcf_proto_ops {
const struct tcf_proto *,
struct tcf_result *);
int (*init)(struct tcf_proto*);
- void (*destroy)(struct tcf_proto*);
+ void (*destroy)(struct tcf_proto *tp,
+ struct netlink_ext_ack *extack);
void* (*get)(struct tcf_proto*, u32 handle);
int (*change)(struct net *net, struct sk_buff *,