From: Kent Overstreet Date: Wed, 14 May 2025 17:40:47 +0000 (-0400) Subject: bcachefs: Fix accidental O(n^2) in fiemap X-Git-Tag: v6.15-rc7~22^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a12cb6f758177fcf9bdb7d18b4724eaa29023740;p=thirdparty%2Flinux.git bcachefs: Fix accidental O(n^2) in fiemap 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 Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c index b6801861c66f1..4b742e62255bb 100644 --- a/fs/bcachefs/fs.c +++ b/fs/bcachefs/fs.c @@ -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;