2024-10-24, 14:11:05 +0200, Johannes Berg wrote: > On Thu, 2024-10-24 at 13:18 +0200, Johannes Berg wrote: > > From: Johannes Berg <johannes.berg@xxxxxxxxx> > > > > This is mostly to illustrate, done with the following spatch: > > > > And we can extend that and get bunch more: > > @@ > expression attr, def; > expression val; > identifier fn =~ "^nla_get_.*"; > fresh identifier dfn = fn ## "_default"; > @@ > ( > -if (attr) > - val = fn(attr); > -else > - val = def; > +val = dfn(attr, def); > | > -if (!attr) > - val = def; > -else > - val = fn(attr); > +val = dfn(attr, def); > | > -val = def; > ... where != val; > -if (attr) > - val = fn(attr); > +val = dfn(attr, def); > | > -if (!attr) > - return def; > -return fn(attr); > +return dfn(attr, def); > ) Not really familiar with spatch, but I'm guessing this won't cover: val = attr ? getter(attr) : default; See macsec_validate_attr in drivers/net/macsec.c for some examples. There are also some cases where we have "if (data && data[IFLA_MACSEC_*])" guarding the attribute fetch (drivers/net/macvlan.c does that too), but I guess you can't really cover that without adding some kind of "default_with_cond" helpers. -- Sabrina