mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
FS-Cache: Recruit a page flags for cache management
Recruit a page flag to aid in cache management. The following extra flag is
defined:
(1) PG_fscache (PG_private_2)
The marked page is backed by a local cache and is pinning resources in the
cache driver.
If PG_fscache is set, then things that checked for PG_private will now also
check for that. This includes things like truncation and page invalidation.
The function page_has_private() had been added to make the checks for both
PG_private and PG_private_2 at the same time.
Signed-off-by: David Howells <[email protected]>
Acked-by: Steve Dickson <[email protected]>
Acked-by: Trond Myklebust <[email protected]>
Acked-by: Rik van Riel <[email protected]>
Acked-by: Al Viro <[email protected]>
Tested-by: Daire Byrne <[email protected]>
This commit is contained in:
parent
03fb3d2af9
commit
266cf658ef
8 changed files with 58 additions and 25 deletions
|
|
@ -50,7 +50,7 @@ void do_invalidatepage(struct page *page, unsigned long offset)
|
|||
static inline void truncate_partial_page(struct page *page, unsigned partial)
|
||||
{
|
||||
zero_user_segment(page, partial, PAGE_CACHE_SIZE);
|
||||
if (PagePrivate(page))
|
||||
if (page_has_private(page))
|
||||
do_invalidatepage(page, partial);
|
||||
}
|
||||
|
||||
|
|
@ -99,7 +99,7 @@ truncate_complete_page(struct address_space *mapping, struct page *page)
|
|||
if (page->mapping != mapping)
|
||||
return;
|
||||
|
||||
if (PagePrivate(page))
|
||||
if (page_has_private(page))
|
||||
do_invalidatepage(page, 0);
|
||||
|
||||
cancel_dirty_page(page, PAGE_CACHE_SIZE);
|
||||
|
|
@ -126,7 +126,7 @@ invalidate_complete_page(struct address_space *mapping, struct page *page)
|
|||
if (page->mapping != mapping)
|
||||
return 0;
|
||||
|
||||
if (PagePrivate(page) && !try_to_release_page(page, 0))
|
||||
if (page_has_private(page) && !try_to_release_page(page, 0))
|
||||
return 0;
|
||||
|
||||
clear_page_mlock(page);
|
||||
|
|
@ -348,7 +348,7 @@ invalidate_complete_page2(struct address_space *mapping, struct page *page)
|
|||
if (page->mapping != mapping)
|
||||
return 0;
|
||||
|
||||
if (PagePrivate(page) && !try_to_release_page(page, GFP_KERNEL))
|
||||
if (page_has_private(page) && !try_to_release_page(page, GFP_KERNEL))
|
||||
return 0;
|
||||
|
||||
spin_lock_irq(&mapping->tree_lock);
|
||||
|
|
@ -356,7 +356,7 @@ invalidate_complete_page2(struct address_space *mapping, struct page *page)
|
|||
goto failed;
|
||||
|
||||
clear_page_mlock(page);
|
||||
BUG_ON(PagePrivate(page));
|
||||
BUG_ON(page_has_private(page));
|
||||
__remove_from_page_cache(page);
|
||||
spin_unlock_irq(&mapping->tree_lock);
|
||||
page_cache_release(page); /* pagecache ref */
|
||||
|
|
|
|||
Loading…
Reference in a new issue