page-flags: define PG_uptodate behavior on compound pages
We use PG_uptodate on head pages on transparent huge page. Let's use PF_NO_TAIL. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Mel Gorman <mgorman@suse.de> Cc: Rik van Riel <riel@redhat.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Christoph Lameter <cl@linux.com> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> Cc: Steve Capper <steve.capper@linaro.org> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@suse.cz> Cc: Jerome Marchand <jmarchan@redhat.com> Cc: Jérôme Glisse <jglisse@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b9d418170a
commit
d2998c4de2
@ -404,8 +404,9 @@ u64 stable_page_flags(struct page *page);
|
||||
|
||||
static inline int PageUptodate(struct page *page)
|
||||
{
|
||||
int ret = test_bit(PG_uptodate, &(page)->flags);
|
||||
|
||||
int ret;
|
||||
page = compound_head(page);
|
||||
ret = test_bit(PG_uptodate, &(page)->flags);
|
||||
/*
|
||||
* Must ensure that the data we read out of the page is loaded
|
||||
* _after_ we've loaded page->flags to check for PageUptodate.
|
||||
@ -422,12 +423,14 @@ static inline int PageUptodate(struct page *page)
|
||||
|
||||
static inline void __SetPageUptodate(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(PageTail(page), page);
|
||||
smp_wmb();
|
||||
__set_bit(PG_uptodate, &page->flags);
|
||||
}
|
||||
|
||||
static inline void SetPageUptodate(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(PageTail(page), page);
|
||||
/*
|
||||
* Memory barrier must be issued before setting the PG_uptodate bit,
|
||||
* so that all previous stores issued in order to bring the page
|
||||
@ -437,7 +440,7 @@ static inline void SetPageUptodate(struct page *page)
|
||||
set_bit(PG_uptodate, &page->flags);
|
||||
}
|
||||
|
||||
CLEARPAGEFLAG(Uptodate, uptodate, PF_ANY)
|
||||
CLEARPAGEFLAG(Uptodate, uptodate, PF_NO_TAIL)
|
||||
|
||||
int test_clear_page_writeback(struct page *page);
|
||||
int __test_set_page_writeback(struct page *page, bool keep_write);
|
||||
|
Loading…
Reference in New Issue
Block a user