mm: add replace_page_cache_page() function
authorMiklos Szeredi <mszeredi@suse.cz>
Tue, 22 Mar 2011 23:30:52 +0000 (16:30 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Mar 2011 00:44:02 +0000 (17:44 -0700)
commitef6a3c63112e865d632ff7c478ba7c7160cad0d1
treed0bd3ee2b79674e22b8dd3f318814cd4789697b8
parent318b275fbca1ab9ec0862de71420e0e92c3d1aa7
mm: add replace_page_cache_page() function

This function basically does:

     remove_from_page_cache(old);
     page_cache_release(old);
     add_to_page_cache_locked(new);

Except it does this atomically, so there's no possibility for the "add" to
fail because of a race.

If memory cgroups are enabled, then the memory cgroup charge is also moved
from the old page to the new.

This function is currently used by fuse to move pages into the page cache
on read, instead of copying the page contents.

[minchan.kim@gmail.com: add freepage() hook to replace_page_cache_page()]
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Acked-by: Rik van Riel <riel@redhat.com>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/fuse/dev.c
include/linux/memcontrol.h
include/linux/pagemap.h
mm/filemap.c
mm/memcontrol.c
mm/migrate.c