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

Yu Kuai <[email protected]>
Newsgroups gmane.linux.raid,gmane.linux.kernel
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.