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)
|
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
|
* Must ensure that the data we read out of the page is loaded
|
||||||
* _after_ we've loaded page->flags to check for PageUptodate.
|
* _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)
|
static inline void __SetPageUptodate(struct page *page)
|
||||||
{
|
{
|
||||||
|
VM_BUG_ON_PAGE(PageTail(page), page);
|
||||||
smp_wmb();
|
smp_wmb();
|
||||||
__set_bit(PG_uptodate, &page->flags);
|
__set_bit(PG_uptodate, &page->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void SetPageUptodate(struct page *page)
|
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,
|
* Memory barrier must be issued before setting the PG_uptodate bit,
|
||||||
* so that all previous stores issued in order to bring the page
|
* 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);
|
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_clear_page_writeback(struct page *page);
|
||||||
int __test_set_page_writeback(struct page *page, bool keep_write);
|
int __test_set_page_writeback(struct page *page, bool keep_write);
|
||||||
|
Loading…
Reference in New Issue
Block a user