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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.