]> git.hungrycats.org Git - linux/commitdiff
covers: describe patches 40-73 by area, and name the ones that fold zygo-misc-next-zb64
authorZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Fri, 18 Sep 2026 21:36:02 +0000 (17:36 -0400)
committerZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Fri, 18 Sep 2026 21:36:36 +0000 (17:36 -0400)
The cover announced 73 patches and explained 39.  This writes the rest, grouped
by what they touch rather than by the order they landed: metadata, reclaim and
relocation, data reservation, nodatacow, diagnostics.  Brief on purpose -- the
detail belongs in the patches.

It also names nine patches that fix earlier patches in the same series, with
the target of each.  Those should not reach a maintainer as separate commits,
and the list is the fold plan: 73 into 10 (rbio_try_park published an rbio it
held no reference on), 65 into 41, 61 and 62 into 36, 67 into 63, 64 into 25,
69 into 38, 70 into 28, 40 into 7.

Attributions were read out of the patches rather than guessed from subjects.
Two were checked specifically: bytes_stripe_margin is introduced by 25, not by
the admission gate, so 64 folds into 25; and the preallocation roundup 63
builds on is 62's, so 67 folds into 63.

The DO NOT SEND marker is gone.  What remains unresolved is the raid56-metadata
log-epoch decision, already noted above.

Assisted-by: Claude:claude-opus-5[1m]
covers/stripe-alloc.txt

index 103b6bf371f5e47b55caeaae7943734dfb05af4a..511553abb4f918668fe359895acb78d447c64b59 100644 (file)
@@ -1450,54 +1450,53 @@ costs, accepted for this RFC.
   harness, logs and the test catalog available on request.
 
 
