[1/8] cifs: fix page refcount leak

Submitted by Jeff Layton on June 1, 2010, 2:54 p.m.

Details

Message ID 1275404092-8400-2-git-send-email-jlayton@redhat.com
State New
Headers show

Commit Message

Jeff Layton June 1, 2010, 2:54 p.m.
Commit 315e995c63a15cb4d4efdbfd70fe2db191917f7a is causing OOM kills
when stress-testing a CIFS filesystem. The VFS readpages operation takes
a page reference. The older code just handed this reference off to the
page cache, but the new code takes an extra one. The simplest fix is to
put the new reference after add_to_page_cache_lru.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Acked-by: Nick Piggin <npiggin@suse.de>
---
 fs/cifs/file.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

Comments

Steve French June 1, 2010, 5:16 p.m.
merged. Will wait a few days before request upstream.

 Reviewing and checking the others.

On Tue, Jun 1, 2010 at 9:54 AM, Jeff Layton <jlayton@redhat.com> wrote:
> Commit 315e995c63a15cb4d4efdbfd70fe2db191917f7a is causing OOM kills
> when stress-testing a CIFS filesystem. The VFS readpages operation takes
> a page reference. The older code just handed this reference off to the
> page cache, but the new code takes an extra one. The simplest fix is to
> put the new reference after add_to_page_cache_lru.
>
> Signed-off-by: Jeff Layton <jlayton@redhat.com>
> Acked-by: Nick Piggin <npiggin@suse.de>
> ---
>  fs/cifs/file.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/fs/cifs/file.c b/fs/cifs/file.c
> index f1ff785..75541af 100644
> --- a/fs/cifs/file.c
> +++ b/fs/cifs/file.c
> @@ -1952,6 +1952,7 @@ static void cifs_copy_cache_pages(struct address_space *mapping,
>                        bytes_read -= PAGE_CACHE_SIZE;
>                        continue;
>                }
> +               page_cache_release(page);
>
>                target = kmap_atomic(page, KM_USER0);
>
> --
> 1.6.6.1
>
>

Patch hide | download patch | download mbox

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index f1ff785..75541af 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -1952,6 +1952,7 @@  static void cifs_copy_cache_pages(struct address_space *mapping,
 			bytes_read -= PAGE_CACHE_SIZE;
 			continue;
 		}
+		page_cache_release(page);
 
 		target = kmap_atomic(page, KM_USER0);