[GIT PULL] md-7.3-20260809

Yu Kuai <[email protected]> Sun, 9 Aug 2026 15:55:55 +0800
Newsgroups org.kernel.vger.linux-block,org.kernel.vger.linux-raid
Message-ID <[email protected]>
Hi Jens,

Please consider pulling the following changes into your for-7.3/block
branch.

Special Note:
- Remove incomplete REQ_NOWAIT support from RAID1, RAID10, and
  RAID4/5/6. These personalities can block internally, so a write can
  reach one member before another returns -EAGAIN. MD cannot distinguish
  queue pressure from a device failure or safely retry the partially
  completed write, which can leave mirrors with divergent data. Keeping
  REQ_NOWAIT advertised for these personalities is therefore unsafe.

  Returning -EAGAIN after one member rejects the bio still exposes any
  writes already submitted to other members. Retrying the whole write
  without REQ_NOWAIT would violate the caller's non-blocking request and
  cannot undo member writes that already completed. Treating -EAGAIN as
  a device failure would incorrectly fault healthy devices under
  transient queue pressure. Prechecking every member queue is also not
  sufficient because it cannot reserve capacity, so a later submission
  can still block or fail.

  A coordinated all-member submission and retry model would require a
  larger redesign. Until that exists, not advertising REQ_NOWAIT for
  these personalities is the only safe behavior.
  (Abd-Alrhman Masalkhi)

This pull request contains:

Bug Fixes:
- Protect RAID5 bitmap batching, stripe-cache limits, and reshape
  recovery state; avoid failed-device reshape deadlocks, discard hangs,
  and PPL use-after-free. (Chen Cheng, Genjian Zhang, Sajal Gupta)
- Recheck spare changes under array suspension before sync to avoid
  racing device removal. (Abd-Alrhman Masalkhi)
- Fix RAID1 atomic-write constraints, serialized-device setup, and
  takeover I/O freezes. (Abd-Alrhman Masalkhi, Martin Wilck,
  Bruce Johnston)
- Fix RAID10 atomic-write failure handling and reshape pool/bio lifetime
  bugs. (Abd-Alrhman Masalkhi, Chen Cheng)
- Fix bitmap error recovery, flush/sync accounting, reclaim safety,
  teardown, timer, use-after-free, and empty-range bugs, plus stale
  clone I/O accounting. (Chen Cheng, Yu Kuai)
- Reject zero-sector RAID5 reshape chunks and correctly round bitmap
  ranges for non-power-of-two stripe widths. (Yu Kuai)
- Prevent PF_MEMALLOC_NOIO state from leaking across tasks. (Chen Cheng)
- Validate bad-block-log shift bounds and skip discard on unsupported
  member devices. (Coly Li, Wale Zhang)
- Prevent RAID10 recovery corruption and large-array resync soft
  lockups. (Yunye Zhao)

Improvements:
- Add lockless bitmap reshape support for RAID5 and RAID10, including
  exact old/new mapping, cache growth, geometry lifecycle, checkpoint
  remapping, and bio splitting. (Yu Kuai)

Cleanups:
- Make RAID1 sequential-read hint accesses explicit to suppress false
  KCSAN reports. (Chen Cheng)
- Remove redundant RAID10 barrier handling and align badblock range
  types. (Abd-Alrhman Masalkhi, Hiroshi Nishida)

Thanks,
Kuai

---

The following changes since commit f5098b6bae761e346ebcd9da7f95622c04733cff:

  Linux 7.2-rc5 (2026-07-26 14:45:48 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/mdraid/linux.git tags/md-7.3-20260809

for you to fetch changes up to dc386aa0ac0a3ec06c9a3ea9b064b073fb72a916:

  md/raid1: don't set array_frozen in raid1_takeover() (2026-08-07 16:49:22 +0800)

----------------------------------------------------------------
Abd-Alrhman Masalkhi (5):
      md: remove REQ_NOWAIT support from raid1/10/456
      md: recheck spare changes before starting sync
      md/raid1: restrict atomic write limits and handle runtime constraints
      md/raid10: consistently fail atomic writes that require splitting
      md/raid10: remove unnecessary barrier around bio_submit_split_bioset()

Bruce Johnston (1):
      md/raid1: don't set array_frozen in raid1_takeover()

Chen Cheng (10):
      md/raid5: protect bitmap batch counters aka seq_flush/seq_write consistency
      md/raid1: protect sequential read hints for read balance
      md/raid5: fix lockless max_nr_stripes reads
      md/raid5: fix reshape deadlock while failed devices more than max degraded
      md/raid5: protect lockless recovery_offset accesses during reshape
      md: suspend array when sync_action=reshape
      md/raid10: resize r10bio_pool for reshape
      md/raid10: free r10bio before ending master_bio in raid_end_bio_io() and raid_end_discard_bio()
      md/bitmap: resume array on backlog_store() error path
      md: scope memalloc_noio to allocation critical sections

Coly Li (1):
      md: do overflow check for sb->bblog_shift in super_1_load()

Genjian Zhang (1):
      md/raid5: complete discard bios while reshape is active

Hiroshi Nishida (1):
      md: widen badblock sectors param from int to sector_t

Martin Wilck (1):
      md/raid1: create serial pool adding rdev to array with serialize_policy=1

Sajal Gupta (1):
      md/raid5-ppl: fix use-after-free in ppl_do_flush()

Wale Zhang (1):
      md: skip discard on unsupported member devices

Yu Kuai (29):
      md/md-llbitmap: clear flush state after daemon flush
      md/md-llbitmap: use GFP_NOIO for cache allocations
      md/md-llbitmap: only end fully synced chunks
      md/raid5: reject zero-sector reshape chunks
      md/raid5: round bitmap stripes with sector division
      md: wait for behind writes before destroying bitmap
      md: avoid stale clone I/O accounting timestamps
      md/md-llbitmap: prevent create failure bitmap UAF
      md/md-llbitmap: stop daemon timer rearm on destroy
      md: skip bitmap accounting for empty write ranges
      md: add helper to split bios at reshape offset
      md: add exact bitmap mapping and reshape hooks
      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 reshape when md chunk shrinks
      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 reshape when md chunk shrinks
      md/raid5: wire llbitmap reshape lifecycle
      md/raid5: split reshape bios before bitmap accounting

Yunye Zhao (2):
      md/raid10: fix still_degraded being inverted in raid10_sync_request()
      md: add cond_resched() to md_do_sync()'s skip path

 drivers/md/md-bitmap.c   |  22 +-
 drivers/md/md-bitmap.h   |  12 +-
 drivers/md/md-linear.c   |   1 +
 drivers/md/md-llbitmap.c | 752 ++++++++++++++++++++++++++++++++++++++++++-----
 drivers/md/md.c          | 178 ++++++++---
 drivers/md/md.h          |  15 +-
 drivers/md/raid0.c       |   1 +
 drivers/md/raid1-10.c    |   8 +-
 drivers/md/raid1.c       | 139 +++------
 drivers/md/raid10.c      | 227 +++++++-------
 drivers/md/raid10.h      |   2 +-
 drivers/md/raid5-ppl.c   |   4 +-
 drivers/md/raid5.c       | 318 +++++++++++++++-----
 13 files changed, 1278 insertions(+), 401 deletions(-)