Commit cb3cd624 authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba

btrfs: avoid removal and re-insertion of split ordered extent

At btrfs_split_ordered_extent(), we are removing and re-inserting the
ordered extent that we are trimming, but we don't need to since the
trimming doesn't change its position in the red black tree because we
don't have overlapping ordered extents (that would imply double allocation
of extents) and we know the split length is smaller than the ordered
extent's num_bytes field (we checked that early in the function).

So drop the remove and re-insert code for the slit ordered extent.
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent c18ca3c9
...@@ -1266,13 +1266,13 @@ struct btrfs_ordered_extent *btrfs_split_ordered_extent( ...@@ -1266,13 +1266,13 @@ struct btrfs_ordered_extent *btrfs_split_ordered_extent(
*/ */
spin_lock_irq(&root->ordered_extent_lock); spin_lock_irq(&root->ordered_extent_lock);
spin_lock(&inode->ordered_tree_lock); spin_lock(&inode->ordered_tree_lock);
/* Remove from tree once */
node = &ordered->rb_node;
rb_erase(node, &inode->ordered_tree);
RB_CLEAR_NODE(node);
if (inode->ordered_tree_last == node)
inode->ordered_tree_last = NULL;
/*
* We don't have overlapping ordered extents (that would imply double
* allocation of extents) and we checked above that the split length
* does not cross the ordered extent's num_bytes field, so there's
* no need to remove it and re-insert it in the tree.
*/
ordered->file_offset += len; ordered->file_offset += len;
ordered->disk_bytenr += len; ordered->disk_bytenr += len;
ordered->num_bytes -= len; ordered->num_bytes -= len;
...@@ -1302,14 +1302,6 @@ struct btrfs_ordered_extent *btrfs_split_ordered_extent( ...@@ -1302,14 +1302,6 @@ struct btrfs_ordered_extent *btrfs_split_ordered_extent(
offset += sum->len; offset += sum->len;
} }
/* Re-insert the node */
node = tree_insert(&inode->ordered_tree, ordered->file_offset,
&ordered->rb_node);
if (node)
btrfs_panic(fs_info, -EEXIST,
"zoned: inconsistency in ordered tree at offset %llu",
ordered->file_offset);
node = tree_insert(&inode->ordered_tree, new->file_offset, &new->rb_node); node = tree_insert(&inode->ordered_tree, new->file_offset, &new->rb_node);
if (node) if (node)
btrfs_panic(fs_info, -EEXIST, btrfs_panic(fs_info, -EEXIST,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment