[PATCH 0/5] linux: Modifying per-ag reservation to account for dependent allocations

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



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





[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux