diff options
author | Mingming Cao <cmm@us.ibm.com> | 2009-09-28 15:49:52 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-12-14 08:06:56 -0800 |
commit | f26ac96224871adf0647496e4154eabdee3689a6 (patch) | |
tree | e93e47c9bd07b5730a54e7be55cf66b9b7797088 /fs/ext4 | |
parent | 54088f5df9e352c41ef0f2eeb17ec9ae995ab4b3 (diff) |
ext4: release reserved quota when block reservation for delalloc retry
(cherry picked from commit 9f0ccfd8e07d61b413e6536ffa02fbf60d2e20d8)
ext4_da_reserve_space() can reserve quota blocks multiple times if
ext4_claim_free_blocks() fail and we retry the allocation. We should
release the quota reservation before restarting.
Bug found by Jan Kara.
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/inode.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 81fe02da87e..f507ca7991c 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1855,11 +1855,11 @@ repeat: if (ext4_claim_free_blocks(sbi, total)) { spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); + vfs_dq_release_reservation_block(inode, total); if (ext4_should_retry_alloc(inode->i_sb, &retries)) { yield(); goto repeat; } - vfs_dq_release_reservation_block(inode, total); return -ENOSPC; } EXT4_I(inode)->i_reserved_data_blocks += nrblocks; |