linux/fs/xfs/libxfs
Christoph Hellwig 83bac569c7 xfs: prevent gc from picking the same zone twice
When we are picking a zone for gc it might already be in the pipeline
which can lead to us moving the same data twice resulting in in write
amplification and a very unfortunate case where we keep on garbage
collecting the zone we just filled with migrated data stopping all
forward progress.

Fix this by introducing a count of on-going GC operations on a zone, and
skip any zone with ongoing GC when picking a new victim.

Fixes: 080d01c41 ("xfs: implement zoned garbage collection")
Signed-off-by: Hans Holmberg <hans.holmberg@wdc.com>
Co-developed-by: Hans Holmberg <hans.holmberg@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Tested-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2025-10-31 12:06:03 +01:00
..
xfs_ag_resv.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_ag_resv.h
xfs_ag.c xfs: remove the flags argument to xfs_buf_get_uncached 2025-03-18 14:47:45 +01:00
xfs_ag.h xfs: move the min and max group block numbers to xfs_group 2024-11-05 13:38:44 -08:00
xfs_alloc_btree.c xfs: refactor cmp_key_with_cur routines to take advantage of cmp_int() 2025-07-24 17:30:13 +02:00
xfs_alloc_btree.h
xfs_alloc.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_alloc.h xfs: support logging EFIs for realtime extents 2024-11-05 13:38:42 -08:00
xfs_attr_leaf.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_attr_leaf.h
xfs_attr_remote.c xfs: do not propagate ENODATA disk errors into xattr code 2025-08-26 11:00:33 +02:00
xfs_attr_remote.h
xfs_attr_sf.h
xfs_attr.c xfs: prepare to reuse the dquot pointer space in struct xfs_inode 2024-12-23 13:06:03 -08:00
xfs_attr.h
xfs_bit.c
xfs_bit.h
xfs_bmap_btree.c xfs: refactor cmp_key_with_cur routines to take advantage of cmp_int() 2025-07-24 17:30:13 +02:00
xfs_bmap_btree.h xfs: make xfs_iroot_realloc a bmap btree function 2024-12-23 13:06:02 -08:00
xfs_bmap.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_bmap.h xfs: allow block allocator to take an alignment hint 2025-05-07 14:25:31 -07:00
xfs_btree_mem.c xfs: create a shadow rmap btree during realtime rmap repair 2024-12-23 13:06:09 -08:00
xfs_btree_mem.h
xfs_btree_staging.c xfs: online repair of the realtime rmap btree 2024-12-23 13:06:09 -08:00
xfs_btree_staging.h
xfs_btree.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_btree.h xfs: refactor xfs_btree_diff_two_ptrs() to take advantage of cmp_int() 2025-07-24 17:30:13 +02:00
xfs_cksum.h
xfs_da_btree.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_da_btree.h
xfs_da_format.h
xfs_defer.c xfs: support logging EFIs for realtime extents 2024-11-05 13:38:42 -08:00
xfs_defer.h xfs: add a realtime flag to the refcount update log redo items 2024-12-23 13:06:11 -08:00
xfs_dir2_block.c
xfs_dir2_data.c
xfs_dir2_leaf.c
xfs_dir2_node.c
xfs_dir2_priv.h
xfs_dir2_sf.c
xfs_dir2.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_dir2.h xfs: mark xfs_dir_isempty static 2025-01-13 14:55:06 +01:00
xfs_dquot_buf.c xfs: use metadir for quota inodes 2024-11-05 13:38:45 -08:00
xfs_errortag.h xfs: centralize error tag definitions 2025-09-18 17:32:02 +02:00
xfs_exchmaps.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_exchmaps.h
xfs_format.h fs/xfs: replace strncpy with memtostr_pad() 2025-07-24 17:30:14 +02:00
xfs_fs.h xfs: enable fsmap reporting for internal RT devices 2025-03-03 08:17:08 -07:00
xfs_group.c xfs: improve the xg_active_ref check in xfs_group_free 2025-07-24 17:30:14 +02:00
xfs_group.h xfs: support zone gaps 2025-03-03 08:17:09 -07:00
xfs_health.h xfs: report realtime refcount btree corruption errors to the health system 2024-12-23 13:06:14 -08:00
xfs_ialloc_btree.c xfs: refactor cmp_key_with_cur routines to take advantage of cmp_int() 2025-07-24 17:30:13 +02:00
xfs_ialloc_btree.h
xfs_ialloc.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_ialloc.h
xfs_iext_tree.c
xfs_inode_buf.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_inode_buf.h xfs: enforce metadata inode flag 2024-11-05 13:38:31 -08:00
xfs_inode_fork.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_inode_fork.h xfs: make xfs_iroot_realloc a bmap btree function 2024-12-23 13:06:02 -08:00
xfs_inode_util.c xfs: remove deprecated sysctl knobs 2025-09-05 08:48:23 -07:00
xfs_inode_util.h
xfs_log_format.h xfs: move the XLOG_REG_ constants out of xfs_log_format.h 2025-09-16 14:08:47 +02:00
xfs_log_recover.h xfs: remove the xfs_trans_header_t typedef 2025-09-16 12:25:05 +02:00
xfs_log_rlimit.c xfs: commit CoW-based atomic writes atomically 2025-05-07 14:25:32 -07:00
xfs_metadir.c xfs: allow inode-based btrees to reserve space in the data device 2024-12-23 13:06:03 -08:00
xfs_metadir.h xfs: read and write metadata inode directory tree 2024-11-05 13:38:31 -08:00
xfs_metafile.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_metafile.h xfs: make metabtree reservations global 2025-03-03 08:16:43 -07:00
xfs_ondisk.h xfs: fix log CRC mismatches between i386 and other architectures 2025-09-16 12:27:41 +02:00
xfs_parent.c
xfs_parent.h
xfs_quota_defs.h xfs: use metadir for quota inodes 2024-11-05 13:38:45 -08:00
xfs_refcount_btree.c xfs: refactor cmp_key_with_cur routines to take advantage of cmp_int() 2025-07-24 17:30:13 +02:00
xfs_refcount_btree.h
xfs_refcount.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_refcount.h xfs: recover CoW leftovers in the realtime volume 2024-12-23 13:06:13 -08:00
xfs_rmap_btree.c xfs: refactor cmp_key_with_cur routines to take advantage of cmp_int() 2025-07-24 17:30:13 +02:00
xfs_rmap_btree.h
xfs_rmap.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_rmap.h xfs: add a realtime flag to the rmap update log redo items 2024-12-23 13:06:04 -08:00
xfs_rtbitmap.c xfs: remove the expr argument to XFS_TEST_ERROR 2025-09-18 17:32:02 +02:00
xfs_rtbitmap.h xfs: online repair of realtime bitmaps for a realtime group 2024-12-23 13:06:08 -08:00
xfs_rtgroup.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_rtgroup.h xfs: prevent gc from picking the same zone twice 2025-10-31 12:06:03 +01:00
xfs_rtrefcount_btree.c xfs: refactor cmp_key_with_cur routines to take advantage of cmp_int() 2025-07-24 17:30:13 +02:00
xfs_rtrefcount_btree.h xfs: create routine to allocate and initialize a realtime refcount btree inode 2024-12-23 13:06:12 -08:00
xfs_rtrmap_btree.c xfs: refactor cmp_key_with_cur routines to take advantage of cmp_int() 2025-07-24 17:30:13 +02:00
xfs_rtrmap_btree.h xfs: add a xfs_rtrmap_highest_rgbno helper 2025-03-03 08:16:45 -07:00
xfs_sb.c xfs: remove deprecated mount options 2025-09-05 08:48:23 -07:00
xfs_sb.h xfs: make xfs_rtblock_t a segmented address like xfs_fsblock_t 2024-11-05 13:38:44 -08:00
xfs_shared.h xfs: introduce realtime refcount btree ondisk definitions 2024-12-23 13:06:10 -08:00
xfs_symlink_remote.c xfs: return from xfs_symlink_verify early on V4 filesystems 2024-12-12 17:45:13 -08:00
xfs_symlink_remote.h
xfs_trans_inode.c
xfs_trans_resv.c xfs: allow sysadmins to specify a maximum atomic write limit at mount time 2025-05-07 14:25:33 -07:00
xfs_trans_resv.h xfs: allow sysadmins to specify a maximum atomic write limit at mount time 2025-05-07 14:25:33 -07:00
xfs_trans_space.c
xfs_trans_space.h xfs: realtime rmap btree transaction reservations 2024-12-23 13:06:04 -08:00
xfs_types.c xfs: make xfs_rtblock_t a segmented address like xfs_fsblock_t 2024-11-05 13:38:44 -08:00
xfs_types.h xfs: add support for zoned space reservations 2025-03-03 08:17:07 -07:00
xfs_zones.c xfs: support zone gaps 2025-03-03 08:17:09 -07:00
xfs_zones.h xfs: improve default maximum number of open zones 2025-09-18 17:32:39 +02:00