On Wed, 2020-09-30 at 17:05 -0700, Jakub Kicinski wrote: > 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.
The fundamentally are bools, so that makes sense :) > We can grow the fields as needed, compiler should warn us > if someone tries to assign larger constants. > > Signed-off-by: Jakub Kicinski <k...@kernel.org> > --- > include/net/genetlink.h | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/include/net/genetlink.h b/include/net/genetlink.h > index a3484fd736d6..0033c76ff094 100644 > --- a/include/net/genetlink.h > +++ b/include/net/genetlink.h > @@ -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 */ In practice, we can probably also shrink that to u16, since it just gives you the offset of the multicast groups this family has in the whole table - and we'll hopefully never run more than 2**16 multicast groups across all genetlink families :) But it also doesn't matter much. Reviewed-by: Johannes Berg <johan...@sipsolutions.net> johannes