linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] Change page reference handling semantic of page cache
@ 2011-01-02 15:44 Minchan Kim
  2011-01-02 15:44 ` [PATCH v2 1/7] Introduce delete_from_page_cache Minchan Kim
                   ` (8 more replies)
  0 siblings, 9 replies; 15+ messages in thread
From: Minchan Kim @ 2011-01-02 15:44 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins, Minchan Kim

Now we increases page reference on add_to_page_cache but doesn't decrease it
in remove_from_page_cache. Such asymmetric makes confusing about
page reference so that caller should notice it and comment why they
release page reference. It's not good API.

Long time ago, Hugh tried it[1] but gave up of reason which
reiser4's drop_page had to unlock the page between removing it from
page cache and doing the page_cache_release. But now the situation is
changed. I think at least things in current mainline doesn't have any
obstacles. The problem is fs or somethings out of mainline.
If it has done such thing like reiser4, this patch could be a problem but
they found it when compile time since we remove remove_from_page_cache.

[1] http://lkml.org/lkml/2004/10/24/140

The series configuration is following as. 

[1/7] : This patch introduces new API delete_from_page_cache.
[2,3,4,5/7] : Change remove_from_page_cache with delete_from_page_cache.
Intentionally I divide patch per file since someone might have a concern 
about releasing page reference of delete_from_page_cache in 
somecase (ex, truncate.c)
[6/7] : Remove old API so out of fs can meet compile error when build time
and can notice it.
[7/7] : Change __remove_from_page_cache with __delete_from_page_cache, too.
In this time, I made all-in-one patch because it doesn't change old behavior
so it has no concern. Just clean up patch.

from v1
 - Add Acked-by
 - rebase on mmotm-12-23
  
Minchan Kim (7):
  [1/7] Introduce delete_from_page_cache
  [2/7] fuse: Change remove_from_page_cache
  [3/7] tlbfs: Change remove_from_page_cache
  [4/7] swap: Change remove_from_page_cache
  [5/7] truncate: Change remove_from_page_cache
  [6/7] Good bye remove_from_page_cache
  [7/7] Change __remove_from_page_cache

 fs/fuse/dev.c           |    3 +--
 fs/hugetlbfs/inode.c    |    3 +--
 include/linux/pagemap.h |    4 ++--
 mm/filemap.c            |   22 +++++++++++++++++-----
 mm/memory-failure.c     |    2 +-
 mm/shmem.c              |    3 +--
 mm/truncate.c           |    7 +++----
 mm/vmscan.c             |    2 +-
 8 files changed, 27 insertions(+), 19 deletions(-)


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v2 1/7] Introduce delete_from_page_cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
@ 2011-01-02 15:44 ` Minchan Kim
  2011-01-08 22:16   ` Johannes Weiner
  2011-01-02 15:44 ` [PATCH v2 2/7] fuse: Change remove_from_page_cache Minchan Kim
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 15+ messages in thread
From: Minchan Kim @ 2011-01-02 15:44 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins, Minchan Kim,
	Christoph Hellwig

This function works as just wrapper remove_from_page_cache.
The difference is that it decreases page references in itself.
So caller have to make sure it has a page reference before calling.

This patch is ready for removing remove_from_page_cache.

Cc: Christoph Hellwig <hch@infradead.org>
Acked-by: Hugh Dickins <hughd@google.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
---
 include/linux/pagemap.h |    1 +
 mm/filemap.c            |   17 +++++++++++++++++
 2 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 9c66e99..7a1cb49 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -457,6 +457,7 @@ int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
 				pgoff_t index, gfp_t gfp_mask);
 extern void remove_from_page_cache(struct page *page);
 extern void __remove_from_page_cache(struct page *page);
+extern void delete_from_page_cache(struct page *page);
 
 /*
  * Like add_to_page_cache_locked, but used to add newly allocated pages:
diff --git a/mm/filemap.c b/mm/filemap.c
index 095c393..1ca7475 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -166,6 +166,23 @@ void remove_from_page_cache(struct page *page)
 }
 EXPORT_SYMBOL(remove_from_page_cache);
 
+/**
+ * delete_from_page_cache - delete page from page cache
+ *
+ * @page: the page which the kernel is trying to remove from page cache
+ *
+ * This must be called only on pages that have
+ * been verified to be in the page cache and locked.
+ * It will never put the page into the free list,
+ * the caller has a reference on the page.
+ */
+void delete_from_page_cache(struct page *page)
+{
+	remove_from_page_cache(page);
+	page_cache_release(page);
+}
+EXPORT_SYMBOL(delete_from_page_cache);
+
 static int sync_page(void *word)
 {
 	struct address_space *mapping;
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 2/7] fuse: Change remove_from_page_cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
  2011-01-02 15:44 ` [PATCH v2 1/7] Introduce delete_from_page_cache Minchan Kim
