linux-next/fs/xfs/libxfs
Carlos Maiolino b939bcdca3 xfs: shard the realtime section [v5.5 06/10]
Right now, the realtime section uses a single pair of metadata inodes to
 store the free space information.  This presents a scalability problem
 since every thread trying to allocate or free rt extents have to lock
 these files.  Solve this problem by sharding the realtime section into
 separate realtime allocation groups.
 
 While we're at it, define a superblock to be stamped into the start of
 the rt section.  This enables utilities such as blkid to identify block
 devices containing realtime sections, and avoids the situation where
 anything written into block 0 of the realtime extent can be
 misinterpreted as file data.
 
 The best advantage for rtgroups will become evident later when we get to
 adding rmap and reflink to the realtime volume, since the geometry
 constraints are the same for rt groups and AGs.  Hence we can reuse all
 that code directly.
 
 This is a very large patchset, but it catches us up with 20 years of
 technical debt that have accumulated.
 
 With a bit of luck, this should all go splendidly.
 
 Signed-off-by: Darrick J. Wong <djwong@kernel.org>
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQQ2qTKExjcn+O1o2YRKO3ySh0YRpgUCZyqQdAAKCRBKO3ySh0YR
 pqk4AQD31pupAefiZ39TFLz0oA1+Q2WUOoLxH/3Ovqin1GJNPgD9EG04/14fDmRU
 WDUSVfU8JKKJYEXXZnLeJLsvEUL2EQ0=
 =1/oh
 -----END PGP SIGNATURE-----

Merge tag 'realtime-groups-6.13_2024-11-05' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into staging-merge

xfs: shard the realtime section [v5.5 06/10]

Right now, the realtime section uses a single pair of metadata inodes to
store the free space information.  This presents a scalability problem
since every thread trying to allocate or free rt extents have to lock
these files.  Solve this problem by sharding the realtime section into
separate realtime allocation groups.

While we're at it, define a superblock to be stamped into the start of
the rt section.  This enables utilities such as blkid to identify block
devices containing realtime sections, and avoids the situation where
anything written into block 0 of the realtime extent can be
misinterpreted as file data.

The best advantage for rtgroups will become evident later when we get to
adding rmap and reflink to the realtime volume, since the geometry
constraints are the same for rt groups and AGs.  Hence we can reuse all
that code directly.

This is a very large patchset, but it catches us up with 20 years of
technical debt that have accumulated.

