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()