From mboxrd@z Thu Jan 1 00:00:00 1970 From: jing zhang Subject: Re: [PATCH] ext4: page_cache pages over pinned in ext4_mb_free_metadata() Date: Thu, 25 Mar 2010 22:23:42 +0800 Message-ID: References: <87aatxd4iq.fsf@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Cc: linux-ext4 , "Theodore Ts'o" , Andreas Dilger , Dave Kleikamp To: "Aneesh Kumar K. V" Return-path: Received: from mail-iw0-f182.google.com ([209.85.223.182]:41522 "EHLO mail-iw0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754428Ab0CYOXo (ORCPT ); Thu, 25 Mar 2010 10:23:44 -0400 Received: by iwn12 with SMTP id 12so7358380iwn.21 for ; Thu, 25 Mar 2010 07:23:42 -0700 (PDT) In-Reply-To: <87aatxd4iq.fsf@linux.vnet.ibm.com> Sender: linux-ext4-owner@vger.kernel.org List-ID: 2010/3/25, Aneesh Kumar K. V : > On Wed, 24 Mar 2010 21:00:34 +0800, jing zhang wrote: >> From: Jing Zhang >> >> Date: Wed Mar 24 20:38:48 2010 >> >> The function, ext4_mb_free_metadata(), is called after >> ext4_mb_load_buddy(sb, block_group, &e4b); >> and before >> ext4_mb_release_desc(&e4b); >> in the function, ext4_mb_free_blocks(), so the bd_bitmap_page and >> bd_buddy_page of e4b are well managed. >> >> If for special purpose, page_cache_get() is issued on these two pages, >> there should also be page_cache_release() issued correspondingly, or >> the two pages are over pinned. > > release_blocks_on_commit does that. I also have a comment around that > page_cache_release. Thank you, Aneesh. I will check it. - zj > >> >> Cc: Theodore Ts'o >> Cc: Andreas Dilger >> Cc: Dave Kleikamp >> Signed-off-by: Jing Zhang >> >> --- >> >> --- linux-2.6.32/fs/ext4/mballoc.c 2009-12-03 11:51:22.000000000 +0800 >> +++ ext4_mm_leak/mballoc6.c 2010-03-24 20:31:52.000000000 +0800 >> @@ -4361,15 +4361,6 @@ ext4_mb_free_metadata(handle_t *handle, >> new_node = &new_entry->node; >> block = new_entry->start_blk; >> >> - if (!*n) { >> - /* first free block exent. We need to >> - protect buddy cache from being freed, >> - * otherwise we'll refresh it from >> - * on-disk bitmap and lose not-yet-available >> - * blocks */ >> - page_cache_get(e4b->bd_buddy_page); >> - page_cache_get(e4b->bd_bitmap_page); >> - } >> while (*n) { >> parent = *n; >> entry = rb_entry(parent, struct ext4_free_data, node); > > > -aneesh >