ext4: remove quota allocation when ext4_mb_new_blocks fails
PATCH 1/1 ext4: remove quota allocation when ext4_mb_new_blocks fails
Quota allocation is not removed When ext4_mb_new_blocks calls kmem_cache_alloc failed.
Signed-off-by Shen Feng <[email protected]>
--- fs/ext4/mballoc.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
fs/ext4/mballoc.c +6 -4
@@ -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,
Signature · 1 line
1.5.4.5
Quoted 4 lines · Shen Feng
Quota allocation is not removed When
ext4_mb_new_blockscallskmem_cache_allocfailed.Signed-off-by Shen Feng <[email protected]>
Reviewed-by Mingming Cao <[email protected]>
Patch also queued up in ext4 patch queue
http://repo.or.cz/w/ext4-patch-queue.git
Quoted 43 lines
--- fs/ext4/mballoc.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)fs/ext4/mballoc.c +6
-4@@ -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,