mm: move _refcount out of struct page union
authorMatthew Wilcox <mawilcox@microsoft.com>
Fri, 8 Jun 2018 00:08:35 +0000 (17:08 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Jun 2018 00:34:37 +0000 (17:34 -0700)
Keeping the refcount in the union only encourages people to put something
else in the union which will overlap with _refcount and eventually explode
messily.  pahole reports no fields change location.

Link: http://lkml.kernel.org/r/20180518194519.3820-7-willy@infradead.org
Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Jérôme Glisse <jglisse@redhat.com>
Cc: Lai Jiangshan <jiangshanlai@gmail.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/mm_types.h

index bcc5ee8b7b073bd36419396d2a88b963c65874d0..0b0c0e224011b84fed1355cbd1762cffe790e91c 100644 (file)
@@ -113,7 +113,13 @@ struct page {
                };
        };
 
-       union {
+       union {         /* This union is 4 bytes in size. */
+               /*
+                * If the page can be mapped to userspace, encodes the number
+                * of times this page is referenced by a page table.
+                */
+               atomic_t _mapcount;
+
                /*
                 * If the page is neither PageSlab nor mappable to userspace,
                 * the value stored here may help determine what this page
@@ -124,22 +130,11 @@ struct page {
 
                unsigned int active;            /* SLAB */
                int units;                      /* SLOB */
-
-               struct {                        /* Page cache */
-                       /*
-                        * Count of ptes mapped in mms, to show when
-                        * page is mapped & limit reverse map searches.
-                        */
-                       atomic_t _mapcount;
-
-                       /*
-                        * Usage count, *USE WRAPPER FUNCTION* when manual
-                        * accounting. See page_ref.h
-                        */
-                       atomic_t _refcount;
-               };
        };
 
+       /* Usage count. *DO NOT USE DIRECTLY*. See page_ref.h */
+       atomic_t _refcount;
+
        /*
         * WARNING: bit 0 of the first word encode PageTail(). That means
         * the rest users of the storage space MUST NOT use the bit to