mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 08:03:01 +09:00
mm: free up a word in the first tail page
Store the folio order in the low byte of the flags word in the first tail page. This frees up the word that was being used to store the order and dtor bytes previously. Link: https://lkml.kernel.org/r/20230816151201.3655946-11-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: David Hildenbrand <david@redhat.com> Cc: Jens Axboe <axboe@kernel.dk> Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com> Cc: Yanteng Si <siyanteng@loongson.cn> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
c704ae9797
commit
ebc1baf5c9
@@ -1000,7 +1000,7 @@ struct inode;
|
||||
* compound_order() can be called without holding a reference, which means
|
||||
* that niceties like page_folio() don't work. These callers should be
|
||||
* prepared to handle wild return values. For example, PG_head may be
|
||||
* set before _folio_order is initialised, or this may be a tail page.
|
||||
* set before the order is initialised, or this may be a tail page.
|
||||
* See compaction.c for some good examples.
|
||||
*/
|
||||
static inline unsigned int compound_order(struct page *page)
|
||||
@@ -1009,7 +1009,7 @@ static inline unsigned int compound_order(struct page *page)
|
||||
|
||||
if (!test_bit(PG_head, &folio->flags))
|
||||
return 0;
|
||||
return folio->_folio_order;
|
||||
return folio->_flags_1 & 0xff;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1025,7 +1025,7 @@ static inline unsigned int folio_order(struct folio *folio)
|
||||
{
|
||||
if (!folio_test_large(folio))
|
||||
return 0;
|
||||
return folio->_folio_order;
|
||||
return folio->_flags_1 & 0xff;
|
||||
}
|
||||
|
||||
#include <linux/huge_mm.h>
|
||||
@@ -1996,7 +1996,7 @@ static inline long folio_nr_pages(struct folio *folio)
|
||||
#ifdef CONFIG_64BIT
|
||||
return folio->_folio_nr_pages;
|
||||
#else
|
||||
return 1L << folio->_folio_order;
|
||||
return 1L << (folio->_flags_1 & 0xff);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -2014,7 +2014,7 @@ static inline unsigned long compound_nr(struct page *page)
|
||||
#ifdef CONFIG_64BIT
|
||||
return folio->_folio_nr_pages;
|
||||
#else
|
||||
return 1L << folio->_folio_order;
|
||||
return 1L << (folio->_flags_1 & 0xff);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user