[ovs-dev] [PATCH V3 3/9] compat: Move genl_ops policy to genl_family

Yi-Hung Wei yihung.wei at gmail.com
Fri Mar 6 18:28:35 UTC 2020


On Wed, Mar 4, 2020 at 3:04 PM Greg Rose <gvrose8192 at gmail.com> wrote:
>
> From: Johannes Berg <johannes.berg at intel.com>
>
> Upstream commit:
>     commit 3b0f31f2b8c9fb348e4530b88f6b64f9621f83d6
>     Author: Johannes Berg <johannes.berg at intel.com>
>     Date:   Thu Mar 21 22:51:02 2019 +0100
>
>     genetlink: make policy common to family
>
>     Since maxattr is common, the policy can't really differ sanely,
>     so make it common as well.
>
>     The only user that did in fact manage to make a non-common policy
>     is taskstats, which has to be really careful about it (since it's
>     still using a common maxattr!). This is no longer supported, but
>     we can fake it using pre_doit.
>
>     This reduces the size of e.g. nl80211.o (which has lots of commands):
>
>        text        data     bss     dec     hex filename
>      398745       14323    2240  415308   6564c net/wireless/nl80211.o (before)
>      397913       14331    2240  414484   65314 net/wireless/nl80211.o (after)
>     --------------------------------
>        -832      +8       0    -824
>
>     Which is obviously just 8 bytes for each command, and an added 8
>     bytes for the new policy pointer. I'm not sure why the ops list is
>     counted as .text though.
>
>     Most of the code transformations were done using the following spatch:
>         @ops@
>         identifier OPS;
>         expression POLICY;
>         @@
>         struct genl_ops OPS[] = {
>         ...,
>          {
>         -       .policy = POLICY,
>          },
>         ...
>         };
>
>         @@
>         identifier ops.OPS;
>         expression ops.POLICY;
>         identifier fam;
>         expression M;
>         @@
>         struct genl_family fam = {
>                 .ops = OPS,
>                 .maxattr = M,
>         +       .policy = POLICY,
>                 ...
>         };
>
>     This also gets rid of devlink_nl_cmd_region_read_dumpit() accessing
>     the cb->data as ops, which we want to change in a later genl patch.
>
>     Signed-off-by: Johannes Berg <johannes.berg at intel.com>
>     Signed-off-by: David S. Miller <davem at davemloft.net>
>
> Since commit 3b0f31f2b8c9f ("genetlink: make policy common to family")
> the policy field of the genl_ops structure has been moved into the
> genl_family structure.  Add necessary compat layer infrastructure
> to still support older kernels.
>
> Signed-off-by: Greg Rose <gvrose8192 at gmail.com>
> ---
> V3 - Add policy back to genl_family instead of completely removing
>      it.
> ---

Thanks for the patch. LGTM.

Acked-by: Yi-Hung Wei <yihung.wei at gmail.com>


More information about the dev mailing list