aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/ioctl.c')
-rw-r--r--fs/btrfs/ioctl.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index f0b4237cedfc..04ece8fab921 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -2700,10 +2700,15 @@ static inline void lock_extent_range(struct inode *inode, u64 off, u64 len)
2700 lock_extent(&BTRFS_I(inode)->io_tree, off, off + len - 1); 2700 lock_extent(&BTRFS_I(inode)->io_tree, off, off + len - 1);
2701 ordered = btrfs_lookup_first_ordered_extent(inode, 2701 ordered = btrfs_lookup_first_ordered_extent(inode,
2702 off + len - 1); 2702 off + len - 1);
2703 if (!ordered && 2703 if ((!ordered ||
2704 ordered->file_offset + ordered->len <= off ||
2705 ordered->file_offset >= off + len) &&
2704 !test_range_bit(&BTRFS_I(inode)->io_tree, off, 2706 !test_range_bit(&BTRFS_I(inode)->io_tree, off,
2705 off + len - 1, EXTENT_DELALLOC, 0, NULL)) 2707 off + len - 1, EXTENT_DELALLOC, 0, NULL)) {
2708 if (ordered)
2709 btrfs_put_ordered_extent(ordered);
2706 break; 2710 break;
2711 }
2707 unlock_extent(&BTRFS_I(inode)->io_tree, off, off + len - 1); 2712 unlock_extent(&BTRFS_I(inode)->io_tree, off, off + len - 1);
2708 if (ordered) 2713 if (ordered)
2709 btrfs_put_ordered_extent(ordered); 2714 btrfs_put_ordered_extent(ordered);