aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-io-tree.c
diff options
context:
space:
mode:
authorThomas Zimmermann <[email protected]>2022-11-05 15:02:42 +0000
committerThomas Zimmermann <[email protected]>2022-11-05 15:08:36 +0000
commit8e4e4c2f53ffcb0ef746dc3b87ce1a57c5c94c7d (patch)
treea61fbc998223d50f8b8691b9b9ced38c21072b10 /fs/btrfs/extent-io-tree.c
parentdrm/ofdrm: Cast error pointers to void __iomem * (diff)
parentMerge tag 'drm-intel-gt-next-2022-11-03' of git://anongit.freedesktop.org/drm... (diff)
downloadkernel-8e4e4c2f53ffcb0ef746dc3b87ce1a57c5c94c7d.tar.gz
kernel-8e4e4c2f53ffcb0ef746dc3b87ce1a57c5c94c7d.zip
Merge drm/drm-next into drm-misc-next
Backmerging drm/drm-next to get the latest changes in the xlnx driver. Signed-off-by: Thomas Zimmermann <[email protected]>
Diffstat (limited to 'fs/btrfs/extent-io-tree.c')
-rw-r--r--fs/btrfs/extent-io-tree.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/fs/btrfs/extent-io-tree.c b/fs/btrfs/extent-io-tree.c
index 618275af19c4..83cb0378096f 100644
--- a/fs/btrfs/extent-io-tree.c
+++ b/fs/btrfs/extent-io-tree.c
@@ -1641,16 +1641,17 @@ int lock_extent(struct extent_io_tree *tree, u64 start, u64 end,
int err;
u64 failed_start;
- while (1) {
+ err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, &failed_start,
+ cached_state, NULL, GFP_NOFS);
+ while (err == -EEXIST) {
+ if (failed_start != start)
+ clear_extent_bit(tree, start, failed_start - 1,
+ EXTENT_LOCKED, cached_state);
+
+ wait_extent_bit(tree, failed_start, end, EXTENT_LOCKED);
err = __set_extent_bit(tree, start, end, EXTENT_LOCKED,
&failed_start, cached_state, NULL,
GFP_NOFS);
- if (err == -EEXIST) {
- wait_extent_bit(tree, failed_start, end, EXTENT_LOCKED);
- start = failed_start;
- } else
- break;
- WARN_ON(start > end);
}
return err;
}