genetlink: reorg struct genl_family
authorJakub Kicinski <kuba@kernel.org>
Fri, 2 Oct 2020 21:49:52 +0000 (14:49 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 3 Oct 2020 02:11:11 +0000 (19:11 -0700)
There are holes and oversized members in struct genl_family.

Before: /* size: 104, cachelines: 2, members: 16 */
After:  /* size:  88, cachelines: 2, members: 16 */

The command field in struct genlmsghdr is a u8, so no point
in the operation count being 32 bit. Also operation 0 is
usually undefined, so we only need 255 entries.

netnsok and parallel_ops are only ever initialized to true.

We can grow the fields as needed, compiler should warn us
if someone tries to assign larger constants.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/genetlink.h

index b9eb92f3fe861f23e5d2f078a2a08633025049e4..5cd9ab0c6bd9507faf832b0f5b5932e222c089c3 100644 (file)
@@ -48,8 +48,11 @@ struct genl_family {
        char                    name[GENL_NAMSIZ];
        unsigned int            version;
        unsigned int            maxattr;
-       bool                    netnsok;
-       bool                    parallel_ops;
+       unsigned int            mcgrp_offset;   /* private */
+       u8                      netnsok:1;
+       u8                      parallel_ops:1;
+       u8                      n_ops;
+       u8                      n_mcgrps;
        const struct nla_policy *policy;
        int                     (*pre_doit)(const struct genl_ops *ops,
                                            struct sk_buff *skb,
@@ -59,9 +62,6 @@ struct genl_family {
                                             struct genl_info *info);
        const struct genl_ops * ops;
        const struct genl_multicast_group *mcgrps;
-       unsigned int            n_ops;
-       unsigned int            n_mcgrps;
-       unsigned int            mcgrp_offset;   /* private */
        struct module           *module;
 };