On Mon, Dec 18, 2017 at 04:36:52PM +0100, Michal Hocko wrote: > 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. I got Arnaldo to change the pahole output to make this easier. Here's the result: @@ -11,17 +11,15 @@ }; /* 16 8 */ union { long unsigned int counters; /* 24 8 */ + unsigned int active; /* 24 4 */ struct { - union { - atomic_t _mapcount; /* 24 4 */ - unsigned int active; /* 24 4 */ - struct { - unsigned int inuse:16; /* 24:16 4 */ - unsigned int objects:15; /* 24: 1 4 */ - unsigned int frozen:1; /* 24: 0 4 */ - }; /* 24 4 */ - int units; /* 24 4 */ - }; /* 24 4 */ + unsigned int inuse:16; /* 24:16 4 */ + unsigned int objects:15; /* 24: 1 4 */ + unsigned int frozen:1; /* 24: 0 4 */ + }; /* 24 4 */ + int units; /* 24 4 */ + struct { + atomic_t _mapcount; /* 24 4 */ atomic_t _refcount; /* 28 4 */ }; /* 24 8 */ }; /* 24 8 */ It's even more dramatic if you use diff -uw (ignore whitespace): @@ -11,9 +11,6 @@ }; /* 16 8 */ union { long unsigned int counters; /* 24 8 */ - struct { - union { - atomic_t _mapcount; /* 24 4 */ unsigned int active; /* 24 4 */ struct { unsigned int inuse:16; /* 24:16 4 */ @@ -21,7 +18,8 @@ unsigned int frozen:1; /* 24: 0 4 */ }; /* 24 4 */ int units; /* 24 4 */ - }; /* 24 4 */ + struct { + atomic_t _mapcount; /* 24 4 */ atomic_t _refcount; /* 28 4 */ }; /* 24 8 */ }; /* 24 8 */ -- 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>