-Subject: [RFC PATCH 0/39] btrfs: close the raid56 write hole for datacow with stripe-exclusive allocation
+Subject: [RFC PATCH 0/73] btrfs: close the raid56 write hole for datacow with stripe-exclusive allocation
This series closes the raid56 write hole for datacow data by changing the
allocator, with no on-disk format change and no journal. The same rule,
fs/btrfs/... | 39 patches, 34 files changed, 6338 insertions(+), 49 deletions(-)
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.