mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 04:06:22 +00:00
Btrfs: Fix race against disk_i_size updates
The code to update the on disk i_size happens before the ordered_extent record is removed. So, it is possible for multiple ordered_extent completion routines to run at the same time, and to find each other in the ordered tree. The end result is they both decide not to update disk_i_size, leaving it too small. This temporary fix just puts the updates inside the extent_mutex. A real solution would be stronger ordering of disk_i_size updates against removing the ordered extent from the tree. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
31840ae1a6
commit
3435302953
1 changed files with 2 additions and 0 deletions
|
@ -608,9 +608,11 @@ nocow:
|
|||
add_pending_csums(trans, inode, ordered_extent->file_offset,
|
||||
&ordered_extent->list);
|
||||
|
||||
mutex_lock(&BTRFS_I(inode)->extent_mutex);
|
||||
btrfs_ordered_update_i_size(inode, ordered_extent);
|
||||
btrfs_update_inode(trans, root, inode);
|
||||
btrfs_remove_ordered_extent(inode, ordered_extent);
|
||||
mutex_unlock(&BTRFS_I(inode)->extent_mutex);
|
||||
|
||||
/* once for us */
|
||||
btrfs_put_ordered_extent(ordered_extent);
|
||||
|
|
Loading…
Reference in a new issue