@ 2011-01-02 15:44 ` Minchan Kim
  2011-01-02 15:44 ` [PATCH v2 3/7] tlbfs: " Minchan Kim
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 15+ messages in thread
From: Minchan Kim @ 2011-01-02 15:44 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins, Minchan Kim,
	Miklos Szeredi, fuse-devel

This patch series changes remove_from_page_cache's page ref counting
rule. Page cache ref count is decreased in delete_from_page_cache.
So we don't need decreasing page reference by caller.

Cc: Miklos Szeredi <miklos@szeredi.hu>
Cc: fuse-devel@lists.sourceforge.net
Acked-by: Hugh Dickins <hughd@google.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
---
 fs/fuse/dev.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index cf8d28d..1ef24fb 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -737,8 +737,7 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep)
 	if (WARN_ON(PageMlocked(oldpage)))
 		goto out_fallback_unlock;
 
-	remove_from_page_cache(oldpage);
-	page_cache_release(oldpage);
+	delete_from_page_cache(oldpage);
 
 	err = add_to_page_cache_locked(newpage, mapping, index, GFP_KERNEL);
 	if (err) {
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 3/7] tlbfs: Change remove_from_page_cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
  2011-01-02 15:44 ` [PATCH v2 1/7] Introduce delete_from_page_cache Minchan Kim
  2011-01-02 15:44 ` [PATCH v2 2/7] fuse: Change remove_from_page_cache Minchan Kim
@ 2011-01-02 15:44 ` Minchan Kim
  2011-01-02 15:44 ` [PATCH v2 4/7] swap: " Minchan Kim
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 15+ messages in thread
From: Minchan Kim @ 2011-01-02 15:44 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins, Minchan Kim,
	William Irwin

This patch series changes remove_from_page_cache's page ref counting
rule. Page cache ref count is decreased in delete_from_page_cache.
So we don't need decreasing page reference by caller.

Cc: William Irwin <wli@holomorphy.com>
Acked-by: Hugh Dickins <hughd@google.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
---
 fs/hugetlbfs/inode.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index 9885082..b9eeb1c 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -332,8 +332,7 @@ static void truncate_huge_page(struct page *page)
 {
 	cancel_dirty_page(page, /* No IO accounting for huge pages? */0);
 	ClearPageUptodate(page);
-	remove_from_page_cache(page);
-	put_page(page);
+	delete_from_page_cache(page);
 }
 
 static void truncate_hugepages(struct inode *inode, loff_t lstart)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 4/7] swap: Change remove_from_page_cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
                   ` (2 preceding siblings ...)
  2011-01-02 15:44 ` [PATCH v2 3/7] tlbfs: " Minchan Kim
@ 2011-01-02 15:44 ` Minchan Kim
  2011-01-02 15:44 ` [PATCH v2 5/7] truncate: " Minchan Kim
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 15+ messages in thread
From: Minchan Kim @ 2011-01-02 15:44 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins, Minchan Kim

This patch series changes remove_from_page_cache's page ref counting
rule. Page cache ref count is decreased in delete_from_page_cache.
So we don't need decreasing page reference by caller.

