diff options
| author | Thomas Zimmermann <[email protected]> | 2022-11-05 15:02:42 +0000 |
|---|---|---|
| committer | Thomas Zimmermann <[email protected]> | 2022-11-05 15:08:36 +0000 |
| commit | 8e4e4c2f53ffcb0ef746dc3b87ce1a57c5c94c7d (patch) | |
| tree | a61fbc998223d50f8b8691b9b9ced38c21072b10 /fs/btrfs/extent-io-tree.c | |
| parent | drm/ofdrm: Cast error pointers to void __iomem * (diff) | |
| parent | Merge tag 'drm-intel-gt-next-2022-11-03' of git://anongit.freedesktop.org/drm... (diff) | |
| download | kernel-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.c | 15 |
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; } |
