On Fri, 2008-05-30 at 11:28 +0800, Shen Feng wrote: > Quota allocation is not removed When ext4_mb_new_blocks > calls kmem_cache_alloc failed. > > Signed-off-by: Shen Feng <shen@xxxxxxxxxxxxxx> Reviewed-by: Mingming Cao <cmm@xxxxxxxxxx> Patch also queued up in ext4 patch queue http://repo.or.cz/w/ext4-patch-queue.git > --- > fs/ext4/mballoc.c | 10 ++++++---- > 1 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c > index 6180ebc..2411db6 100644 > --- a/fs/ext4/mballoc.c > +++ b/fs/ext4/mballoc.c > @@ -4043,8 +4043,9 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle, > > ac = kmem_cache_alloc(ext4_ac_cachep, GFP_NOFS); > if (!ac) { > + ar->len = 0; > *errp = -ENOMEM; > - return 0; > + goto out1; > } > > ext4_mb_poll_new_transaction(sb, handle); > @@ -4052,7 +4053,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle, > *errp = ext4_mb_initialize_context(ac, ar); > if (*errp) { > ar->len = 0; > - goto out; > + goto out2; > } > > ac->ac_op = EXT4_MB_HISTORY_PREALLOC; > @@ -4100,11 +4101,12 @@ repeat: > > ext4_mb_release_context(ac); > > -out: > +out2: > + kmem_cache_free(ext4_ac_cachep, ac); > +out1: > if (ar->len < inquota) > DQUOT_FREE_BLOCK(ar->inode, inquota - ar->len); > > - kmem_cache_free(ext4_ac_cachep, ac); > return block; > } > static void ext4_mb_poll_new_transaction(struct super_block *sb, -- 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