Acked-by:Hugh Dickins <hughd@google.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
---
 mm/shmem.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/mm/shmem.c b/mm/shmem.c
index fa9acc9..079cced 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1081,7 +1081,7 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc)
 	shmem_recalc_inode(inode);
 
 	if (swap.val && add_to_swap_cache(page, swap, GFP_ATOMIC) == 0) {
-		remove_from_page_cache(page);
+		delete_from_page_cache(page);
 		shmem_swp_set(info, entry, swap.val);
 		shmem_swp_unmap(entry);
 		if (list_empty(&info->swaplist))
@@ -1091,7 +1091,6 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc)
 		spin_unlock(&info->lock);
 		swap_shmem_alloc(swap);
 		BUG_ON(page_mapped(page));
-		page_cache_release(page);	/* pagecache ref */
 		swap_writepage(page, wbc);
 		if (inode) {
 			mutex_lock(&shmem_swaplist_mutex);
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 5/7] truncate: Change remove_from_page_cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
                   ` (3 preceding siblings ...)
  2011-01-02 15:44 ` [PATCH v2 4/7] swap: " Minchan Kim
@ 2011-01-02 15:44 ` Minchan Kim
  2011-01-02 15:44 ` [PATCH v2 6/7] Good bye remove_from_page_cache Minchan Kim
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 15+ messages in thread
From: Minchan Kim @ 2011-01-02 15:44 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins, Minchan Kim,
	Dan Magenheimer, Andi Kleen, Nick Piggin, Al Viro

This patch series changes remove_from_page_cache's page ref counting
rule. Page cache ref count is decreased in delete_from_page_cache.
So we don't need decreasing page reference by caller.

Cc: Dan Magenheimer <dan.magenheimer@oracle.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Nick Piggin <npiggin@kernel.dk>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Hugh Dickins <hughd@google.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
---
 mm/truncate.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/mm/truncate.c b/mm/truncate.c
index 9ee5673..85404b0 100644
--- a/mm/truncate.c
+++ b/mm/truncate.c
@@ -108,13 +108,12 @@ truncate_complete_page(struct address_space *mapping, struct page *page)
 	cancel_dirty_page(page, PAGE_CACHE_SIZE);
 
 	clear_page_mlock(page);
-	remove_from_page_cache(page);
+	delete_from_page_cache(page);
 	ClearPageMappedToDisk(page);
-	/* this must be after the remove_from_page_cache which
+	/* this must be after the delete_from_page_cache which
 	 * calls cleancache_put_page (and note page->mapping is now NULL)
 	 */
 	cleancache_flush_page(mapping, page);
-	page_cache_release(page);	/* pagecache ref */
 	return 0;
 }
 
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 6/7] Good bye remove_from_page_cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
                   ` (4 preceding siblings ...)
  2011-01-02 15:44 ` [PATCH v2 5/7] truncate: " Minchan Kim
