net: sched: cls_bpf: no need to call tcf_exts_change for newly allocated struct
authorJiri Pirko <jiri@mellanox.com>
Fri, 4 Aug 2017 12:29:10 +0000 (14:29 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 4 Aug 2017 18:21:24 +0000 (11:21 -0700)
As the prog struct was allocated right before cls_bpf_set_parms call,
no need to use tcf_exts_change to do atomic change, and we can just
fill-up the unused exts struct directly by tcf_exts_validate.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_bpf.c

index e9ab8374a8775f680c8878f2f824739b5e39e4a4..cf248c3137adad4d1babc6da2e9fdaaef5719d73 100644 (file)
@@ -387,7 +387,6 @@ static int cls_bpf_set_parms(struct net *net, struct tcf_proto *tp,
                             struct nlattr **tb, struct nlattr *est, bool ovr)
 {
        bool is_bpf, is_ebpf, have_exts = false;
-       struct tcf_exts exts;
        u32 gen_flags = 0;
        int ret;
 
@@ -396,30 +395,23 @@ static int cls_bpf_set_parms(struct net *net, struct tcf_proto *tp,
        if ((!is_bpf && !is_ebpf) || (is_bpf && is_ebpf))
                return -EINVAL;
 
-       ret = tcf_exts_init(&exts, TCA_BPF_ACT, TCA_BPF_POLICE);
+       ret = tcf_exts_validate(net, tp, tb, est, &prog->exts, ovr);
        if (ret < 0)
                return ret;
-       ret = tcf_exts_validate(net, tp, tb, est, &exts, ovr);
-       if (ret < 0)
-               goto errout;
 
        if (tb[TCA_BPF_FLAGS]) {
                u32 bpf_flags = nla_get_u32(tb[TCA_BPF_FLAGS]);
 
-               if (bpf_flags & ~TCA_BPF_FLAG_ACT_DIRECT) {
-                       ret = -EINVAL;
-                       goto errout;
-               }
+               if (bpf_flags & ~TCA_BPF_FLAG_ACT_DIRECT)
+                       return -EINVAL;
 
                have_exts = bpf_flags & TCA_BPF_FLAG_ACT_DIRECT;
        }
        if (tb[TCA_BPF_FLAGS_GEN]) {
                gen_flags = nla_get_u32(tb[TCA_BPF_FLAGS_GEN]);
                if (gen_flags & ~CLS_BPF_SUPPORTED_GEN_FLAGS ||
-                   !tc_flags_valid(gen_flags)) {
-                       ret = -EINVAL;
-                       goto errout;
-               }
+                   !tc_flags_valid(gen_flags))
+                       return -EINVAL;
        }
 
        prog->exts_integrated = have_exts;
@@ -428,19 +420,14 @@ static int cls_bpf_set_parms(struct net *net, struct tcf_proto *tp,
        ret = is_bpf ? cls_bpf_prog_from_ops(tb, prog) :
                       cls_bpf_prog_from_efd(tb, prog, tp);
        if (ret < 0)
-               goto errout;
+               return ret;
 
        if (tb[TCA_BPF_CLASSID]) {
                prog->res.classid = nla_get_u32(tb[TCA_BPF_CLASSID]);
                tcf_bind_filter(tp, &prog->res, base);
        }
 
-       tcf_exts_change(tp, &prog->exts, &exts);
        return 0;
-
-errout:
-       tcf_exts_destroy(&exts);
-       return ret;
 }
 
 static u32 cls_bpf_grab_new_handle(struct tcf_proto *tp,