On Sat 16-12-17 08:44:19, Matthew Wilcox wrote: > From: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> > > I found the struct { union { struct { union { struct { } } } } } > layout rather confusing. Fortunately, there is an easier way to write > this. The innermost union is of four things which are the size of an > int, so the ones which are used by slab/slob/slub can be pulled up > two levels to be in the outermost union with 'counters'. That leaves > us with struct { union { struct { atomic_t; atomic_t; } } } which > has the same layout, but is easier to read. This is where the pahole output would be really helpeful. The patch looks OK, I will double check with a fresh brain tomorrow (with the rest of the series), though. > Signed-off-by: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> > --- > include/linux/mm_types.h | 40 +++++++++++++++++++--------------------- > 1 file changed, 19 insertions(+), 21 deletions(-) > > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > index 4509f0cfaf39..27973166af28 100644 > --- a/include/linux/mm_types.h > +++ b/include/linux/mm_types.h > @@ -84,28 +84,26 @@ struct page { > */ > unsigned counters; > #endif > - struct { > + unsigned int active; /* SLAB */ > + struct { /* SLUB */ > + unsigned inuse:16; > + unsigned objects:15; > + unsigned frozen:1; > + }; > + int units; /* SLOB */ > + > + struct { /* Page cache */ > + /* > + * Count of ptes mapped in mms, to show when > + * page is mapped & limit reverse map searches. > + * > + * Extra information about page type may be > + * stored here for pages that are never mapped, > + * in which case the value MUST BE <= -2. > + * See page-flags.h for more details. > + */ > + atomic_t _mapcount; > > - union { > - /* > - * Count of ptes mapped in mms, to show when > - * page is mapped & limit reverse map searches. > - * > - * Extra information about page type may be > - * stored here for pages that are never mapped, > - * in which case the value MUST BE <= -2. > - * See page-flags.h for more details. > - */ > - atomic_t _mapcount; > - > - unsigned int active; /* SLAB */ > - struct { /* SLUB */ > - unsigned inuse:16; > - unsigned objects:15; > - unsigned frozen:1; > - }; > - int units; /* SLOB */ > - }; > /* > * Usage count, *USE WRAPPER FUNCTION* when manual > * accounting. See page_ref.h > -- > 2.15.1 > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@xxxxxxxxx. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>