@ 2011-01-02 15:44 ` Minchan Kim
  2011-01-04  1:44   ` KAMEZAWA Hiroyuki
  2011-01-02 15:44 ` [PATCH v2 7/7] Change __remove_from_page_cache Minchan Kim
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 15+ messages in thread
From: Minchan Kim @ 2011-01-02 15:44 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins, Minchan Kim,
	Christoph Hellwig

Now delete_from_page_cache replaces remove_from_page_cache.
So we remove remove_from_page_cache so fs or something out of
mainline will notice it when compile time and can fix it.

Cc: Christoph Hellwig <hch@infradead.org>
Acked-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
---
 include/linux/pagemap.h |    1 -
 mm/filemap.c            |   27 +++++++++++----------------
 2 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 7a1cb49..7bf6587 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -455,7 +455,6 @@ int add_to_page_cache_locked(struct page *page, struct address_space *mapping,
 				pgoff_t index, gfp_t gfp_mask);
 int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
 				pgoff_t index, gfp_t gfp_mask);
-extern void remove_from_page_cache(struct page *page);
 extern void __remove_from_page_cache(struct page *page);
 extern void delete_from_page_cache(struct page *page);
 
diff --git a/mm/filemap.c b/mm/filemap.c
index 1ca7475..a4c43f7 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -148,7 +148,17 @@ void __remove_from_page_cache(struct page *page)
 	}
 }
 
-void remove_from_page_cache(struct page *page)
+/**
+ * delete_from_page_cache - delete page from page cache
+ *
+ * @page: the page which the kernel is trying to remove from page cache
+ *
+ * This must be called only on pages that have
+ * been verified to be in the page cache and locked.
+ * It will never put the page into the free list,
+ * the caller has a reference on the page.
+ */
+void delete_from_page_cache(struct page *page)
 {
 	struct address_space *mapping = page->mapping;
 	void (*freepage)(struct page *);
@@ -163,22 +173,7 @@ void remove_from_page_cache(struct page *page)
 
 	if (freepage)
 		freepage(page);
-}
-EXPORT_SYMBOL(remove_from_page_cache);
 
-/**
- * delete_from_page_cache - delete page from page cache
- *
- * @page: the page which the kernel is trying to remove from page cache
- *
- * This must be called only on pages that have
- * been verified to be in the page cache and locked.
- * It will never put the page into the free list,
- * the caller has a reference on the page.
- */
-void delete_from_page_cache(struct page *page)
-{
-	remove_from_page_cache(page);
 	page_cache_release(page);
 }
 EXPORT_SYMBOL(delete_from_page_cache);
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 7/7] Change __remove_from_page_cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
                   ` (5 preceding siblings ...)
  2011-01-02 15:44 ` [PATCH v2 6/7] Good bye remove_from_page_cache Minchan Kim
@ 2011-01-02 15:44 ` Minchan Kim
  2011-01-04  1:45   ` KAMEZAWA Hiroyuki
  2011-01-04 16:18 ` [PATCH v2 0/7] Change page reference handling semantic of page cache Balbir Singh
  2011-01-05  8:52 ` KOSAKI Motohiro
  8 siblings, 1 reply; 15+ messages in thread
From: Minchan Kim @ 2011-01-02 15:44 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins, Minchan Kim,
	Christoph Hellwig

Now we renamed remove_from_page_cache with delete_from_page_cache.
As consistency of __remove_from_swap_cache and remove_from_swap_cache,
We change internal page cache handling function name, too.

Cc: Christoph Hellwig <hch@infradead.org>
Acked-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
---
 include/linux/pagemap.h |    2 +-
 mm/filemap.c            |    6 +++---
 mm/memory-failure.c     |    2 +-
 mm/truncate.c           |    2 +-
 mm/vmscan.c             |    2 +-
 5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 7bf6587..b5b21d8 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -455,7 +455,7 @@ int add_to_page_cache_locked(struct page *page, struct address_space *mapping,
 				pgoff_t index, gfp_t gfp_mask);
 int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
 				pgoff_t index, gfp_t gfp_mask);
-extern void __remove_from_page_cache(struct page *page);
+extern void __delete_from_page_cache(struct page *page);
 extern void delete_from_page_cache(struct page *page);
 
 /*
diff --git a/mm/filemap.c b/mm/filemap.c
index a4c43f7..9776166 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -109,11 +109,11 @@
  */
 
 /*
- * Remove a page from the page cache and free it. Caller has to make
+ * Delete a page from the page cache and free it. Caller has to make
  * sure the page is locked and that nobody else uses it - or that usage
  * is safe.  The caller must hold the mapping's tree_lock.
  */
-void __remove_from_page_cache(struct page *page)
+void __delete_from_page_cache(struct page *page)
 {
 	struct address_space *mapping = page->mapping;
 
@@ -167,7 +167,7 @@ void delete_from_page_cache(struct page *page)
 
 	freepage = mapping->a_ops->freepage;
 	spin_lock_irq(&mapping->tree_lock);
-	__remove_from_page_cache(page);
+	__delete_from_page_cache(page);
 	spin_unlock_irq(&mapping->tree_lock);
 	mem_cgroup_uncharge_cache_page(page);
 
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 548fbd7..50ed16f 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -1084,7 +1084,7 @@ int __memory_failure(unsigned long pfn, int trapno, int flags)
 
 	/*
 	 * Now take care of user space mappings.
-	 * Abort on fail: __remove_from_page_cache() assumes unmapped page.
+	 * Abort on fail: __delete_from_page_cache() assumes unmapped page.
 	 */
 	if (hwpoison_user_mappings(p, pfn, trapno) != SWAP_SUCCESS) {
 		printk(KERN_ERR "MCE %#lx: cannot unmap page, give up\n", pfn);
diff --git a/mm/truncate.c b/mm/truncate.c
index 85404b0..ef97cd2 100644
--- a/mm/truncate.c
+++ b/mm/truncate.c
@@ -402,7 +402,7 @@ invalidate_complete_page2(struct address_space *mapping, struct page *page)
 
 	clear_page_mlock(page);
 	BUG_ON(page_has_private(page));
-	__remove_from_page_cache(page);
+	__delete_from_page_cache(page);
 	spin_unlock_irq(&mapping->tree_lock);
 	mem_cgroup_uncharge_cache_page(page);
 
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 47a5096..bdb867f 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -515,7 +515,7 @@ static int __remove_mapping(struct address_space *mapping, struct page *page)
 
 		freepage = mapping->a_ops->freepage;
 
-		__remove_from_page_cache(page);
+		__delete_from_page_cache(page);
 		spin_unlock_irq(&mapping->tree_lock);
 		mem_cgroup_uncharge_cache_page(page);
 
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 6/7] Good bye remove_from_page_cache
  2011-01-02 15:44 ` [PATCH v2 6/7] Good bye remove_from_page_cache Minchan Kim
