mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
synced 2024-12-14 06:33:21 +08:00
1796d5099f
Before this patch, we were using a very inefficient way to search chunks: We iterate through all clusters to find the chunk root tree block first, then re-iterate all clusters again to find every child tree block. Each time we need to iterate all clusters just to find a chunk tree block. This is obviously inefficient, especially when chunk tree gets larger. So the original author leaves a comment on it: /* If you have to ask you aren't worthy */ static int search_for_chunk_blocks() This patch will change the behavior so that we will only iterate all clusters once. The idea behind the optimization is, since we have the superblock restored first, we could use the CHUNK_ITEMs in super_block::sys_chunk_array to build a SYSTEM chunk mapping. Then, when we start to iterate through all items, we can easily skip unrelated items at different level: - At cluster level If a cluster starts beyond last system chunk map, it must not contain any chunk tree blocks (as chunk tree blocks only lives inside system chunks) - At item level If one item has no intersection with any system chunk map, then it must not contain any tree blocks. By this, we can iterate through all clusters just once, and find out all CHUNK_ITEMs. Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> |
||
---|---|---|
.. | ||
main.c | ||
Makefile | ||
metadump.h | ||
sanitize.c | ||
sanitize.h |