From: Brian Foster <bfoster@redhat.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: cem@kernel.org, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 02/21] xfs: create incore realtime group structures
Date: Tue, 10 Dec 2024 07:29:39 -0500 [thread overview]
Message-ID: <Z1g0MxNmVKpFgXsU@bfoster> (raw)
In-Reply-To: <173084396972.1871025.1072909621633581351.stgit@frogsfrogsfrogs>
On Tue, Nov 05, 2024 at 02:24:26PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
>
> Create an incore object that will contain information about a realtime
> allocation group. This will eventually enable us to shard the realtime
> section in a similar manner to how we shard the data section, but for
> now just a single object for the entire RT subvolume is created.
>
> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/Makefile | 1
> fs/xfs/libxfs/xfs_format.h | 3 +
> fs/xfs/libxfs/xfs_rtgroup.c | 151 +++++++++++++++++++++++++++++
> fs/xfs/libxfs/xfs_rtgroup.h | 217 +++++++++++++++++++++++++++++++++++++++++
> fs/xfs/libxfs/xfs_sb.c | 13 ++
> fs/xfs/libxfs/xfs_types.h | 8 +-
> fs/xfs/xfs_bmap_util.c | 3 -
> fs/xfs/xfs_buf_item_recover.c | 25 +++++
> fs/xfs/xfs_fsmap.c | 5 +
> fs/xfs/xfs_mount.c | 13 ++
> fs/xfs/xfs_mount.h | 13 ++
> fs/xfs/xfs_rtalloc.c | 5 +
> fs/xfs/xfs_trace.c | 1
> fs/xfs/xfs_trace.h | 1
> 14 files changed, 454 insertions(+), 5 deletions(-)
> create mode 100644 fs/xfs/libxfs/xfs_rtgroup.c
> create mode 100644 fs/xfs/libxfs/xfs_rtgroup.h
>
>
...
> diff --git a/fs/xfs/libxfs/xfs_rtgroup.h b/fs/xfs/libxfs/xfs_rtgroup.h
> new file mode 100644
> index 00000000000000..8872c27a9585fd
> --- /dev/null
> +++ b/fs/xfs/libxfs/xfs_rtgroup.h
> @@ -0,0 +1,217 @@
...
> +#ifdef CONFIG_XFS_RT
> +int xfs_rtgroup_alloc(struct xfs_mount *mp, xfs_rgnumber_t rgno,
> + xfs_rgnumber_t rgcount, xfs_rtbxlen_t rextents);
> +void xfs_rtgroup_free(struct xfs_mount *mp, xfs_rgnumber_t rgno);
> +
> +void xfs_free_rtgroups(struct xfs_mount *mp, xfs_rgnumber_t first_rgno,
> + xfs_rgnumber_t end_rgno);
> +int xfs_initialize_rtgroups(struct xfs_mount *mp, xfs_rgnumber_t first_rgno,
> + xfs_rgnumber_t end_rgno, xfs_rtbxlen_t rextents);
> +
> +xfs_rtxnum_t __xfs_rtgroup_extents(struct xfs_mount *mp, xfs_rgnumber_t rgno,
> + xfs_rgnumber_t rgcount, xfs_rtbxlen_t rextents);
> +xfs_rtxnum_t xfs_rtgroup_extents(struct xfs_mount *mp, xfs_rgnumber_t rgno);
> +
> +int xfs_update_last_rtgroup_size(struct xfs_mount *mp,
> + xfs_rgnumber_t prev_rgcount);
> +#else
> +static inline void xfs_free_rtgroups(struct xfs_mount *mp,
> + xfs_rgnumber_t first_rgno, xfs_rgnumber_t end_rgno)
> +{
> +}
> +
> +static inline int xfs_initialize_rtgroups(struct xfs_mount *mp,
> + xfs_rgnumber_t first_rgno, xfs_rgnumber_t end_rgno,
> + xfs_rtbxlen_t rextents)
> +{
> + return 0;
> +}
> +
> +# define xfs_rtgroup_extents(mp, rgno) (0)
> +# define xfs_update_last_rtgroup_size(mp, rgno) (-EOPNOTSUPP)
> +#endif /* CONFIG_XFS_RT */
This patch appears to cause a regression with CONFIG_XFS_RT disabled. On
generic/034 or generic/039, I see a mount failure and hang with the
following in dmesg:
[ 522.627881] XFS (dm-2): Mounting V5 Filesystem c984a654-8653-430a-9042-b59f26132eb6
[ 522.676496] XFS (dm-2): Starting recovery (logdev: internal)
[ 522.693551] XFS (dm-2): log mount/recovery failed: error -95
[ 522.701508] XFS (dm-2): log mount failed
It seems to be related to the xfs_update_last_rtgroup_size() definition
above in that the issue goes away if I replace the error code with zero,
but I've not looked further into it than that. I'm also not clear on if
the hang behavior is related or just a separate, latent issue triggered
by the injected error.
Brian
> +
> +#endif /* __LIBXFS_RTGROUP_H */
> diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
> index 4516824e3b9994..21891aa10ada02 100644
> --- a/fs/xfs/libxfs/xfs_sb.c
> +++ b/fs/xfs/libxfs/xfs_sb.c
> @@ -696,6 +696,9 @@ __xfs_sb_from_disk(
> to->sb_metadirino = be64_to_cpu(from->sb_metadirino);
> else
> to->sb_metadirino = NULLFSINO;
> +
> + to->sb_rgcount = 1;
> + to->sb_rgextents = 0;
> }
>
> void
> @@ -980,8 +983,18 @@ xfs_mount_sb_set_rextsize(
> struct xfs_mount *mp,
> struct xfs_sb *sbp)
> {
> + struct xfs_groups *rgs = &mp->m_groups[XG_TYPE_RTG];
> +
> mp->m_rtxblklog = log2_if_power2(sbp->sb_rextsize);
> mp->m_rtxblkmask = mask64_if_power2(sbp->sb_rextsize);
> +
> + mp->m_rgblocks = 0;
> + mp->m_rgblklog = 0;
> + mp->m_rgblkmask = (uint64_t)-1;
> +
> + rgs->blocks = 0;
> + rgs->blklog = 0;
> + rgs->blkmask = (uint64_t)-1;
> }
>
> /*
> diff --git a/fs/xfs/libxfs/xfs_types.h b/fs/xfs/libxfs/xfs_types.h
> index 25053a66c225ed..bf33c2b1e43e5f 100644
> --- a/fs/xfs/libxfs/xfs_types.h
> +++ b/fs/xfs/libxfs/xfs_types.h
> @@ -9,10 +9,12 @@
> typedef uint32_t prid_t; /* project ID */
>
> typedef uint32_t xfs_agblock_t; /* blockno in alloc. group */
> +typedef uint32_t xfs_rgblock_t; /* blockno in realtime group */
> typedef uint32_t xfs_agino_t; /* inode # within allocation grp */
> typedef uint32_t xfs_extlen_t; /* extent length in blocks */
> typedef uint32_t xfs_rtxlen_t; /* file extent length in rtextents */
> typedef uint32_t xfs_agnumber_t; /* allocation group number */
> +typedef uint32_t xfs_rgnumber_t; /* realtime group number */
> typedef uint64_t xfs_extnum_t; /* # of extents in a file */
> typedef uint32_t xfs_aextnum_t; /* # extents in an attribute fork */
> typedef int64_t xfs_fsize_t; /* bytes in a file */
> @@ -53,7 +55,9 @@ typedef void * xfs_failaddr_t;
> #define NULLFILEOFF ((xfs_fileoff_t)-1)
>
> #define NULLAGBLOCK ((xfs_agblock_t)-1)
> +#define NULLRGBLOCK ((xfs_rgblock_t)-1)
> #define NULLAGNUMBER ((xfs_agnumber_t)-1)
> +#define NULLRGNUMBER ((xfs_rgnumber_t)-1)
>
> #define NULLCOMMITLSN ((xfs_lsn_t)-1)
>
> @@ -214,11 +218,13 @@ enum xbtree_recpacking {
>
> enum xfs_group_type {
> XG_TYPE_AG,
> + XG_TYPE_RTG,
> XG_TYPE_MAX,
> } __packed;
>
> #define XG_TYPE_STRINGS \
> - { XG_TYPE_AG, "ag" }
> + { XG_TYPE_AG, "ag" }, \
> + { XG_TYPE_RTG, "rtg" }
>
> /*
> * Type verifier functions
> diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> index edaf193dbd5ccc..1ac0b0facb7fd3 100644
> --- a/fs/xfs/xfs_bmap_util.c
> +++ b/fs/xfs/xfs_bmap_util.c
> @@ -29,6 +29,7 @@
> #include "xfs_iomap.h"
> #include "xfs_reflink.h"
> #include "xfs_rtbitmap.h"
> +#include "xfs_rtgroup.h"
>
> /* Kernel only BMAP related definitions and functions */
>
> @@ -41,7 +42,7 @@ xfs_daddr_t
> xfs_fsb_to_db(struct xfs_inode *ip, xfs_fsblock_t fsb)
> {
> if (XFS_IS_REALTIME_INODE(ip))
> - return XFS_FSB_TO_BB(ip->i_mount, fsb);
> + return xfs_rtb_to_daddr(ip->i_mount, fsb);
> return XFS_FSB_TO_DADDR(ip->i_mount, fsb);
> }
>
> diff --git a/fs/xfs/xfs_buf_item_recover.c b/fs/xfs/xfs_buf_item_recover.c
> index c627ad3a3bbbfd..c8259ee482fd86 100644
> --- a/fs/xfs/xfs_buf_item_recover.c
> +++ b/fs/xfs/xfs_buf_item_recover.c
> @@ -25,6 +25,7 @@
> #include "xfs_alloc.h"
> #include "xfs_ag.h"
> #include "xfs_sb.h"
> +#include "xfs_rtgroup.h"
>
> /*
> * This is the number of entries in the l_buf_cancel_table used during
> @@ -704,6 +705,7 @@ xlog_recover_do_primary_sb_buffer(
> {
> struct xfs_dsb *dsb = bp->b_addr;
> xfs_agnumber_t orig_agcount = mp->m_sb.sb_agcount;
> + xfs_rgnumber_t orig_rgcount = mp->m_sb.sb_rgcount;
> int error;
>
> xlog_recover_do_reg_buffer(mp, item, bp, buf_f, current_lsn);
> @@ -722,6 +724,11 @@ xlog_recover_do_primary_sb_buffer(
> xfs_alert(mp, "Shrinking AG count in log recovery not supported");
> return -EFSCORRUPTED;
> }
> + if (mp->m_sb.sb_rgcount < orig_rgcount) {
> + xfs_warn(mp,
> + "Shrinking rtgroup count in log recovery not supported");
> + return -EFSCORRUPTED;
> + }
>
> /*
> * If the last AG was grown or shrunk, we also need to update the
> @@ -731,6 +738,17 @@ xlog_recover_do_primary_sb_buffer(
> if (error)
> return error;
>
> + /*
> + * If the last rtgroup was grown or shrunk, we also need to update the
> + * length in the in-core rtgroup structure and values depending on it.
> + * Ignore this on any filesystem with zero rtgroups.
> + */
> + if (orig_rgcount > 0) {
> + error = xfs_update_last_rtgroup_size(mp, orig_rgcount);
> + if (error)
> + return error;
> + }
> +
> /*
> * Initialize the new perags, and also update various block and inode
> * allocator setting based off the number of AGs or total blocks.
> @@ -744,6 +762,13 @@ xlog_recover_do_primary_sb_buffer(
> return error;
> }
> mp->m_alloc_set_aside = xfs_alloc_set_aside(mp);
> +
> + error = xfs_initialize_rtgroups(mp, orig_rgcount, mp->m_sb.sb_rgcount,
> + mp->m_sb.sb_rextents);
> + if (error) {
> + xfs_warn(mp, "Failed recovery rtgroup init: %d", error);
> + return error;
> + }
> return 0;
> }
>
> diff --git a/fs/xfs/xfs_fsmap.c b/fs/xfs/xfs_fsmap.c
> index 6cf4f00636a2d6..40beb8d75f26b1 100644
> --- a/fs/xfs/xfs_fsmap.c
> +++ b/fs/xfs/xfs_fsmap.c
> @@ -25,6 +25,7 @@
> #include "xfs_alloc_btree.h"
> #include "xfs_rtbitmap.h"
> #include "xfs_ag.h"
> +#include "xfs_rtgroup.h"
>
> /* Convert an xfs_fsmap to an fsmap. */
> static void
> @@ -735,7 +736,7 @@ xfs_getfsmap_rtdev_rtbitmap_helper(
> frec.start_daddr = info->end_daddr;
> } else {
> rtbno = xfs_rtx_to_rtb(mp, rec->ar_startext);
> - frec.start_daddr = XFS_FSB_TO_BB(mp, rtbno);
> + frec.start_daddr = xfs_rtb_to_daddr(mp, rtbno);
> }
>
> rtbno = xfs_rtx_to_rtb(mp, rec->ar_extcount);
> @@ -770,7 +771,7 @@ xfs_getfsmap_rtdev_rtbitmap(
>
> /* Adjust the low key if we are continuing from where we left off. */
> if (keys[0].fmr_length > 0) {
> - info->low_daddr = XFS_FSB_TO_BB(mp, start_rtb);
> + info->low_daddr = xfs_rtb_to_daddr(mp, start_rtb);
> if (info->low_daddr >= eofs)
> return 0;
> }
> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
> index 2dd2606fc7e3e4..9464eddf9212e9 100644
> --- a/fs/xfs/xfs_mount.c
> +++ b/fs/xfs/xfs_mount.c
> @@ -36,6 +36,7 @@
> #include "xfs_ag.h"
> #include "xfs_rtbitmap.h"
> #include "xfs_metafile.h"
> +#include "xfs_rtgroup.h"
> #include "scrub/stats.h"
>
> static DEFINE_MUTEX(xfs_uuid_table_mutex);
> @@ -834,10 +835,17 @@ xfs_mountfs(
> goto out_free_dir;
> }
>
> + error = xfs_initialize_rtgroups(mp, 0, sbp->sb_rgcount,
> + mp->m_sb.sb_rextents);
> + if (error) {
> + xfs_warn(mp, "Failed rtgroup init: %d", error);
> + goto out_free_perag;
> + }
> +
> if (XFS_IS_CORRUPT(mp, !sbp->sb_logblocks)) {
> xfs_warn(mp, "no log defined");
> error = -EFSCORRUPTED;
> - goto out_free_perag;
> + goto out_free_rtgroup;
> }
>
> error = xfs_inodegc_register_shrinker(mp);
> @@ -1072,6 +1080,8 @@ xfs_mountfs(
> if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp)
> xfs_buftarg_drain(mp->m_logdev_targp);
> xfs_buftarg_drain(mp->m_ddev_targp);
> + out_free_rtgroup:
> + xfs_free_rtgroups(mp, 0, mp->m_sb.sb_rgcount);
> out_free_perag:
> xfs_free_perag_range(mp, 0, mp->m_sb.sb_agcount);
> out_free_dir:
> @@ -1156,6 +1166,7 @@ xfs_unmountfs(
> xfs_errortag_clearall(mp);
> #endif
> shrinker_free(mp->m_inodegc_shrinker);
> + xfs_free_rtgroups(mp, 0, mp->m_sb.sb_rgcount);
> xfs_free_perag_range(mp, 0, mp->m_sb.sb_agcount);
> xfs_errortag_del(mp);
> xfs_error_sysfs_del(mp);
> diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
> index 71ed04ddd737de..d491e31d33aac3 100644
> --- a/fs/xfs/xfs_mount.h
> +++ b/fs/xfs/xfs_mount.h
> @@ -155,6 +155,7 @@ typedef struct xfs_mount {
> uint8_t m_agno_log; /* log #ag's */
> uint8_t m_sectbb_log; /* sectlog - BBSHIFT */
> int8_t m_rtxblklog; /* log2 of rextsize, if possible */
> + int8_t m_rgblklog; /* log2 of rt group sz if possible */
> uint m_blockmask; /* sb_blocksize-1 */
> uint m_blockwsize; /* sb_blocksize in words */
> uint m_blockwmask; /* blockwsize-1 */
> @@ -183,12 +184,14 @@ typedef struct xfs_mount {
> int m_logbsize; /* size of each log buffer */
> uint m_rsumlevels; /* rt summary levels */
> xfs_filblks_t m_rsumblocks; /* size of rt summary, FSBs */
> + uint32_t m_rgblocks; /* size of rtgroup in rtblocks */
> int m_fixedfsid[2]; /* unchanged for life of FS */
> uint m_qflags; /* quota status flags */
> uint64_t m_features; /* active filesystem features */
> uint64_t m_low_space[XFS_LOWSP_MAX];
> uint64_t m_low_rtexts[XFS_LOWSP_MAX];
> uint64_t m_rtxblkmask; /* rt extent block mask */
> + uint64_t m_rgblkmask; /* rt group block mask */
> struct xfs_ino_geometry m_ino_geo; /* inode geometry */
> struct xfs_trans_resv m_resv; /* precomputed res values */
> /* low free space thresholds */
> @@ -391,6 +394,16 @@ __XFS_HAS_FEAT(large_extent_counts, NREXT64)
> __XFS_HAS_FEAT(exchange_range, EXCHANGE_RANGE)
> __XFS_HAS_FEAT(metadir, METADIR)
>
> +static inline bool xfs_has_rtgroups(struct xfs_mount *mp)
> +{
> + return false;
> +}
> +
> +static inline bool xfs_has_rtsb(struct xfs_mount *mp)
> +{
> + return false;
> +}
> +
> /*
> * Some features are always on for v5 file systems, allow the compiler to
> * eliminiate dead code when building without v4 support.
> diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
> index 46a920b192d191..917c1a5e8f3180 100644
> --- a/fs/xfs/xfs_rtalloc.c
> +++ b/fs/xfs/xfs_rtalloc.c
> @@ -27,6 +27,7 @@
> #include "xfs_health.h"
> #include "xfs_da_format.h"
> #include "xfs_metafile.h"
> +#include "xfs_rtgroup.h"
>
> /*
> * Return whether there are any free extents in the size range given
> @@ -1136,6 +1137,7 @@ xfs_rtmount_inodes(
> {
> struct xfs_trans *tp;
> struct xfs_sb *sbp = &mp->m_sb;
> + struct xfs_rtgroup *rtg = NULL;
> int error;
>
> error = xfs_trans_alloc_empty(mp, &tp);
> @@ -1166,6 +1168,9 @@ xfs_rtmount_inodes(
> if (error)
> goto out_rele_summary;
>
> + while ((rtg = xfs_rtgroup_next(mp, rtg)))
> + rtg->rtg_extents = xfs_rtgroup_extents(mp, rtg_rgno(rtg));
> +
> error = xfs_alloc_rsum_cache(mp, sbp->sb_rbmblocks);
> if (error)
> goto out_rele_summary;
> diff --git a/fs/xfs/xfs_trace.c b/fs/xfs/xfs_trace.c
> index 1b9d75a54c5ea2..8f530e69c18ae7 100644
> --- a/fs/xfs/xfs_trace.c
> +++ b/fs/xfs/xfs_trace.c
> @@ -48,6 +48,7 @@
> #include "xfs_refcount.h"
> #include "xfs_metafile.h"
> #include "xfs_metadir.h"
> +#include "xfs_rtgroup.h"
>
> /*
> * We include this last to have the helpers above available for the trace
> diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
> index 0f3704f3c2e4e3..f66e5b590d7597 100644
> --- a/fs/xfs/xfs_trace.h
> +++ b/fs/xfs/xfs_trace.h
> @@ -219,6 +219,7 @@ DEFINE_PERAG_REF_EVENT(xfs_perag_clear_inode_tag);
> DEFINE_PERAG_REF_EVENT(xfs_reclaim_inodes_count);
>
> TRACE_DEFINE_ENUM(XG_TYPE_AG);
> +TRACE_DEFINE_ENUM(XG_TYPE_RTG);
>
> DECLARE_EVENT_CLASS(xfs_group_class,
> TP_PROTO(struct xfs_group *xg, unsigned long caller_ip),
>
>
next prev parent reply other threads:[~2024-12-10 12:27 UTC|newest]
Thread overview: 156+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-05 21:58 [PATCHBOMB 6.13 v5.5] xfs: metadata directories and realtime groups Darrick J. Wong
2024-11-05 22:04 ` [PATCHSET v5.5 01/10] xfs: convert perag to use xarrays Darrick J. Wong
2024-11-05 22:06 ` [PATCH 01/23] xfs: fix simplify extent lookup in xfs_can_free_eofblocks Darrick J. Wong
2024-11-05 22:07 ` [PATCH 02/23] xfs: fix superfluous clearing of info->low in __xfs_getfsmap_datadev Darrick J. Wong
2024-11-05 22:07 ` [PATCH 03/23] xfs: remove the unused pagb_count field in struct xfs_perag Darrick J. Wong
2024-11-05 22:07 ` [PATCH 04/23] xfs: remove the unused pag_active_wq " Darrick J. Wong
2024-11-05 22:07 ` [PATCH 05/23] xfs: pass a pag to xfs_difree_inode_chunk Darrick J. Wong
2024-11-05 22:08 ` [PATCH 06/23] xfs: remove the agno argument to xfs_free_ag_extent Darrick J. Wong
2024-11-05 22:08 ` [PATCH 07/23] xfs: add xfs_agbno_to_fsb and xfs_agbno_to_daddr helpers Darrick J. Wong
2024-11-05 22:08 ` [PATCH 08/23] xfs: add a xfs_agino_to_ino helper Darrick J. Wong
2024-11-05 22:08 ` [PATCH 09/23] xfs: pass a pag to xfs_extent_busy_{search,reuse} Darrick J. Wong
2024-11-05 22:09 ` [PATCH 10/23] xfs: keep a reference to the pag for busy extents Darrick J. Wong
2024-11-05 22:09 ` [PATCH 11/23] xfs: remove the mount field from struct xfs_busy_extents Darrick J. Wong
2024-11-05 22:09 ` [PATCH 12/23] xfs: remove the unused trace_xfs_iwalk_ag trace point Darrick J. Wong
2024-11-05 22:09 ` [PATCH 13/23] xfs: remove the unused xrep_bmap_walk_rmap " Darrick J. Wong
2024-11-05 22:10 ` [PATCH 14/23] xfs: constify pag arguments to trace points Darrick J. Wong
2024-11-05 22:10 ` [PATCH 15/23] xfs: pass a perag structure to the xfs_ag_resv_init_error trace point Darrick J. Wong
2024-11-05 22:10 ` [PATCH 16/23] xfs: pass objects to the xfs_irec_merge_{pre,post} trace points Darrick J. Wong
2024-11-05 22:10 ` [PATCH 17/23] xfs: pass the iunlink item to the xfs_iunlink_update_dinode trace point Darrick J. Wong
2024-11-05 22:11 ` [PATCH 18/23] xfs: pass objects to the xrep_ibt_walk_rmap tracepoint Darrick J. Wong
2024-11-05 22:11 ` [PATCH 19/23] xfs: pass the pag to the trace_xrep_calc_ag_resblks{,_btsize} trace points Darrick J. Wong
2024-11-05 22:11 ` [PATCH 20/23] xfs: pass the pag to the xrep_newbt_extent_class tracepoints Darrick J. Wong
2024-11-05 22:11 ` [PATCH 21/23] xfs: convert remaining trace points to pass pag structures Darrick J. Wong
2024-11-05 22:12 ` [PATCH 22/23] xfs: split xfs_initialize_perag Darrick J. Wong
2024-11-05 22:12 ` [PATCH 23/23] xfs: insert the pag structures into the xarray later Darrick J. Wong
2024-11-05 22:04 ` [PATCHSET v5.5 02/10] xfs: create a generic allocation group structure Darrick J. Wong
2024-11-05 22:12 ` [PATCH 01/16] xfs: factor out a xfs_iwalk_args helper Darrick J. Wong
2024-11-05 22:12 ` [PATCH 02/16] xfs: factor out a generic xfs_group structure Darrick J. Wong
2024-11-05 22:13 ` [PATCH 03/16] xfs: add a xfs_group_next_range helper Darrick J. Wong
2024-11-05 22:13 ` [PATCH 04/16] xfs: switch perag iteration from the for_each macros to a while based iterator Darrick J. Wong
2024-11-05 22:13 ` [PATCH 05/16] xfs: move metadata health tracking to the generic group structure Darrick J. Wong
2024-11-05 22:14 ` [PATCH 06/16] xfs: mark xfs_perag_intent_{hold,rele} static Darrick J. Wong
2024-11-05 22:14 ` [PATCH 07/16] xfs: move draining of deferred operations to the generic group structure Darrick J. Wong
2024-11-05 22:14 ` [PATCH 08/16] xfs: move the online repair rmap hooks " Darrick J. Wong
2024-11-05 22:14 ` [PATCH 09/16] xfs: return the busy generation from xfs_extent_busy_list_empty Darrick J. Wong
2024-11-05 22:15 ` [PATCH 10/16] xfs: convert extent busy tracepoints to the generic group structure Darrick J. Wong
2024-11-05 22:15 ` [PATCH 11/16] xfs: convert busy extent tracking " Darrick J. Wong
2024-11-05 22:15 ` [PATCH 12/16] xfs: add a generic group pointer to the btree cursor Darrick J. Wong
2024-11-05 22:15 ` [PATCH 13/16] xfs: store a generic xfs_group pointer in xfs_getfsmap_info Darrick J. Wong
2024-11-05 22:16 ` [PATCH 14/16] xfs: add group based bno conversion helpers Darrick J. Wong
2024-11-05 22:16 ` [PATCH 15/16] xfs: remove xfs_group_intent_hold and xfs_group_intent_rele Darrick J. Wong
2024-11-05 22:16 ` [PATCH 16/16] xfs: store a generic group structure in the intents Darrick J. Wong
2024-11-05 22:04 ` [PATCHSET v5.5 03/10] xfs: metadata inode directory trees Darrick J. Wong
2024-11-05 22:16 ` [PATCH 01/28] xfs: constify the xfs_sb predicates Darrick J. Wong
2024-11-05 22:17 ` [PATCH 02/28] xfs: constify the xfs_inode predicates Darrick J. Wong
2024-11-05 22:17 ` [PATCH 03/28] xfs: rename metadata inode predicates Darrick J. Wong
2024-11-05 22:17 ` [PATCH 04/28] xfs: standardize EXPERIMENTAL warning generation Darrick J. Wong
2024-11-05 22:17 ` [PATCH 05/28] xfs: define the on-disk format for the metadir feature Darrick J. Wong
2024-11-05 22:18 ` [PATCH 06/28] xfs: iget for metadata inodes Darrick J. Wong
2024-11-05 22:18 ` [PATCH 07/28] xfs: load metadata directory root at mount time Darrick J. Wong
2024-11-05 22:18 ` [PATCH 08/28] xfs: enforce metadata inode flag Darrick J. Wong
2024-11-05 22:18 ` [PATCH 09/28] xfs: read and write metadata inode directory tree Darrick J. Wong
2024-11-05 22:19 ` [PATCH 10/28] xfs: disable the agi rotor for metadata inodes Darrick J. Wong
2024-11-05 22:19 ` [PATCH 11/28] xfs: hide metadata inodes from everyone because they are special Darrick J. Wong
2024-11-05 22:19 ` [PATCH 12/28] xfs: advertise metadata directory feature Darrick J. Wong
2024-11-05 22:20 ` [PATCH 13/28] xfs: allow bulkstat to return metadata directories Darrick J. Wong
2024-11-05 22:20 ` [PATCH 14/28] xfs: don't count metadata directory files to quota Darrick J. Wong
2024-11-05 22:20 ` [PATCH 15/28] xfs: mark quota inodes as metadata files Darrick J. Wong
2024-11-05 22:20 ` [PATCH 16/28] xfs: adjust xfs_bmap_add_attrfork for metadir Darrick J. Wong
2024-11-05 22:21 ` [PATCH 17/28] xfs: record health problems with the metadata directory Darrick J. Wong
2024-11-05 22:21 ` [PATCH 18/28] xfs: refactor directory tree root predicates Darrick J. Wong
2024-11-05 22:21 ` [PATCH 19/28] xfs: do not count metadata directory files when doing online quotacheck Darrick J. Wong
2024-11-05 22:21 ` [PATCH 20/28] xfs: metadata files can have xattrs if metadir is enabled Darrick J. Wong
2024-11-05 22:22 ` [PATCH 21/28] xfs: adjust parent pointer scrubber for sb-rooted metadata files Darrick J. Wong
2024-11-05 22:22 ` [PATCH 22/28] xfs: fix di_metatype field of inodes that won't load Darrick J. Wong
2024-11-05 22:22 ` [PATCH 23/28] xfs: scrub metadata directories Darrick J. Wong
2024-11-05 22:22 ` [PATCH 24/28] xfs: check the metadata directory inumber in superblocks Darrick J. Wong
2024-11-05 22:23 ` [PATCH 25/28] xfs: move repair temporary files to the metadata directory tree Darrick J. Wong
2024-11-05 22:23 ` [PATCH 26/28] xfs: check metadata directory file path connectivity Darrick J. Wong
2024-11-05 22:23 ` [PATCH 27/28] xfs: confirm dotdot target before replacing it during a repair Darrick J. Wong
2024-11-05 22:23 ` [PATCH 28/28] xfs: repair metadata directory file path connectivity Darrick J. Wong
2024-11-05 22:04 ` [PATCHSET v5.5 04/10] xfs: create incore rt allocation groups Darrick J. Wong
2024-11-05 22:24 ` [PATCH 01/21] xfs: clean up xfs_getfsmap_helper arguments Darrick J. Wong
2024-11-05 22:24 ` [PATCH 02/21] xfs: create incore realtime group structures Darrick J. Wong
2024-12-10 12:29 ` Brian Foster [this message]
2024-12-11 3:51 ` Christoph Hellwig
2024-12-16 6:38 ` Christoph Hellwig
2024-12-16 13:25 ` Brian Foster
2024-11-05 22:24 ` [PATCH 03/21] xfs: define locking primitives for realtime groups Darrick J. Wong
2024-11-05 22:24 ` [PATCH 04/21] xfs: add a lockdep class key for rtgroup inodes Darrick J. Wong
2024-11-05 22:25 ` [PATCH 05/21] xfs: support caching rtgroup metadata inodes Darrick J. Wong
2024-11-05 22:25 ` [PATCH 06/21] xfs: add rtgroup-based realtime scrubbing context management Darrick J. Wong
2024-11-05 22:25 ` [PATCH 07/21] xfs: add a xfs_bmap_free_rtblocks helper Darrick J. Wong
2024-11-05 22:26 ` [PATCH 08/21] xfs: add a xfs_qm_unmount_rt helper Darrick J. Wong
2024-11-05 22:26 ` [PATCH 09/21] xfs: factor out a xfs_growfs_rt_alloc_blocks helper Darrick J. Wong
2024-11-05 22:26 ` [PATCH 10/21] xfs: cleanup xfs_getfsmap_rtdev_rtbitmap Darrick J. Wong
2024-11-05 22:26 ` [PATCH 11/21] xfs: split xfs_trim_rtdev_extents Darrick J. Wong
2024-11-05 22:27 ` [PATCH 12/21] xfs: move RT bitmap and summary information to the rtgroup Darrick J. Wong
2024-11-05 22:27 ` [PATCH 13/21] xfs: support creating per-RTG files in growfs Darrick J. Wong
2024-11-05 22:27 ` [PATCH 14/21] xfs: remove XFS_ILOCK_RT* Darrick J. Wong
2024-11-05 22:27 ` [PATCH 15/21] xfs: calculate RT bitmap and summary blocks based on sb_rextents Darrick J. Wong
2024-11-05 22:28 ` [PATCH 16/21] xfs: factor out a xfs_growfs_rt_alloc_fake_mount helper Darrick J. Wong
2024-11-05 22:28 ` [PATCH 17/21] xfs: use xfs_growfs_rt_alloc_fake_mount in xfs_growfs_rt_alloc_blocks Darrick J. Wong
2024-11-05 22:28 ` [PATCH 18/21] xfs: factor out a xfs_growfs_check_rtgeom helper Darrick J. Wong
2024-11-05 22:28 ` [PATCH 19/21] xfs: refactor xfs_rtbitmap_blockcount Darrick J. Wong
2024-11-05 22:29 ` [PATCH 20/21] xfs: refactor xfs_rtsummary_blockcount Darrick J. Wong
2024-11-05 22:29 ` [PATCH 21/21] xfs: make RT extent numbers relative to the rtgroup Darrick J. Wong
2024-11-05 22:05 ` [PATCHSET v5.5 05/10] xfs: preparation for realtime allocation groups Darrick J. Wong
2024-11-05 22:29 ` [PATCH 1/2] xfs: fix rt device offset calculations for FITRIM Darrick J. Wong
2024-11-05 22:29 ` [PATCH 2/2] iomap: add a merge boundary flag Darrick J. Wong
2024-11-05 22:05 ` [PATCHSET v5.5 06/10] xfs: shard the realtime section Darrick J. Wong
2024-11-05 22:30 ` [PATCH 01/34] xfs: define the format of rt groups Darrick J. Wong
2024-11-05 22:30 ` [PATCH 02/34] xfs: check the realtime superblock at mount time Darrick J. Wong
2024-11-05 22:30 ` [PATCH 03/34] xfs: update realtime super every time we update the primary fs super Darrick J. Wong
2024-11-05 22:30 ` [PATCH 04/34] xfs: export realtime group geometry via XFS_FSOP_GEOM Darrick J. Wong
2024-11-05 22:31 ` [PATCH 05/34] xfs: check that rtblock extents do not break rtsupers or rtgroups Darrick J. Wong
2024-11-05 22:31 ` [PATCH 06/34] xfs: add a helper to prevent bmap merges across rtgroup boundaries Darrick J. Wong
2024-11-05 22:31 ` [PATCH 07/34] xfs: add frextents to the lazysbcounters when rtgroups enabled Darrick J. Wong
2024-11-05 22:31 ` [PATCH 08/34] xfs: convert sick_map loops to use ARRAY_SIZE Darrick J. Wong
2024-11-05 22:32 ` [PATCH 09/34] xfs: record rt group metadata errors in the health system Darrick J. Wong
2024-11-05 22:32 ` [PATCH 10/34] xfs: export the geometry of realtime groups to userspace Darrick J. Wong
2024-11-05 22:32 ` [PATCH 11/34] xfs: add block headers to realtime bitmap and summary blocks Darrick J. Wong
2024-11-05 22:33 ` [PATCH 12/34] xfs: encode the rtbitmap in big endian format Darrick J. Wong
2024-11-05 22:33 ` [PATCH 13/34] xfs: encode the rtsummary " Darrick J. Wong
2024-11-05 22:33 ` [PATCH 14/34] xfs: grow the realtime section when realtime groups are enabled Darrick J. Wong
2024-11-05 22:33 ` [PATCH 15/34] xfs: store rtgroup information with a bmap intent Darrick J. Wong
2024-11-05 22:34 ` [PATCH 16/34] xfs: force swapext to a realtime file to use the file content exchange ioctl Darrick J. Wong
2024-11-05 22:34 ` [PATCH 17/34] xfs: support logging EFIs for realtime extents Darrick J. Wong
2024-11-05 22:34 ` [PATCH 18/34] xfs: support error injection when freeing rt extents Darrick J. Wong
2024-11-05 22:34 ` [PATCH 19/34] xfs: use realtime EFI to free extents when rtgroups are enabled Darrick J. Wong
2024-11-05 22:35 ` [PATCH 20/34] xfs: don't merge ioends across RTGs Darrick J. Wong
2024-11-05 22:35 ` [PATCH 21/34] xfs: make the RT allocator rtgroup aware Darrick J. Wong
2024-11-05 22:35 ` [PATCH 22/34] xfs: don't coalesce file mappings that cross rtgroup boundaries in scrub Darrick J. Wong
2024-11-05 22:35 ` [PATCH 23/34] xfs: scrub the realtime group superblock Darrick J. Wong
2024-11-05 22:36 ` [PATCH 24/34] xfs: repair " Darrick J. Wong
2024-11-05 22:36 ` [PATCH 25/34] xfs: scrub metadir paths for rtgroup metadata Darrick J. Wong
2024-11-05 22:36 ` [PATCH 26/34] xfs: mask off the rtbitmap and summary inodes when metadir in use Darrick J. Wong
2024-11-05 22:36 ` [PATCH 27/34] xfs: create helpers to deal with rounding xfs_fileoff_t to rtx boundaries Darrick J. Wong
2024-11-05 22:37 ` [PATCH 28/34] xfs: create helpers to deal with rounding xfs_filblks_t " Darrick J. Wong
2024-11-05 22:37 ` [PATCH 29/34] xfs: make xfs_rtblock_t a segmented address like xfs_fsblock_t Darrick J. Wong
2024-11-05 22:37 ` [PATCH 30/34] xfs: adjust min_block usage in xfs_verify_agbno Darrick J. Wong
2024-11-05 22:37 ` [PATCH 31/34] xfs: move the min and max group block numbers to xfs_group Darrick J. Wong
2024-11-05 22:38 ` [PATCH 32/34] xfs: port the perag discard code to handle generic groups Darrick J. Wong
2024-11-05 22:38 ` [PATCH 33/34] xfs: implement busy extent tracking for rtgroups Darrick J. Wong
2024-11-05 22:38 ` [PATCH 34/34] xfs: use rtgroup busy extent list for FITRIM Darrick J. Wong
2024-11-05 22:05 ` [PATCHSET v5.5 07/10] xfs: persist quota options with metadir Darrick J. Wong
2024-11-05 22:39 ` [PATCH 1/4] xfs: refactor xfs_qm_destroy_quotainos Darrick J. Wong
2024-11-05 22:39 ` [PATCH 2/4] xfs: use metadir for quota inodes Darrick J. Wong
2024-11-05 22:39 ` [PATCH 3/4] xfs: scrub quota file metapaths Darrick J. Wong
2024-11-05 22:39 ` [PATCH 4/4] xfs: persist quota flags with metadir Darrick J. Wong
2024-11-05 22:05 ` [PATCHSET v5.5 08/10] xfs: enable quota for realtime volumes Darrick J. Wong
2024-11-05 22:40 ` [PATCH 1/6] xfs: fix chown with rt quota Darrick J. Wong
2024-11-05 22:40 ` [PATCH 2/6] xfs: advertise realtime quota support in the xqm stat files Darrick J. Wong
2024-11-05 22:40 ` [PATCH 3/6] xfs: report realtime block quota limits on realtime directories Darrick J. Wong
2024-11-05 22:40 ` [PATCH 4/6] xfs: create quota preallocation watermarks for realtime quota Darrick J. Wong
2024-11-05 22:41 ` [PATCH 5/6] xfs: reserve quota for realtime files correctly Darrick J. Wong
2024-11-05 22:41 ` [PATCH 6/6] xfs: enable realtime quota again Darrick J. Wong
2024-11-05 22:06 ` [PATCHSET v5.5 09/10] xfs: enable metadir Darrick J. Wong
2024-11-05 22:41 ` [PATCH 1/2] xfs: update sb field checks when metadir is turned on Darrick J. Wong
2024-11-05 22:41 ` [PATCH 2/2] xfs: enable metadata directory feature Darrick J. Wong
2024-11-05 22:06 ` [PATCHSET v5.5 10/10] xfs: improve ondisk structure checks Darrick J. Wong
2024-11-05 22:42 ` [PATCH 1/3] xfs: convert struct typedefs in xfs_ondisk.h Darrick J. Wong
2024-11-05 22:42 ` [PATCH 2/3] xfs: separate space btree structures " Darrick J. Wong
2024-11-05 22:42 ` [PATCH 3/3] xfs: port ondisk structure checks from xfs/122 to the kernel Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2024-10-17 18:46 [PATCHSET v5.1 4/9] xfs: create incore rt allocation groups Darrick J. Wong
2024-10-17 19:00 ` [PATCH 02/21] xfs: create incore realtime group structures Darrick J. Wong
2024-10-11 0:34 [PATCHSET v5.0 4/9] xfs: create incore rt allocation groups Darrick J. Wong
2024-10-11 0:56 ` [PATCH 02/21] xfs: create incore realtime group structures Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z1g0MxNmVKpFgXsU@bfoster \
--to=bfoster@redhat.com \
--cc=cem@kernel.org \
--cc=djwong@kernel.org \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox