]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commit4ccdc2360930283160152ceafce00ea084eb5648
treed0bd3ee2b79674e22b8dd3f318814cd4789697b8
parentcf646fbe90247a04f9b488478cb00ed8267bc194
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