2011-02-06 15:09:43

by Minchan Kim

[permalink] [raw]
Subject: [PATCH] mm: Add hook of freepage

Recently, "Call the filesystem back whenever a page is removed from
the page cache(6072d13c)" added new freepage hook in page cache
drop function.

So, replace_page_cache_page should call freepage to support
page cleanup to fs.

Cc: Miklos Szeredi <[email protected]>
Cc: Rik van Riel <[email protected]>
Cc: KAMEZAWA Hiroyuki <[email protected]>
Cc: Mel Gorman <[email protected]>
Signed-off-by: Minchan Kim <[email protected]>
---
mm/filemap.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/mm/filemap.c b/mm/filemap.c
index 3c89c96..a25c898 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -436,7 +436,10 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask)
error = radix_tree_preload(gfp_mask & ~__GFP_HIGHMEM);
if (!error) {
struct address_space *mapping = old->mapping;
+ void (*freepage)(struct page *);
+
pgoff_t offset = old->index;
+ freepage = mapping->a_ops->freepage;

page_cache_get(new);
new->mapping = mapping;
@@ -452,6 +455,8 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask)
__inc_zone_page_state(new, NR_SHMEM);
spin_unlock_irq(&mapping->tree_lock);
radix_tree_preload_end();
+ if (freepage)
+ freepage(old);
page_cache_release(old);
mem_cgroup_end_migration(memcg, old, new, true);
} else {
--
1.7.1


2011-02-06 20:21:10

by Rik van Riel

[permalink] [raw]
Subject: Re: [PATCH] mm: Add hook of freepage

On 02/06/2011 10:08 AM, Minchan Kim wrote:
> Recently, "Call the filesystem back whenever a page is removed from
> the page cache(6072d13c)" added new freepage hook in page cache
> drop function.
>
> So, replace_page_cache_page should call freepage to support
> page cleanup to fs.
>
> Cc: Miklos Szeredi<[email protected]>
> Cc: Rik van Riel<[email protected]>
> Cc: KAMEZAWA Hiroyuki<[email protected]>
> Cc: Mel Gorman<[email protected]>
> Signed-off-by: Minchan Kim<[email protected]>

Acked-by: Rik van Riel <[email protected]>

--
All rights reversed

2011-02-07 09:37:09

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [PATCH] mm: Add hook of freepage

On Mon, 2011-02-07 at 00:08 +0900, Minchan Kim wrote:
> Recently, "Call the filesystem back whenever a page is removed from
> the page cache(6072d13c)" added new freepage hook in page cache
> drop function.
>
> So, replace_page_cache_page should call freepage to support
> page cleanup to fs.

Thanks Minchan for fixing this.

Acked-by: Miklos Szeredi <[email protected]>

>
> Cc: Miklos Szeredi <[email protected]>
> Cc: Rik van Riel <[email protected]>
> Cc: KAMEZAWA Hiroyuki <[email protected]>
> Cc: Mel Gorman <[email protected]>
> Signed-off-by: Minchan Kim <[email protected]>
> ---
> mm/filemap.c | 5 +++++
> 1 files changed, 5 insertions(+), 0 deletions(-)
>
> diff --git a/mm/filemap.c b/mm/filemap.c
> index 3c89c96..a25c898 100644
> --- a/mm/filemap.c
> +++ b/mm/filemap.c
> @@ -436,7 +436,10 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask)
> error = radix_tree_preload(gfp_mask & ~__GFP_HIGHMEM);
> if (!error) {
> struct address_space *mapping = old->mapping;
> + void (*freepage)(struct page *);
> +
> pgoff_t offset = old->index;
> + freepage = mapping->a_ops->freepage;
>
> page_cache_get(new);
> new->mapping = mapping;
> @@ -452,6 +455,8 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask)
> __inc_zone_page_state(new, NR_SHMEM);
> spin_unlock_irq(&mapping->tree_lock);
> radix_tree_preload_end();
> + if (freepage)
> + freepage(old);
> page_cache_release(old);
> mem_cgroup_end_migration(memcg, old, new, true);
> } else {

2011-02-08 01:29:21

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] mm: Add hook of freepage

On Mon, 07 Feb 2011 10:37:01 +0100
Miklos Szeredi <[email protected]> wrote:

> On Mon, 2011-02-07 at 00:08 +0900, Minchan Kim wrote:
> > Recently, "Call the filesystem back whenever a page is removed from
> > the page cache(6072d13c)" added new freepage hook in page cache
> > drop function.
> >
> > So, replace_page_cache_page should call freepage to support
> > page cleanup to fs.
>
> Thanks Minchan for fixing this.

What's happening with mm-add-replace_page_cache_page-function.patch,
btw? When last discussed nearly three weeks ago we had identified:

1) remove radix_tree_preload
2) single radix_tree_lookup_slot and replace radix tree slot
3) page accounting optimization if both pages are in same zone.