On Thu, Jun 13, 2019 at 01:18:52PM +0200, Kevin Darbyshire-Bryant wrote: > Use extack error reporting mechanism in addition to returning -EINVAL > > Signed-off-by: Kevin Darbyshire-Bryant <l...@darbyshire-bryant.me.uk>
Nice. LGTM! > --- > net/sched/act_ctinfo.c | 23 ++++++++++++++++++----- > 1 file changed, 18 insertions(+), 5 deletions(-) > > diff --git a/net/sched/act_ctinfo.c b/net/sched/act_ctinfo.c > index e78b60e47c0f..a7d3679d7e2e 100644 > --- a/net/sched/act_ctinfo.c > +++ b/net/sched/act_ctinfo.c > @@ -165,15 +165,20 @@ static int tcf_ctinfo_init(struct net *net, struct > nlattr *nla, > u8 dscpmaskshift; > int ret = 0, err; > > - if (!nla) > + if (!nla) { > + NL_SET_ERR_MSG_MOD(extack, "ctinfo requires attributes to be > passed"); > return -EINVAL; > + } > > - err = nla_parse_nested(tb, TCA_CTINFO_MAX, nla, ctinfo_policy, NULL); > + err = nla_parse_nested(tb, TCA_CTINFO_MAX, nla, ctinfo_policy, extack); > if (err < 0) > return err; > > - if (!tb[TCA_CTINFO_ACT]) > + if (!tb[TCA_CTINFO_ACT]) { > + NL_SET_ERR_MSG_MOD(extack, > + "Missing required TCA_CTINFO_ACT attribute"); > return -EINVAL; > + } > actparm = nla_data(tb[TCA_CTINFO_ACT]); > > /* do some basic validation here before dynamically allocating things */ > @@ -182,13 +187,21 @@ static int tcf_ctinfo_init(struct net *net, struct > nlattr *nla, > dscpmask = nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_MASK]); > /* need contiguous 6 bit mask */ > dscpmaskshift = dscpmask ? __ffs(dscpmask) : 0; > - if ((~0 & (dscpmask >> dscpmaskshift)) != 0x3f) > + if ((~0 & (dscpmask >> dscpmaskshift)) != 0x3f) { > + NL_SET_ERR_MSG_ATTR(extack, > + tb[TCA_CTINFO_PARMS_DSCP_MASK], > + "dscp mask must be 6 contiguous > bits"); > return -EINVAL; > + } > dscpstatemask = tb[TCA_CTINFO_PARMS_DSCP_STATEMASK] ? > nla_get_u32(tb[TCA_CTINFO_PARMS_DSCP_STATEMASK]) : 0; > /* mask & statemask must not overlap */ > - if (dscpmask & dscpstatemask) > + if (dscpmask & dscpstatemask) { > + NL_SET_ERR_MSG_ATTR(extack, > + tb[TCA_CTINFO_PARMS_DSCP_STATEMASK], > + "dscp statemask must not overlap > dscp mask"); > return -EINVAL; > + } > } > > /* done the validation:now to the actual action allocation */ > -- > 2.20.1 (Apple Git-117) >