@ 2011-01-04  1:44   ` KAMEZAWA Hiroyuki
  0 siblings, 0 replies; 15+ messages in thread
From: KAMEZAWA Hiroyuki @ 2011-01-04  1:44 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Andrew Morton, linux-mm, LKML, Hugh Dickins, Christoph Hellwig

On Mon,  3 Jan 2011 00:44:35 +0900
Minchan Kim <minchan.kim@gmail.com> wrote:

> Now delete_from_page_cache replaces remove_from_page_cache.
> So we remove remove_from_page_cache so fs or something out of
> mainline will notice it when compile time and can fix it.
> 
> Cc: Christoph Hellwig <hch@infradead.org>
> Acked-by: Hugh Dickins <hughd@google.com>
> Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 7/7] Change __remove_from_page_cache
  2011-01-02 15:44 ` [PATCH v2 7/7] Change __remove_from_page_cache Minchan Kim
@ 2011-01-04  1:45   ` KAMEZAWA Hiroyuki
  0 siblings, 0 replies; 15+ messages in thread
From: KAMEZAWA Hiroyuki @ 2011-01-04  1:45 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Andrew Morton, linux-mm, LKML, Hugh Dickins, Christoph Hellwig

On Mon,  3 Jan 2011 00:44:36 +0900
Minchan Kim <minchan.kim@gmail.com> wrote:

> Now we renamed remove_from_page_cache with delete_from_page_cache.
> As consistency of __remove_from_swap_cache and remove_from_swap_cache,
> We change internal page cache handling function name, too.
> 
> Cc: Christoph Hellwig <hch@infradead.org>
> Acked-by: Hugh Dickins <hughd@google.com>
> Signed-off-by: Minchan Kim <minchan.kim@gmail.com>

Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 0/7] Change page reference handling semantic of page cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
                   ` (6 preceding siblings ...)
  2011-01-02 15:44 ` [PATCH v2 7/7] Change __remove_from_page_cache Minchan Kim
@ 2011-01-04 16:18 ` Balbir Singh
  2011-01-05  4:53   ` Minchan Kim
  2011-01-05  8:52 ` KOSAKI Motohiro
  8 siblings, 1 reply; 15+ messages in thread
From: Balbir Singh @ 2011-01-04 16:18 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Andrew Morton, linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins

