mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -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
10
mm/migrate.c
10
mm/migrate.c
|
|
@ -250,7 +250,7 @@ out:
|
|||
* The number of remaining references must be:
|
||||
* 1 for anonymous pages without a mapping
|
||||
* 2 for pages with a mapping
|
||||
* 3 for pages with a mapping and PagePrivate set.
|
||||
* 3 for pages with a mapping and PagePrivate/PagePrivate2 set.
|
||||
*/
|
||||
static int migrate_page_move_mapping(struct address_space *mapping,
|
||||
struct page *newpage, struct page *page)
|
||||
|
|
@ -270,7 +270,7 @@ static int migrate_page_move_mapping(struct address_space *mapping,
|
|||
pslot = radix_tree_lookup_slot(&mapping->page_tree,
|
||||
page_index(page));
|
||||
|
||||
expected_count = 2 + !!PagePrivate(page);
|
||||
expected_count = 2 + !!page_has_private(page);
|
||||
if (page_count(page) != expected_count ||
|
||||
(struct page *)radix_tree_deref_slot(pslot) != page) {
|
||||
spin_unlock_irq(&mapping->tree_lock);
|
||||
|
|
@ -386,7 +386,7 @@ EXPORT_SYMBOL(fail_migrate_page);
|
|||
|
||||
/*
|
||||
* Common logic to directly migrate a single page suitable for
|
||||
* pages that do not use PagePrivate.
|
||||
* pages that do not use PagePrivate/PagePrivate2.
|
||||
*
|
||||
* Pages are locked upon entry and exit.
|
||||
*/
|
||||
|
|
@ -522,7 +522,7 @@ static int fallback_migrate_page(struct address_space *mapping,
|
|||
* Buffers may be managed in a filesystem specific way.
|
||||
* We must have no buffers or drop them.
|
||||
*/
|
||||
if (PagePrivate(page) &&
|
||||
if (page_has_private(page) &&
|
||||
!try_to_release_page(page, GFP_KERNEL))
|
||||
return -EAGAIN;
|
||||
|
||||
|
|
@ -655,7 +655,7 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
|
|||
* free the metadata, so the page can be freed.
|
||||
*/
|
||||
if (!page->mapping) {
|
||||
if (!PageAnon(page) && PagePrivate(page)) {
|
||||
if (!PageAnon(page) && page_has_private(page)) {
|
||||
/*
|
||||
* Go direct to try_to_free_buffers() here because
|
||||
* a) that's what try_to_release_page() would do anyway
|
||||
|
|
|
|||
Loading…
Reference in a new issue