| From 2ea2ba3683c5a3d4a77e35e3b3a145f136bbfa44 Mon Sep 17 00:00:00 2001 |
| From: Mingming Cao <cmm@us.ibm.com> |
| Date: Mon, 28 Sep 2009 15:49:52 -0400 |
| Subject: [PATCH 41/85] 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> |
| --- |
| fs/ext4/inode.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- 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; |