* MinChan Kim <minchan.kim@gmail.com> [2011-01-03 00:44:29]:

> Now we increases page reference on add_to_page_cache but doesn't decrease it
> in remove_from_page_cache. Such asymmetric makes confusing about
> page reference so that caller should notice it and comment why they
> release page reference. It's not good API.
> 
> Long time ago, Hugh tried it[1] but gave up of reason which
> reiser4's drop_page had to unlock the page between removing it from
> page cache and doing the page_cache_release. But now the situation is
> changed. I think at least things in current mainline doesn't have any
> obstacles. The problem is fs or somethings out of mainline.
> If it has done such thing like reiser4, this patch could be a problem but
> they found it when compile time since we remove remove_from_page_cache.
> 
> [1] http://lkml.org/lkml/2004/10/24/140
> 
> The series configuration is following as. 
> 
> [1/7] : This patch introduces new API delete_from_page_cache.
> [2,3,4,5/7] : Change remove_from_page_cache with delete_from_page_cache.
> Intentionally I divide patch per file since someone might have a concern 
> about releasing page reference of delete_from_page_cache in 
> somecase (ex, truncate.c)
> [6/7] : Remove old API so out of fs can meet compile error when build time
> and can notice it.
> [7/7] : Change __remove_from_page_cache with __delete_from_page_cache, too.
> In this time, I made all-in-one patch because it doesn't change old behavior
> so it has no concern. Just clean up patch.
>

Could you please describe any testing done, was it mostly functional? 

-- 
	Three Cheers,
	Balbir

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 0/7] Change page reference handling semantic of page cache
  2011-01-04 16:18 ` [PATCH v2 0/7] Change page reference handling semantic of page cache Balbir Singh
@ 2011-01-05  4:53   ` Minchan Kim
  0 siblings, 0 replies; 15+ messages in thread
From: Minchan Kim @ 2011-01-05  4:53 UTC (permalink / raw)
  To: balbir; +Cc: Andrew Morton, linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins

Hi Balbir,

On Wed, Jan 5, 2011 at 1:18 AM, Balbir Singh <balbir@linux.vnet.ibm.com> wrote:
> * MinChan Kim <minchan.kim@gmail.com> [2011-01-03 00:44:29]:
>
>> Now we increases page reference on add_to_page_cache but doesn't decrease it
>> in remove_from_page_cache. Such asymmetric makes confusing about
>> page reference so that caller should notice it and comment why they
>> release page reference. It's not good API.
>>
>> Long time ago, Hugh tried it[1] but gave up of reason which
>> reiser4's drop_page had to unlock the page between removing it from
>> page cache and doing the page_cache_release. But now the situation is
>> changed. I think at least things in current mainline doesn't have any
>> obstacles. The problem is fs or somethings out of mainline.
>> If it has done such thing like reiser4, this patch could be a problem but
>> they found it when compile time since we remove remove_from_page_cache.
>>
>> [1] http://lkml.org/lkml/2004/10/24/140
>>
>> The series configuration is following as.
>>
>> [1/7] : This patch introduces new API delete_from_page_cache.
>> [2,3,4,5/7] : Change remove_from_page_cache with delete_from_page_cache.
>> Intentionally I divide patch per file since someone might have a concern
>> about releasing page reference of delete_from_page_cache in
>> somecase (ex, truncate.c)
>> [6/7] : Remove old API so out of fs can meet compile error when build time
>> and can notice it.
>> [7/7] : Change __remove_from_page_cache with __delete_from_page_cache, too.
>> In this time, I made all-in-one patch because it doesn't change old behavior
>> so it has no concern. Just clean up patch.
>>
>
> Could you please describe any testing done, was it mostly functional?

I didn't test it since I think it's okay as a code review.
Do you find any faults or guess it?
Anyway, I should have tested it before sending patches.

we are now -rc8 and Andrew doesn't held a patch.
So I will test it until he grab a patch.

Thanks,

>
> --
>        Three Cheers,
>        Balbir
>