With a bit of luck, this should all go splendidly.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
2024-11-12 11:00:42 +01:00
..
xfs_ag_resv.c xfs: factor out a generic xfs_group structure 2024-11-05 13:38:27 -08:00
xfs_ag_resv.h xfs: get rid of xfs_ag_resv_rmapbt_alloc 2024-07-04 14:36:13 +05:30
xfs_ag.c xfs: move the min and max group block numbers to xfs_group 2024-11-05 13:38:44 -08: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: add a generic group pointer to the btree cursor 2024-11-05 13:38:29 -08:00
xfs_alloc_btree.h xfs: standardize the btree maxrecs function parameters 2024-09-01 08:58:20 -07:00
xfs_alloc.c xfs: shard the realtime section [v5.5 06/10] 2024-11-12 11:00:42 +01:00
xfs_alloc.h xfs: support logging EFIs for realtime extents 2024-11-05 13:38:42 -08:00
xfs_attr_leaf.c xfs: distinguish extra split from real ENOSPC from xfs_attr3_leaf_split 2024-10-07 08:00:11 +02:00
xfs_attr_leaf.h xfs: return bool from xfs_attr3_leaf_add 2024-10-07 08:00:11 +02:00
xfs_attr_remote.c xfs: minor cleanups of xfs_attr3_rmt_blocks 2024-05-02 07:48:37 -07:00
xfs_attr_remote.h xfs: create a helper to compute the blockcount of a max sized remote value 2024-05-02 07:48:36 -07:00
xfs_attr_sf.h xfs: pass the attr value to put_listent when possible 2024-04-23 07:47:00 -07:00
xfs_attr.c xfs: adjust xfs_bmap_add_attrfork for metadir 2024-11-05 13:38:32 -08:00
xfs_attr.h xfs: fix xfs_init_attr_trans not handling explicit operation codes 2024-05-27 15:55:52 +05:30
xfs_bit.c
xfs_bit.h
xfs_bmap_btree.c xfs: standardize the btree maxrecs function parameters 2024-09-01 08:58:20 -07:00
xfs_bmap_btree.h xfs: standardize the btree maxrecs function parameters 2024-09-01 08:58:20 -07:00
xfs_bmap.c xfs: make xfs_rtblock_t a segmented address like xfs_fsblock_t 2024-11-05 13:38:44 -08:00
xfs_bmap.h xfs: store a generic group structure in the intents 2024-11-05 13:38:30 -08:00
xfs_btree_mem.c xfs: add a generic group pointer to the btree cursor 2024-11-05 13:38:29 -08:00
xfs_btree_mem.h xfs: launder in-memory btree buffers before transaction commit 2024-02-22 12:43:36 -08:00
xfs_btree_staging.c xfs: xfs_btree_bload_prep_block() should use __GFP_NOFAIL 2024-02-28 14:04:30 +05:30
xfs_btree_staging.h xfs: don't override bc_ops for staging btrees 2024-02-22 12:37:35 -08:00
xfs_btree.c xfs: add a generic group pointer to the btree cursor 2024-11-05 13:38:29 -08:00
xfs_btree.h xfs: add a generic group pointer to the btree cursor 2024-11-05 13:38:29 -08:00
xfs_cksum.h
xfs_da_btree.c xfs: distinguish extra split from real ENOSPC from xfs_attr3_leaf_split 2024-10-07 08:00:11 +02:00
xfs_da_btree.h xfs: create attr log item opcodes and formats for parent pointers 2024-04-23 07:46:57 -07:00
xfs_da_format.h xfs: turn XFS_ATTR3_RMT_BUF_SPACE into a function 2024-05-02 07:48:36 -07:00
xfs_defer.c xfs: support logging EFIs for realtime extents 2024-11-05 13:38:42 -08:00
xfs_defer.h xfs: support logging EFIs for realtime extents 2024-11-05 13:38:42 -08:00
xfs_dir2_block.c xfs: validate explicit directory block buffer owners 2024-04-15 14:58:52 -07:00
xfs_dir2_data.c xfs: don't walk off the end of a directory data block 2024-07-01 09:32:29 +05:30
xfs_dir2_leaf.c xfs: validate explicit directory free block owners 2024-04-15 14:58:52 -07:00
xfs_dir2_node.c xfs: validate explicit directory free block owners 2024-04-15 14:58:52 -07:00
xfs_dir2_priv.h xfs: don't walk off the end of a directory data block 2024-07-01 09:32:29 +05:30
xfs_dir2_sf.c xfs: convert remaining kmem_free() to kfree() 2024-02-13 18:07:34 +05:30
xfs_dir2.c xfs: move dirent update hooks to xfs_dir2.c 2024-07-02 11:37:00 -07:00
xfs_dir2.h xfs: move dirent update hooks to xfs_dir2.c 2024-07-02 11:37:00 -07:00
xfs_dquot_buf.c
xfs_errortag.h xfs: add error injection to test file mapping exchange recovery 2024-04-15 14:54:19 -07:00
xfs_exchmaps.c xfs: refactor dir format helpers 2024-04-26 11:21:46 +05:30
xfs_exchmaps.h xfs: use atomic extent swapping to fix user file fork data 2024-04-15 14:58:53 -07:00
xfs_format.h xfs: make xfs_rtblock_t a segmented address like xfs_fsblock_t 2024-11-05 13:38:44 -08:00
xfs_fs.h xfs: scrub metadir paths for rtgroup metadata 2024-11-05 13:38:43 -08:00
xfs_group.c xfs: add group based bno conversion helpers 2024-11-05 13:38:29 -08:00
xfs_group.h xfs: move the min and max group block numbers to xfs_group 2024-11-05 13:38:44 -08:00
xfs_health.h xfs: export the geometry of realtime groups to userspace 2024-11-05 13:38:40 -08:00
xfs_ialloc_btree.c xfs: move the min and max group block numbers to xfs_group 2024-11-05 13:38:44 -08:00
xfs_ialloc_btree.h xfs: standardize the btree maxrecs function parameters 2024-09-01 08:58:20 -07:00
xfs_ialloc.c xfs: disable the agi rotor for metadata inodes 2024-11-05 13:38:31 -08:00
xfs_ialloc.h xfs: pass the icreate args object to xfs_dialloc 2024-09-01 08:58:19 -07:00
xfs_iext_tree.c xfs: use __GFP_NOLOCKDEP instead of GFP_NOFS 2024-02-13 18:07:34 +05:30
xfs_inode_buf.c xfs: enforce metadata inode flag 2024-11-05 13:38:31 -08:00
xfs_inode_buf.h xfs: enforce metadata inode flag 2024-11-05 13:38:31 -08:00
xfs_inode_fork.c xfs: standardize the btree maxrecs function parameters 2024-09-01 08:58:20 -07:00
xfs_inode_fork.h xfs: simplify iext overflow checking and upgrade 2024-05-03 11:20:06 +05:30
xfs_inode_util.c xfs: define the on-disk format for the metadir feature 2024-11-05 13:38:31 -08:00
xfs_inode_util.h xfs: hoist inode free function to libxfs 2024-07-02 11:36:59 -07:00
xfs_log_format.h xfs: support logging EFIs for realtime extents 2024-11-05 13:38:42 -08:00
xfs_log_recover.h xfs: support logging EFIs for realtime extents 2024-11-05 13:38:42 -08:00
xfs_log_rlimit.c xfs: drop compatibility minimum log size computations for reflink 2024-04-23 07:47:01 -07:00
xfs_metadir.c xfs: record health problems with the metadata directory 2024-11-05 13:38:33 -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: read and write metadata inode directory tree 2024-11-05 13:38:31 -08:00
xfs_metafile.h xfs: read and write metadata inode directory tree 2024-11-05 13:38:31 -08:00
xfs_ondisk.h xfs: make xfs_rtblock_t a segmented address like xfs_fsblock_t 2024-11-05 13:38:44 -08:00
xfs_parent.c xfs: add raw parent pointer apis to support repair 2024-04-23 07:47:04 -07:00
xfs_parent.h xfs: add raw parent pointer apis to support repair 2024-04-23 07:47:04 -07:00
xfs_quota_defs.h xfs: remove unused parameter in macro XFS_DQUOT_LOGRES 2024-07-29 09:29:31 +05:30
xfs_refcount_btree.c xfs: add a generic group pointer to the btree cursor 2024-11-05 13:38:29 -08:00
xfs_refcount_btree.h xfs: standardize the btree maxrecs function parameters 2024-09-01 08:58:20 -07:00
xfs_refcount.c xfs: store a generic group structure in the intents 2024-11-05 13:38:30 -08:00
xfs_refcount.h xfs: store a generic group structure in the intents 2024-11-05 13:38:30 -08:00
xfs_rmap_btree.c xfs: add a generic group pointer to the btree cursor 2024-11-05 13:38:29 -08:00
xfs_rmap_btree.h xfs: standardize the btree maxrecs function parameters 2024-09-01 08:58:20 -07:00
xfs_rmap.c xfs: store a generic group structure in the intents 2024-11-05 13:38:30 -08:00
xfs_rmap.h xfs: store a generic group structure in the intents 2024-11-05 13:38:30 -08:00
xfs_rtbitmap.c xfs: implement busy extent tracking for rtgroups 2024-11-05 13:38:44 -08:00
xfs_rtbitmap.h xfs: make xfs_rtblock_t a segmented address like xfs_fsblock_t 2024-11-05 13:38:44 -08:00
xfs_rtgroup.c xfs: move the min and max group block numbers to xfs_group 2024-11-05 13:38:44 -08:00
xfs_rtgroup.h xfs: implement busy extent tracking for rtgroups 2024-11-05 13:38:44 -08:00
xfs_sb.c xfs: shard the realtime section [v5.5 06/10] 2024-11-12 11:00:42 +01: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: grow the realtime section when realtime groups are enabled 2024-11-05 13:38:41 -08:00
xfs_symlink_remote.c xfs: pass the owner to xfs_symlink_write_target 2024-04-15 14:58:57 -07:00
xfs_symlink_remote.h xfs: pass the owner to xfs_symlink_write_target 2024-04-15 14:58:57 -07:00
xfs_trans_inode.c xfs: implement atime updates in xfs_trans_ichgtime 2024-07-02 11:36:56 -07:00
xfs_trans_resv.c xfs: refactor xfs_rtbitmap_blockcount 2024-11-05 13:38:38 -08:00
xfs_trans_resv.h xfs: rename xfs_*alloc*_log_count to _block_count 2022-04-28 10:25:59 -07:00
xfs_trans_space.c xfs: Add parent pointers to rename 2024-04-23 07:46:59 -07:00
xfs_trans_space.h xfs: Add parent pointers to rename 2024-04-23 07:46:59 -07: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: create incore realtime group structures 2024-11-05 13:38:35 -08:00