diff options
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 7503bd46819b..65a0583027e9 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -946,8 +946,12 @@ int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end, | |||
946 | 946 | ||
947 | err = set_extent_bit(tree, start, end, EXTENT_LOCKED, 1, | 947 | err = set_extent_bit(tree, start, end, EXTENT_LOCKED, 1, |
948 | &failed_start, mask); | 948 | &failed_start, mask); |
949 | if (err == -EEXIST) | 949 | if (err == -EEXIST) { |
950 | if (failed_start > start) | ||
951 | clear_extent_bit(tree, start, failed_start - 1, | ||
952 | EXTENT_LOCKED, 1, 0, mask); | ||
950 | return 0; | 953 | return 0; |
954 | } | ||
951 | return 1; | 955 | return 1; |
952 | } | 956 | } |
953 | EXPORT_SYMBOL(try_lock_extent); | 957 | EXPORT_SYMBOL(try_lock_extent); |