-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 0/7] Change page reference handling semantic of page cache
  2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
                   ` (7 preceding siblings ...)
  2011-01-04 16:18 ` [PATCH v2 0/7] Change page reference handling semantic of page cache Balbir Singh
@ 2011-01-05  8:52 ` KOSAKI Motohiro
  8 siblings, 0 replies; 15+ messages in thread
From: KOSAKI Motohiro @ 2011-01-05  8:52 UTC (permalink / raw)
  To: Minchan Kim
  Cc: kosaki.motohiro, Andrew Morton, linux-mm, LKML,
	KAMEZAWA Hiroyuki, Hugh Dickins

> The series configuration is following as. 
> 
> [1/7] : This patch introduces new API delete_from_page_cache.
> [2,3,4,5/7] : Change remove_from_page_cache with delete_from_page_cache.
> Intentionally I divide patch per file since someone might have a concern 
> about releasing page reference of delete_from_page_cache in 
> somecase (ex, truncate.c)
> [6/7] : Remove old API so out of fs can meet compile error when build time
> and can notice it.
> [7/7] : Change __remove_from_page_cache with __delete_from_page_cache, too.
> In this time, I made all-in-one patch because it doesn't change old behavior
> so it has no concern. Just clean up patch.

All of them,
	Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>




^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/7] Introduce delete_from_page_cache
  2011-01-02 15:44 ` [PATCH v2 1/7] Introduce delete_from_page_cache Minchan Kim
@ 2011-01-08 22:16   ` Johannes Weiner
  2011-01-10 15:39     ` Minchan Kim
  0 siblings, 1 reply; 15+ messages in thread
From: Johannes Weiner @ 2011-01-08 22:16 UTC (permalink / raw)
  To: Minchan Kim
  Cc: Andrew Morton, linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins,
	Christoph Hellwig

On Mon, Jan 03, 2011 at 12:44:30AM +0900, Minchan Kim wrote:
> This function works as just wrapper remove_from_page_cache.
> The difference is that it decreases page references in itself.
> So caller have to make sure it has a page reference before calling.
> 
> This patch is ready for removing remove_from_page_cache.
> 
> Cc: Christoph Hellwig <hch@infradead.org>
> Acked-by: Hugh Dickins <hughd@google.com>
> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
> Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
> ---
>  include/linux/pagemap.h |    1 +
>  mm/filemap.c            |   17 +++++++++++++++++
>  2 files changed, 18 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
> index 9c66e99..7a1cb49 100644
> --- a/include/linux/pagemap.h
> +++ b/include/linux/pagemap.h
> @@ -457,6 +457,7 @@ int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
>  				pgoff_t index, gfp_t gfp_mask);
>  extern void remove_from_page_cache(struct page *page);
>  extern void __remove_from_page_cache(struct page *page);
> +extern void delete_from_page_cache(struct page *page);
>  
>  /*
>   * Like add_to_page_cache_locked, but used to add newly allocated pages:
> diff --git a/mm/filemap.c b/mm/filemap.c
> index 095c393..1ca7475 100644
> --- a/mm/filemap.c
> +++ b/mm/filemap.c
> @@ -166,6 +166,23 @@ void remove_from_page_cache(struct page *page)
>  }
>  EXPORT_SYMBOL(remove_from_page_cache);
>  
> +/**
> + * delete_from_page_cache - delete page from page cache
> + *

This empty line is invalid kerneldoc, the argument descriptions must
follow the short function description line immediately.

Otherwise,
Reviewed-by: Johannes Weiner <hannes@cmpxchg.org>

> + * @page: the page which the kernel is trying to remove from page cache
> + *
> + * This must be called only on pages that have
> + * been verified to be in the page cache and locked.
> + * It will never put the page into the free list,
> + * the caller has a reference on the page.
> + */
> +void delete_from_page_cache(struct page *page)
> +{
> +	remove_from_page_cache(page);
> +	page_cache_release(page);
> +}
> +EXPORT_SYMBOL(delete_from_page_cache);
> +
>  static int sync_page(void *word)
>  {
>  	struct address_space *mapping;

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/7] Introduce delete_from_page_cache
  2011-01-08 22:16   ` Johannes Weiner
@ 2011-01-10 15:39     ` Minchan Kim
  0 siblings, 0 replies; 15+ messages in thread
