Hi, These patches attempt to address the problem where dependent allocations fail during a multi allocation transaction, often as a result of refilling the AGFL. The failure results in a filesystem shutdown. In many cases, it manifests as a warn in xfs_bmap_extents_to_btree, when the dependent b-tree conversion fails after inadvertently getting an ENOSPC. The RFC series was here: https://lore.kernel.org/linux-xfs/cover.1718232004.git.kjlx@xxxxxxxxxxxxxxxxxx/T/#t This series attempts follows David's guidance around implementing the reservation using the existing xfs_alloc_ag_max_usable and XFS_ALLOCBT_AGFL_RESERVE mechanisms. This mostly worked as advertised (thanks!), however, a few additional patches were needed in order to address test failures. In particular, without the 'xfs: include min freelist in m_ag_max_usable' patch this series would fail the generic/223 tests around stripe alignment, because m_ag_max_usable was slightly larger than the actually usable space. This turned out to be the result of the first pre-fill of the AGFL and once corrected the tests pass. This currently has a failure in xfs/306. I'm including a patch for xfstests to address this. The per-AG reservation size on the filesystem in that test increased by just enough that the filesystem reservation that was manually configured to 16 blocks was too small. Increasing that test's reservation to 17 allows it to continue. The failure manifests as dd failing to make progress and the dmesg filling with errors about xfs_discard_folio. Tracing showed that conversion of the delalloc to a real allocation was getting ENOSPC. -K Krister Johansen (5): xfs: count the number of blocks in a per-ag reservation xfs: move calculation in xfs_alloc_min_freelist to its own function xfs: make alloc_set_aside and friends aware of per-AG reservations xfs: push the agfl set aside into xfs_alloc_space_available xfs: include min freelist in m_ag_max_usable fs/xfs/libxfs/xfs_alloc.c | 184 ++++++++++++++++++++++++++++++-------- fs/xfs/libxfs/xfs_alloc.h | 1 + fs/xfs/xfs_fsops.c | 21 +++++ fs/xfs/xfs_fsops.h | 1 + fs/xfs/xfs_mount.c | 24 +++++ fs/xfs/xfs_mount.h | 12 +++ 6 files changed, 207 insertions(+), 36 deletions(-) base-commit: 7bf888fa26e8f22bed4bc3965ab2a2953104ff96 -- 2.25.1