diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-09-07 15:34:16 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:12 -0400 |
commit | db92f2ea5ed576748b538d15446cebb65bb8d31f (patch) | |
tree | c197aec57ea7f3fc91757f09123c76c5bae46fca /fs/bcachefs/io.c | |
parent | c404f2038602580b6bdddeff5e9a4d42717da3b8 (diff) | |
download | lwn-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.c | 10 |
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; |