ext4: release reserved quota when block reservation for delalloc retry
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>
This commit is contained in:
parent
55138e0bc2
commit
9f0ccfd8e0
|
@ -1854,11 +1854,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;
|
||||
|
|
Loading…
Reference in New Issue