[PATCH 00/19] md: support llbitmap reshape for raid10 and raid5

Yu Kuai posted 19 patches 1 month, 4 weeks ago
Only 5 patches received!
drivers/md/md-bitmap.c   |   8 +
drivers/md/md-bitmap.h   |   7 +
drivers/md/md-llbitmap.c | 602 +++++++++++++++++++++++++++++++++++---
drivers/md/md.c          |  51 +++
drivers/md/md.h          |   8 +
drivers/md/raid10.c      |  44 ++-
drivers/md/raid5.c       | 114 ++++++--
7 files changed, 760 insertions(+), 74 deletions(-)
[PATCH 00/19] md: support llbitmap reshape for raid10 and raid5
Posted by Yu Kuai 1 month, 4 weeks ago
llbitmap currently tracks one live bitmap geometry, but reshape needs old and
new mapping to coexist until reshape completion. That breaks normal bitmap
accounting in three places:

- bios that cross reshape_position cannot be accounted as one bitmap range
- checkpointed dirty state must move forward as reshape advances
- interrupted reshape must resume with the same llbitmap interpretation after
  reassembly

The main pieces are:

- add bitmap-side range preparation so md core uses one bitmap API
- split reshape-crossing bios in raid10/raid5 before bitmap accounting
- let llbitmap stage target geometry and remap checkpointed bits in one bitmap
- teach raid10/raid5 to provide exact old/new mapping and drive llbitmap
  reshape progress

Validation

Runtime:
- custom QEMU llbitmap reshape matrix passed for raid10 and raid5:
  - expanded/changed bit-state checks with query_bit
  - cross-boundary writes during reshape
  - heavier raid5 write path that previously warned/crashed
  - degraded stop/assemble data verification after reshape
  - interrupted reshape stop/assemble/continue for raid10 and raid5
- mdadm test 02r5grow passed in disk mode

The temporary query_bit validation hook is intentionally kept out of this
submission series.

Yu Kuai (19):
  md: add exact bitmap mapping and reshape hooks
  md: add helper to split bios at reshape offset
  md/md-llbitmap: track bitmap sync_size explicitly
  md/md-llbitmap: allocate page controls independently
  md/md-llbitmap: grow the page cache in place for reshape
  md/md-llbitmap: track target reshape geometry fields
  md/md-llbitmap: finish reshape geometry
  md/md-llbitmap: refuse reshape while llbitmap still needs sync
  md/md-llbitmap: add reshape range mapping helpers
  md/md-llbitmap: don't skip reshape ranges from bitmap state
  md/md-llbitmap: remap checkpointed bits as reshape progresses
  md/md-llbitmap: clamp state-machine walks to tracked bits
  md/raid10: reject llbitmap chunk shrink during reshape
  md/raid10: wire llbitmap reshape lifecycle
  md/raid10: split reshape bios before bitmap accounting
  md/raid5: add exact old and new llbitmap mapping helpers
  md/raid5: reject llbitmap chunk shrink during reshape
  md/raid5: wire llbitmap reshape lifecycle
  md/raid5: split reshape bios before bitmap accounting

 drivers/md/md-bitmap.c   |   8 +
 drivers/md/md-bitmap.h   |   7 +
 drivers/md/md-llbitmap.c | 602 +++++++++++++++++++++++++++++++++++---
 drivers/md/md.c          |  51 +++
 drivers/md/md.h          |   8 +
 drivers/md/raid10.c      |  44 ++-
 drivers/md/raid5.c       | 114 ++++++--
 7 files changed, 760 insertions(+), 74 deletions(-)

-- 
2.51.0