Message ID | ac8f92701003240600o5ce6a682i431de77bef66b736@mail.gmail.com |
---|---|
State | New, archived |
Headers | show |
On Wed, 24 Mar 2010 21:00:34 +0800, jing zhang <zj.barak@gmail.com> wrote: > From: Jing Zhang <zj.barak@gmail.com> > > 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. > > Cc: Theodore Ts'o <tytso@mit.edu> > Cc: Andreas Dilger <adilger@sun.com> > Cc: Dave Kleikamp <shaggy@linux.vnet.ibm.com> > Signed-off-by: Jing Zhang <zj.barak@gmail.com> > > --- > > --- 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 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
2010/3/25, Aneesh Kumar K. V <aneesh.kumar@linux.vnet.ibm.com>: > On Wed, 24 Mar 2010 21:00:34 +0800, jing zhang <zj.barak@gmail.com> wrote: >> From: Jing Zhang <zj.barak@gmail.com> >> >> 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 <tytso@mit.edu> >> Cc: Andreas Dilger <adilger@sun.com> >> Cc: Dave Kleikamp <shaggy@linux.vnet.ibm.com> >> Signed-off-by: Jing Zhang <zj.barak@gmail.com> >> >> --- >> >> --- 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 > -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--- 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);