-=== NOT YET WRITTEN: patches 40-73 ===
-
-DO NOT SEND until this section is replaced with prose.  The series is 73
-patches and the description above covers 39 of them; every patch number cited
-above still resolves, because the original 39 are an exact prefix of the
-current series, but the remaining 34 are undescribed.
-
-They are the ENOSPC/relocation/reclaim chain v2, the review-round-1 fixes, and
-the stripe_meta reserve work, landed on 6.18 between 2026-08-27 and 2026-09-18
-and ported here on 2026-09-18:
-
-40. stripe_alloc: do not count trapped free space twice when making a block group read-only
-41. stripe_alloc: keep the admitted bytes placeable when a group goes read-only
-42. stripe_alloc: never let relocation wait on the whole-stripe gate
-43. stripe_alloc: give a queued stripe group a chunk to relocate into when the supply is short
-44. stripe_alloc: charge relocation a margin per reservation, not per extent
-45. stripe_alloc: keep the relocation group's stripes out of the admission supply
-46. stripe_alloc: let a data write fall back to the relocation group rather than drop
-47. stripe_alloc: hand groups full of trapped free space to the reclaim worker
-48. stripe_alloc: relocate a queued stripe group even while it has reserved or pinned bytes
-49. stripe_meta: maintain trapped free space for metadata groups like data
-50. stripe_meta: back the global reserve with usable stripes, and say when a tree block finds none
-51. stripe_meta: hold back whole stripes so tree blocks always land and trapped groups can be reclaimed
-52. stripe_meta: do not steal from the global reserve below the relocation reserve
-53. stripe_meta: let the transaction machinery's own reservations draw on the reserve
-54. stripe_meta: let a group go read-only for relocation against the reserve
-55. stripe_alloc: show per-group trapped bytes in the space info dump
-56. stripe_alloc: tell a dead tree block from a live one in the metadata RMW audit
-57. stripe_alloc: do not read an inline backref off a keyed-ref extent item
-58. stripe_alloc: count whole stripes stranded behind live runs as trapped
-59. stripe_alloc: give nocow extents a private run only while they may be written in place
-60. stripe_alloc: count nocow run lifecycles and stranded stripes in sysfs
-61. stripe_alloc: charge the held stripe margin against every admission
-62. stripe_alloc: admit data reservations by whole stripes
-63. stripe_alloc: hold a stripe of margin across a preallocation
-64. stripe_alloc: hold the probe margin until the metadata reservation charges it
-65. stripe_alloc: saturate the read-only guard's claimable subtraction
-66. stripe_meta: carry raid56 metadata groups through a runtime enable or disable
-67. stripe_alloc: charge the preallocation's stripe hold under the reservation lock
-68. stripe_alloc: return a group's allocation cluster before scanning its stripes
-69. stripe_meta: sync the open-run remainder when the commit retires metadata runs
-70. raid56: do not call a covered stripe_meta group uncovered
-71. stripe_alloc: release open stripe runs when a mount fails or an aborted filesystem unmounts
-72. stripe_alloc: say at mount whether the policy is on
-73. stripe_alloc: hold a reference on the rbio being parked
-
-Grouping for the eventual prose, roughly: 40-49 reclaim and relocation against
-the whole-stripe gate; 50-58 the reservation margin and trapped-space
-accounting; 59-70 stripe_meta (whole stripes held back so tree blocks always
-land, and trapped metadata groups can be reclaimed); 71-73 lifecycle and
-diagnostics.
+Patches 40-73, by area
+----------------------
+
+Metadata (49-54, 66, 69, 70).  Patch 38 allocates tree blocks by whole
+stripes; these make that survivable.  Metadata groups maintain trapped free
+space like data groups (49), the global reserve is backed by usable stripes and
+says so when a tree block finds none (50), and whole stripes are held back so
+tree blocks always land and a trapped group can still be relocated (51-54).
+66 carries metadata groups through a runtime enable or disable, 69 folds a
+retired run's remainder back into the space_info, 70 stops reporting a covered
+group as uncovered.
+
+Reclaim and relocation (40-48, 65, 68).  Relocation must never be refused by
+the gate that protects everyone else, or a full raid56 filesystem cannot be
+emptied: 42-46 exempt it and give it somewhere to go, 47-48 hand groups full of
+trapped space to the reclaim worker even when they hold reserved or pinned
+bytes, and 40, 41 and 65 fix the read-only path's accounting.  68 returns the
+allocation cluster before scanning the group, a throughput fix.
+
+Data reservation (58, 61-64, 67).  The admission gate of patch 36 was
+incomplete: 61 charges the held margin against every admission and 62 admits by
+whole stripes rather than by bytes.  63, 64 and 67 hold that margin across a
+preallocation and until the metadata reservation charges it.  58 counts stripes
+stranded behind live runs as trapped.
+
+nodatacow (59, 60).  59 narrows patch 18's private run to the window in which
+the extent may actually be written in place, so a nocow file no longer strands
+a run for its lifetime.  60 counts run lifecycles and strandings in sysfs.
+
+Diagnostics (55-57, 71, 72).  Per-group trapped bytes in the space info dump
+(55); a metadata RMW audit that tells a dead tree block from a live one (56)
+and reads backrefs correctly (57); runs released when a mount fails or an
+aborted filesystem unmounts (71); and a line at mount saying whether the policy
+is on and where it came from (72).
+
+Fixes to earlier patches in this series -- fold before merge
+------------------------------------------------------------
+
+These correct patches posted earlier in the same series and should not reach a
+maintainer as separate commits:
+
+  73 -> 10   rbio_try_park() published an rbio it held no reference on
+  65 -> 41   the read-only guard's claimable subtraction could underflow
+  61 -> 36   the admission gate left out bytes_stripe_margin
+  62 -> 36   a preallocation was admitted for N bytes, not round_up(N)
+  67 -> 63   the preallocation's stripe hold was charged outside the lock
+  64 -> 25   the probe margin was released before metadata re-charged it
+  69 -> 38   retiring metadata runs never synced the open-run remainder
+  70 -> 28   report_uncovered_rmw() predates stripe_meta
+  40 ->  7   trapped free space was counted twice in inc_block_group_ro()