summaryrefslogtreecommitdiff
path: root/fs/bcachefs/io.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-09-07 15:34:16 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:09:12 -0400
commitdb92f2ea5ed576748b538d15446cebb65bb8d31f (patch)
treec197aec57ea7f3fc91757f09123c76c5bae46fca /fs/bcachefs/io.c
parentc404f2038602580b6bdddeff5e9a4d42717da3b8 (diff)
downloadlwn-db92f2ea5ed576748b538d15446cebb65bb8d31f.tar.gz
lwn-db92f2ea5ed576748b538d15446cebb65bb8d31f.zip
bcachefs: Optimize btree lookups in write path
This patch significantly reduces the number of btree lookups required in the extent update path. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/io.c')
-rw-r--r--fs/bcachefs/io.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c
index bee33258c0d8..f95ceb820faa 100644
--- a/fs/bcachefs/io.c
+++ b/fs/bcachefs/io.c
@@ -281,6 +281,16 @@ int bch2_extent_update(struct btree_trans *trans,
s64 i_sectors_delta = 0, disk_sectors_delta = 0;
int ret;
+ /*
+ * This traverses us the iterator without changing iter->path->pos to
+ * search_key() (which is pos + 1 for extents): we want there to be a
+ * path already traversed at iter->pos because
+ * bch2_trans_extent_update() will use it to attempt extent merging
+ */
+ ret = __bch2_btree_iter_traverse(iter);
+ if (ret)
+ return ret;
+
ret = bch2_extent_trim_atomic(trans, iter, k);
if (ret)
return ret;