This patchset can be fetched from my github:
https://github.com/Damenly/btrfs-progs/tree/lowmem_v5

Patch[1] is added for code shared.

Patch[2-6] introduce two ways to avoid extents overwrite:
1) Traverse trees and exclude all metadata blocks.
   It's time-inefficient for large filesystems.
2) Mark all existed chunks full, allocate new chunk for CoW and
   records chunk start.
   If the last allocated chunk is almost full, allocated a new one.
   
Method 2 is More efficient than 1. However, it can't handle situations
like no space(fsck-tests/004).
Lowmem repair will try method 2 first and then method 1.

Patch[7-15] remove parameters @trans in functions in lowmem repair.
They try to avoid extents overwrite if necessary and start
transactions by themselves.

Patch[16] adds a test image for new chunks allocation.
Excluding extents can be tested by existed image in fsck-tests/014.

Those patches are mainly for lowmem repair. Original mode is not
influenced.

---
Changlog:
v5->v4:
 - Rebase to devel. Bases commit 9c6d390217b8 ("btrfs-progs: check:
          Distingusih csum checking output for --check-data-csum")
 - Change changelogs and fix typos.
 - Rename subjects from "* lowmem check: *" to "* lowmem: *".

v4->v3:
 - Remove global enum extents_operation to simplify
   avoid_extents_overwrite() and its cleanup.
 - Rebase after work of check split.
 
v3->v2:
 - check_btrfs_root() returns FATAL_ERROR if check_fs_first_inode()
   failed. Thanks Nikolay Borisov.
 - Add function try_to_force_cow_in_new_chunk() and global u64
   varaiable to record start of the last allocated chunk.
 - Remove unused EXTENTS_PIN in enum lowmem_extents_operation.
 
v2->v1:
 - 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 (16):
  btrfs-progs: check: move pin_down_tree_blocks to mode-common.c
  btrfs-progs: lowmem: exclude extents of metadata blocks
  btrfs-progs: lowmem: introduce mark/clear_block_groups_full()
  btrfs-progs: lowmem: introduce try_force_cow_in_new_chunk()
  btrfs-progs: lowmem: introduce avoid_extents_overwrite()
  btrfs-progs: lowmem: exclude extents if init-extent-tree in lowmem
  btrfs-progs: lowmem: start to remove parameters @trans in lowmem
  btrfs-progs: lowmem: remove parameter @trans of delete_extent_item()
  btrfs-progs: lowmem: remove parameter @trans of repair_chunk_item()
  btrfs-progs: lowmem: remove parameter @trans of repair_extent_item()
  btrfs-progs: lowmem: remove parameter @trans of check_leaf_items()
  btrfs-progs: lowmem: remove parameter @trans of repair_tree_back_ref()
  btrfs-progs: lowmem: remove parameter @trans of check_btrfs_root()
  btrfs-progs: lowmem: introduce repair_block_accounting()
  btrfs-progs: lowmem: end of removing parameters @trans in lowmem
  btrfs-progs: fsck-tests: add image no extent with normal device size

 check/main.c                                  | 118 +---
 check/mode-common.c                           | 141 +++++
 check/mode-common.h                           |   3 +
 check/mode-lowmem.c                           | 539 +++++++++++++++---
 .../014-no-extent-info/.lowmem_repairable     |   0
 .../014-no-extent-info/no_extent.raw.xz       | Bin 0 -> 28084 bytes
 ...default_case.img => no_extent_bad_dev.img} | Bin
 7 files changed, 627 insertions(+), 174 deletions(-)
 create mode 100644 tests/fsck-tests/014-no-extent-info/.lowmem_repairable
 create mode 100644 tests/fsck-tests/014-no-extent-info/no_extent.raw.xz
 rename tests/fsck-tests/014-no-extent-info/{default_case.img => 
no_extent_bad_dev.img} (100%)

-- 
2.17.0



--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to