On 2017年12月20日 12:57, Su Yue wrote: > This patchset can be fetched from my github: > https://github.com/Damenly/btrfs-progs/tree/lowmem_repair > based on kdave/devel. > > Thanks to Qu Wenruo's ideas and suggestions first. > Any suggestions about names of functions and variables are welcome. > > Patch[1-3] fix minor problems of lowmem repair. Mostly fine for patch 1-3. So Reviewed-by: Qu Wenruo <wqu@xxxxxxxx> for those patches. Although for 2nd patch, I'm not sure if the naming or if the >0 for error is good. > > Patch[4-8] introduce two ways to avoid extents overwrite: > 1) Traverse trees and exclude all metadata blocks. > It's time-inefficient for big filesystems. > 2) Mark all existed chunks full, allocate new chunk for CoW. > More efficient than method 1. However, it can't not handle situation > like no space. > Lowmem repair will try method 2 first and method 1 next now. Commented in separate patches. Thanks, Qu > > Patch[9-17] remove parameters in lowmem repair functions. They > will try to avoid extents overwrite if necessary and start > transactions themselves. > > Those patches are mainly for lowmem repair. Original mode is not > influenced. > Since btrfs-progs v4.14, lowmem mode changed to check all tree blocks > backrefs. There are many bugs about shared backref in lowmem mode now. > If lowmem check can not work as expected, lowmem repair are useless. > I will fix lowmem check in next. > > --- > Changlog: > v1->v2: > - Let @err in check_btrfs_root() record err bits but excluded > negative values. > - Do not delete a line of code to release path after extent item' > insertion in repair_extent_data_item(). > - Add patch[3]. > - Force CoW in new allocated chunk to avoid extents overwrite. > - Remove parameters @trans in check_chunks_and_extents_v2() and > related callees. > - Repair functions for lowmem mode call try_avoid_extents_overwrite() > and start transactions. > > Su Yue (17): > btrfs-progs: lowmem check: release path in repair_extent_data_item() > btrfs-progs: lowmem check: record returned errors after > walk_down_tree_v2() > btrfs-progs: lowmem check: assign @parent early in > repair_extent_data_item() > btrfs-progs: lowmem check: exclude extents of metadata blocks > btrfs-progs: lowmem check: introduce modify_block_groups_cache() > btrfs-progs: lowmem check: introduce force_cow_in_new_chunk() > btrfs-progs: lowmem check: introduce try_avoid_extents_overwrite() > btrfs-progs: lowmem check: exclude extents if init-extent-tree in > lowmem > btrfs-progs: lowmem check: start to remove parameters @trans in lowmem > btrfs-progs: lowmem check: remove parameter @trans of > delete_extent_item() > btrfs-progs: lowmem check: remove parameter @trans of > repair_chunk_item() > btrfs-progs: lowmem check: remove parameter @trans of > repair_extent_item() > btrfs-progs: lowmem check: remove parameter @trans of > check_leaf_items() > btrfs-progs: lowmem check: remove parameter @trans of > repair_tree_back_ref() > btrfs-progs: lowmem check: remove parameter @trans of > check_btrfs_root() > btrfs-progs: lowmem check: introduce repair_block_accounting() > btrfs-progs: lowmem check: end of removing parameters @trans in lowmem > > cmds-check.c | 620 +++++++++++++++++++++++++++++++++++++++++++++++++---------- > 1 file changed, 515 insertions(+), 105 deletions(-) >
Attachment:
signature.asc
Description: OpenPGP digital signature
