]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
xfs: kick off inodegc when failing to reserve zoned blocks
authorChristoph Hellwig <hch@lst.de>
Mon, 18 Aug 2025 05:06:44 +0000 (07:06 +0200)
committerCarlos Maiolino <cem@kernel.org>
Tue, 19 Aug 2025 12:37:07 +0000 (14:37 +0200)
XFS processes truncating unlinked inodes asynchronously and thus the free
space pool only sees them with a delay.  The non-zoned write path thus
calls into inodegc to accelerate this processing before failing an
allocation due the lack of free blocks.  Do the same for the zoned space
reservation.

Fixes: 0bb2193056b5 ("xfs: add support for zoned space reservations")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hans Holmberg <hans.holmberg@wdc.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/xfs_zone_space_resv.c

index 1313c55b8cbe512ca7cf1f45d43aad075d12fefc..9cd38716fd25f60e008582cda0c2b610e0c24bf0 100644 (file)
@@ -10,6 +10,7 @@
 #include "xfs_mount.h"
 #include "xfs_inode.h"
 #include "xfs_rtbitmap.h"
+#include "xfs_icache.h"
 #include "xfs_zone_alloc.h"
 #include "xfs_zone_priv.h"
 #include "xfs_zones.h"
@@ -230,6 +231,11 @@ xfs_zoned_space_reserve(
 
        error = xfs_dec_freecounter(mp, XC_FREE_RTEXTENTS, count_fsb,
                        flags & XFS_ZR_RESERVED);
+       if (error == -ENOSPC && !(flags & XFS_ZR_NOWAIT)) {
+               xfs_inodegc_flush(mp);
+               error = xfs_dec_freecounter(mp, XC_FREE_RTEXTENTS, count_fsb,
+                               flags & XFS_ZR_RESERVED);
+       }
        if (error == -ENOSPC && (flags & XFS_ZR_GREEDY) && count_fsb > 1)
                error = xfs_zoned_reserve_extents_greedy(mp, &count_fsb, flags);
        if (error)