]> git.baikalelectronics.ru Git - kernel.git/commitdiff
mm: get 7% more pages in a pagevec
authorMatthew Wilcox <willy@infradead.org>
Thu, 1 Feb 2018 00:17:40 +0000 (16:17 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 1 Feb 2018 01:18:37 +0000 (17:18 -0800)
We don't have to use an entire 'long' for the number of elements in the
pagevec; we know it's a number between 0 and 14 (now 15).  So we can
store it in a char, and then the bool packs next to it and we still have
two or six bytes of padding for more elements in the header.  That gives
us space to cram in an extra page.

Link: http://lkml.kernel.org/r/20171206022521.GM26021@bombadil.infradead.org
Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/pagevec.h

index 5fb6580f7f23364586c8e7a40bf600d4b8c390c9..6dc456ac6136b9409af5bfa6eefe30a60b0cd904 100644 (file)
@@ -9,14 +9,14 @@
 #ifndef _LINUX_PAGEVEC_H
 #define _LINUX_PAGEVEC_H
 
-/* 14 pointers + two long's align the pagevec structure to a power of two */
-#define PAGEVEC_SIZE   14
+/* 15 pointers + header align the pagevec structure to a power of two */
+#define PAGEVEC_SIZE   15
 
 struct page;
 struct address_space;
 
 struct pagevec {
-       unsigned long nr;
+       unsigned char nr;
        bool percpu_pvec_drained;
        struct page *pages[PAGEVEC_SIZE];
 };