Added in ext4 patch queue, Thanks On Thu, 2008-02-14 at 16:00 +0530, Aneesh Kumar K.V wrote: > The path variable returned via ext4_ext_find_extent is a kmalloc variable > and need to be freeded. It also contain refrences to buffer_head which need > to be dropped. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> > --- > fs/ext4/extents.c | 6 +++--- > fs/ext4/migrate.c | 5 +++++ > include/linux/ext4_fs_extents.h | 1 + > 3 files changed, 9 insertions(+), 3 deletions(-) > > diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c > index e856f66..995ac16 100644 > --- a/fs/ext4/extents.c > +++ b/fs/ext4/extents.c > @@ -349,7 +349,7 @@ static void ext4_ext_show_leaf(struct inode *inode, struct ext4_ext_path *path) > #define ext4_ext_show_leaf(inode,path) > #endif > > -static void ext4_ext_drop_refs(struct ext4_ext_path *path) > +void ext4_ext_drop_refs(struct ext4_ext_path *path) > { > int depth = path->p_depth; > int i; > @@ -2200,10 +2200,10 @@ static int ext4_ext_convert_to_initialized(handle_t *handle, > newdepth = ext_depth(inode); > if (newdepth != depth) { > depth = newdepth; > - path = ext4_ext_find_extent(inode, iblock, NULL); > + ext4_ext_drop_refs(path); > + path = ext4_ext_find_extent(inode, iblock, path); > if (IS_ERR(path)) { > err = PTR_ERR(path); > - path = NULL; > goto out; > } > eh = path[depth].p_hdr; > diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c > index 8c6c685..5c1e27d 100644 > --- a/fs/ext4/migrate.c > +++ b/fs/ext4/migrate.c > @@ -43,6 +43,7 @@ static int finish_range(handle_t *handle, struct inode *inode, > > if (IS_ERR(path)) { > retval = PTR_ERR(path); > + path = NULL; > goto err_out; > } > > @@ -74,6 +75,10 @@ static int finish_range(handle_t *handle, struct inode *inode, > } > retval = ext4_ext_insert_extent(handle, inode, path, &newext); > err_out: > + if (path) { > + ext4_ext_drop_refs(path); > + kfree(path); > + } > lb->first_pblock = 0; > return retval; > } > diff --git a/include/linux/ext4_fs_extents.h b/include/linux/ext4_fs_extents.h > index 697da4b..1285c58 100644 > --- a/include/linux/ext4_fs_extents.h > +++ b/include/linux/ext4_fs_extents.h > @@ -227,5 +227,6 @@ extern int ext4_ext_search_left(struct inode *, struct ext4_ext_path *, > ext4_lblk_t *, ext4_fsblk_t *); > extern int ext4_ext_search_right(struct inode *, struct ext4_ext_path *, > ext4_lblk_t *, ext4_fsblk_t *); > +extern void ext4_ext_drop_refs(struct ext4_ext_path *); > #endif /* _LINUX_EXT4_EXTENTS */ > - To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html