diff options
-rw-r--r-- | fs/ext4/extents.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 69df02ff96aa..bd69e906bd91 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c | |||
@@ -4165,9 +4165,6 @@ got_allocated_blocks: | |||
4165 | } | 4165 | } |
4166 | } else { | 4166 | } else { |
4167 | BUG_ON(allocated_clusters < reserved_clusters); | 4167 | BUG_ON(allocated_clusters < reserved_clusters); |
4168 | /* We will claim quota for all newly allocated blocks.*/ | ||
4169 | ext4_da_update_reserve_space(inode, allocated_clusters, | ||
4170 | 1); | ||
4171 | if (reserved_clusters < allocated_clusters) { | 4168 | if (reserved_clusters < allocated_clusters) { |
4172 | struct ext4_inode_info *ei = EXT4_I(inode); | 4169 | struct ext4_inode_info *ei = EXT4_I(inode); |
4173 | int reservation = allocated_clusters - | 4170 | int reservation = allocated_clusters - |
@@ -4218,6 +4215,15 @@ got_allocated_blocks: | |||
4218 | ei->i_reserved_data_blocks += reservation; | 4215 | ei->i_reserved_data_blocks += reservation; |
4219 | spin_unlock(&ei->i_block_reservation_lock); | 4216 | spin_unlock(&ei->i_block_reservation_lock); |
4220 | } | 4217 | } |
4218 | /* | ||
4219 | * We will claim quota for all newly allocated blocks. | ||
4220 | * We're updating the reserved space *after* the | ||
4221 | * correction above so we do not accidentally free | ||
4222 | * all the metadata reservation because we might | ||
4223 | * actually need it later on. | ||
4224 | */ | ||
4225 | ext4_da_update_reserve_space(inode, allocated_clusters, | ||
4226 | 1); | ||
4221 | } | 4227 | } |
4222 | } | 4228 | } |
4223 | 4229 | ||