]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bcachefs: Fix accidental O(n^2) in fiemap
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 14 May 2025 17:40:47 +0000 (13:40 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 14 May 2025 21:05:19 +0000 (17:05 -0400)
Since bch2_seek_pagecache_data() searches for dirty data, we only want
to call it for holes in the extents btree - otherwise we have an
accidental O(n^2), as we repeatedly search the same range.

Reported-by: Marcin Mirosław <marcin@mejor.pl>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fs.c

index b6801861c66f1c4322d777e5534c822af038f214..4b742e62255bb788229c61378082abeaf0d57a6d 100644 (file)
@@ -1429,7 +1429,9 @@ static int bch2_next_fiemap_extent(struct btree_trans *trans,
        if (ret)
                goto err;
 
-       ret = bch2_next_fiemap_pagecache_extent(trans, inode, start, end, cur);
+       u64 pagecache_end = k.k ? max(start, bkey_start_offset(k.k)) : end;
+
+       ret = bch2_next_fiemap_pagecache_extent(trans, inode, start, pagecache_end, cur);
        if (ret)
                goto err;