From: Minchan Kim @ 2011-01-10 15:39 UTC (permalink / raw)
  To: Johannes Weiner
  Cc: Andrew Morton, linux-mm, LKML, KAMEZAWA Hiroyuki, Hugh Dickins,
	Christoph Hellwig

On Sun, Jan 9, 2011 at 7:16 AM, Johannes Weiner <hannes@cmpxchg.org> wrote:
> On Mon, Jan 03, 2011 at 12:44:30AM +0900, Minchan Kim wrote:
>> This function works as just wrapper remove_from_page_cache.
>> The difference is that it decreases page references in itself.
>> So caller have to make sure it has a page reference before calling.
>>
>> This patch is ready for removing remove_from_page_cache.
>>
>> Cc: Christoph Hellwig <hch@infradead.org>
>> Acked-by: Hugh Dickins <hughd@google.com>
>> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
>> Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
>> ---
>>  include/linux/pagemap.h |    1 +
>>  mm/filemap.c            |   17 +++++++++++++++++
>>  2 files changed, 18 insertions(+), 0 deletions(-)
>>
>> diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
>> index 9c66e99..7a1cb49 100644
>> --- a/include/linux/pagemap.h
>> +++ b/include/linux/pagemap.h
>> @@ -457,6 +457,7 @@ int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
>>                               pgoff_t index, gfp_t gfp_mask);
>>  extern void remove_from_page_cache(struct page *page);
>>  extern void __remove_from_page_cache(struct page *page);
>> +extern void delete_from_page_cache(struct page *page);
>>
>>  /*
>>   * Like add_to_page_cache_locked, but used to add newly allocated pages:
>> diff --git a/mm/filemap.c b/mm/filemap.c
>> index 095c393..1ca7475 100644
>> --- a/mm/filemap.c
>> +++ b/mm/filemap.c
>> @@ -166,6 +166,23 @@ void remove_from_page_cache(struct page *page)
>>  }
>>  EXPORT_SYMBOL(remove_from_page_cache);
>>
>> +/**
>> + * delete_from_page_cache - delete page from page cache
>> + *
>
> This empty line is invalid kerneldoc, the argument descriptions must
> follow the short function description line immediately.

Thanks, Hannes.
Will fix.

>
> Otherwise,
> Reviewed-by: Johannes Weiner <hannes@cmpxchg.org>
>


-- 
Kind regards,
Minchan Kim

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2011-01-10 15:39 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-02 15:44 [PATCH v2 0/7] Change page reference handling semantic of page cache Minchan Kim
2011-01-02 15:44 ` [PATCH v2 1/7] Introduce delete_from_page_cache Minchan Kim
2011-01-08 22:16   ` Johannes Weiner
2011-01-10 15:39     ` Minchan Kim
2011-01-02 15:44 ` [PATCH v2 2/7] fuse: Change remove_from_page_cache Minchan Kim
2011-01-02 15:44 ` [PATCH v2 3/7] tlbfs: " Minchan Kim
2011-01-02 15:44 ` [PATCH v2 4/7] swap: " Minchan Kim
2011-01-02 15:44 ` [PATCH v2 5/7] truncate: " Minchan Kim
2011-01-02 15:44 ` [PATCH v2 6/7] Good bye remove_from_page_cache Minchan Kim
2011-01-04  1:44   ` KAMEZAWA Hiroyuki
2011-01-02 15:44 ` [PATCH v2 7/7] Change __remove_from_page_cache Minchan Kim
2011-01-04  1:45   ` KAMEZAWA Hiroyuki
2011-01-04 16:18 ` [PATCH v2 0/7] Change page reference handling semantic of page cache Balbir Singh
2011-01-05  4:53   ` Minchan Kim
2011-01-05  8:52 ` KOSAKI Motohiro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).