From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Andrey Albershteyn <aalbersh@kernel.org>,
Hans Holmberg <hans.holmberg@wdc.com>,
linux-xfs@vger.kernel.org
Subject: Re: [PATCH 43/45] xfs_scrub: handle internal RT devices
Date: Wed, 9 Apr 2025 12:34:34 -0700 [thread overview]
Message-ID: <20250409193434.GO6283@frogsfrogsfrogs> (raw)
In-Reply-To: <20250409075557.3535745-44-hch@lst.de>
On Wed, Apr 09, 2025 at 09:55:46AM +0200, Christoph Hellwig wrote:
> Handle the synthetic fmr_device values.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Looks fine,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> scrub/phase6.c | 65 ++++++++++++++++++++++++++++--------------------
> scrub/phase7.c | 28 +++++++++++++++------
> scrub/spacemap.c | 17 +++++++++----
> 3 files changed, 70 insertions(+), 40 deletions(-)
>
> diff --git a/scrub/phase6.c b/scrub/phase6.c
> index 2a52b2c92419..abf6f9713f1a 100644
> --- a/scrub/phase6.c
> +++ b/scrub/phase6.c
> @@ -56,12 +56,21 @@ dev_to_pool(
> struct media_verify_state *vs,
> dev_t dev)
> {
> - if (dev == ctx->fsinfo.fs_datadev)
> - return vs->rvp_data;
> - else if (dev == ctx->fsinfo.fs_logdev)
> - return vs->rvp_log;
> - else if (dev == ctx->fsinfo.fs_rtdev)
> - return vs->rvp_realtime;
> + if (ctx->mnt.fsgeom.rtstart) {
> + if (dev == XFS_DEV_DATA)
> + return vs->rvp_data;
> + if (dev == XFS_DEV_LOG)
> + return vs->rvp_log;
> + if (dev == XFS_DEV_RT)
> + return vs->rvp_realtime;
> + } else {
> + if (dev == ctx->fsinfo.fs_datadev)
> + return vs->rvp_data;
> + if (dev == ctx->fsinfo.fs_logdev)
> + return vs->rvp_log;
> + if (dev == ctx->fsinfo.fs_rtdev)
> + return vs->rvp_realtime;
> + }
> abort();
> }
>
> @@ -71,12 +80,21 @@ disk_to_dev(
> struct scrub_ctx *ctx,
> struct disk *disk)
> {
> - if (disk == ctx->datadev)
> - return ctx->fsinfo.fs_datadev;
> - else if (disk == ctx->logdev)
> - return ctx->fsinfo.fs_logdev;
> - else if (disk == ctx->rtdev)
> - return ctx->fsinfo.fs_rtdev;
> + if (ctx->mnt.fsgeom.rtstart) {
> + if (disk == ctx->datadev)
> + return XFS_DEV_DATA;
> + if (disk == ctx->logdev)
> + return XFS_DEV_LOG;
> + if (disk == ctx->rtdev)
> + return XFS_DEV_RT;
> + } else {
> + if (disk == ctx->datadev)
> + return ctx->fsinfo.fs_datadev;
> + if (disk == ctx->logdev)
> + return ctx->fsinfo.fs_logdev;
> + if (disk == ctx->rtdev)
> + return ctx->fsinfo.fs_rtdev;
> + }
> abort();
> }
>
> @@ -87,11 +105,9 @@ bitmap_for_disk(
> struct disk *disk,
> struct media_verify_state *vs)
> {
> - dev_t dev = disk_to_dev(ctx, disk);
> -
> - if (dev == ctx->fsinfo.fs_datadev)
> + if (disk == ctx->datadev)
> return vs->d_bad;
> - else if (dev == ctx->fsinfo.fs_rtdev)
> + if (disk == ctx->rtdev)
> return vs->r_bad;
> return NULL;
> }
> @@ -501,14 +517,11 @@ report_ioerr(
> .length = length,
> };
> struct disk_ioerr_report *dioerr = arg;
> - dev_t dev;
> -
> - dev = disk_to_dev(dioerr->ctx, dioerr->disk);
>
> /* Go figure out which blocks are bad from the fsmap. */
> - keys[0].fmr_device = dev;
> + keys[0].fmr_device = disk_to_dev(dioerr->ctx, dioerr->disk);
> keys[0].fmr_physical = start;
> - keys[1].fmr_device = dev;
> + keys[1].fmr_device = keys[0].fmr_device;
> keys[1].fmr_physical = start + length - 1;
> keys[1].fmr_owner = ULLONG_MAX;
> keys[1].fmr_offset = ULLONG_MAX;
> @@ -675,14 +688,12 @@ remember_ioerr(
> int ret;
>
> if (!length) {
> - dev_t dev = disk_to_dev(ctx, disk);
> -
> - if (dev == ctx->fsinfo.fs_datadev)
> + if (disk == ctx->datadev)
> vs->d_trunc = true;
> - else if (dev == ctx->fsinfo.fs_rtdev)
> - vs->r_trunc = true;
> - else if (dev == ctx->fsinfo.fs_logdev)
> + else if (disk == ctx->logdev)
> vs->l_trunc = true;
> + else if (disk == ctx->rtdev)
> + vs->r_trunc = true;
> return;
> }
>
> diff --git a/scrub/phase7.c b/scrub/phase7.c
> index 01097b678798..e25502668b1c 100644
> --- a/scrub/phase7.c
> +++ b/scrub/phase7.c
> @@ -68,25 +68,37 @@ count_block_summary(
> void *arg)
> {
> struct summary_counts *counts;
> + bool is_rt = false;
> unsigned long long len;
> int ret;
>
> + if (ctx->mnt.fsgeom.rtstart) {
> + if (fsmap->fmr_device == XFS_DEV_LOG)
> + return 0;
> + if (fsmap->fmr_device == XFS_DEV_RT)
> + is_rt = true;
> + } else {
> + if (fsmap->fmr_device == ctx->fsinfo.fs_logdev)
> + return 0;
> + if (fsmap->fmr_device == ctx->fsinfo.fs_rtdev)
> + is_rt = true;
> + }
> +
> counts = ptvar_get((struct ptvar *)arg, &ret);
> if (ret) {
> str_liberror(ctx, -ret, _("retrieving summary counts"));
> return -ret;
> }
> - if (fsmap->fmr_device == ctx->fsinfo.fs_logdev)
> - return 0;
> +
> if ((fsmap->fmr_flags & FMR_OF_SPECIAL_OWNER) &&
> fsmap->fmr_owner == XFS_FMR_OWN_FREE) {
> uint64_t blocks;
>
> blocks = cvt_b_to_off_fsbt(&ctx->mnt, fsmap->fmr_length);
> - if (fsmap->fmr_device == ctx->fsinfo.fs_datadev)
> - hist_add(&counts->datadev_hist, blocks);
> - else if (fsmap->fmr_device == ctx->fsinfo.fs_rtdev)
> + if (is_rt)
> hist_add(&counts->rtdev_hist, blocks);
> + else
> + hist_add(&counts->datadev_hist, blocks);
> return 0;
> }
>
> @@ -94,10 +106,10 @@ count_block_summary(
>
> /* freesp btrees live in free space, need to adjust counters later. */
> if ((fsmap->fmr_flags & FMR_OF_SPECIAL_OWNER) &&
> - fsmap->fmr_owner == XFS_FMR_OWN_AG) {
> + fsmap->fmr_owner == XFS_FMR_OWN_AG)
> counts->agbytes += fsmap->fmr_length;
> - }
> - if (fsmap->fmr_device == ctx->fsinfo.fs_rtdev) {
> +
> + if (is_rt) {
> /* Count realtime extents. */
> counts->rbytes += len;
> } else {
> diff --git a/scrub/spacemap.c b/scrub/spacemap.c
> index c293ab44a528..1ee4d1946d3d 100644
> --- a/scrub/spacemap.c
> +++ b/scrub/spacemap.c
> @@ -103,9 +103,12 @@ scan_ag_rmaps(
> bperag = (off_t)ctx->mnt.fsgeom.agblocks *
> (off_t)ctx->mnt.fsgeom.blocksize;
>
> - keys[0].fmr_device = ctx->fsinfo.fs_datadev;
> + if (ctx->mnt.fsgeom.rtstart)
> + keys[0].fmr_device = XFS_DEV_DATA;
> + else
> + keys[0].fmr_device = ctx->fsinfo.fs_datadev;
> keys[0].fmr_physical = agno * bperag;
> - keys[1].fmr_device = ctx->fsinfo.fs_datadev;
> + keys[1].fmr_device = keys[0].fmr_device;
> keys[1].fmr_physical = ((agno + 1) * bperag) - 1;
> keys[1].fmr_owner = ULLONG_MAX;
> keys[1].fmr_offset = ULLONG_MAX;
> @@ -140,9 +143,12 @@ scan_rtg_rmaps(
> off_t bperrg = bytes_per_rtgroup(&ctx->mnt.fsgeom);
> int ret;
>
> - keys[0].fmr_device = ctx->fsinfo.fs_rtdev;
> + if (ctx->mnt.fsgeom.rtstart)
> + keys[0].fmr_device = XFS_DEV_RT;
> + else
> + keys[0].fmr_device = ctx->fsinfo.fs_rtdev;
> keys[0].fmr_physical = (xfs_rtblock_t)rgno * bperrg;
> - keys[1].fmr_device = ctx->fsinfo.fs_rtdev;
> + keys[1].fmr_device = keys[0].fmr_device;
> keys[1].fmr_physical = ((rgno + 1) * bperrg) - 1;
> keys[1].fmr_owner = ULLONG_MAX;
> keys[1].fmr_offset = ULLONG_MAX;
> @@ -216,7 +222,8 @@ scan_log_rmaps(
> {
> struct scrub_ctx *ctx = (struct scrub_ctx *)wq->wq_ctx;
>
> - scan_dev_rmaps(ctx, ctx->fsinfo.fs_logdev, arg);
> + scan_dev_rmaps(ctx, ctx->mnt.fsgeom.rtstart ? 2 : ctx->fsinfo.fs_logdev,
> + arg);
> }
>
> /*
> --
> 2.47.2
>
>
next prev parent reply other threads:[~2025-04-09 19:34 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-09 7:55 xfsprogs support for zoned devices Christoph Hellwig
2025-04-09 7:55 ` [PATCH 01/45] xfs: generalize the freespace and reserved blocks handling Christoph Hellwig
2025-04-09 7:55 ` [PATCH 02/45] FIXUP: " Christoph Hellwig
2025-04-09 15:32 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 03/45] xfs: make metabtree reservations global Christoph Hellwig
2025-04-09 7:55 ` [PATCH 04/45] FIXUP: " Christoph Hellwig
2025-04-09 15:43 ` Darrick J. Wong
2025-04-10 6:00 ` Christoph Hellwig
2025-04-09 7:55 ` [PATCH 05/45] xfs: reduce metafile reservations Christoph Hellwig
2025-04-09 7:55 ` [PATCH 06/45] xfs: add a rtg_blocks helper Christoph Hellwig
2025-04-09 7:55 ` [PATCH 07/45] xfs: move xfs_bmapi_reserve_delalloc to xfs_iomap.c Christoph Hellwig
2025-04-09 7:55 ` [PATCH 08/45] xfs: support XFS_BMAPI_REMAP in xfs_bmap_del_extent_delay Christoph Hellwig
2025-04-09 7:55 ` [PATCH 09/45] xfs: add a xfs_rtrmap_highest_rgbno helper Christoph Hellwig
2025-04-09 7:55 ` [PATCH 10/45] xfs: define the zoned on-disk format Christoph Hellwig
2025-04-09 7:55 ` [PATCH 11/45] FIXUP: " Christoph Hellwig
2025-04-09 15:47 ` Darrick J. Wong
2025-04-09 16:04 ` Darrick J. Wong
2025-04-10 6:01 ` Christoph Hellwig
2025-04-10 16:31 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 12/45] xfs: allow internal RT devices for zoned mode Christoph Hellwig
2025-04-09 7:55 ` [PATCH 13/45] FIXUP: " Christoph Hellwig
2025-04-09 15:55 ` Darrick J. Wong
2025-04-10 6:09 ` Christoph Hellwig
2025-04-09 7:55 ` [PATCH 14/45] xfs: export zoned geometry via XFS_FSOP_GEOM Christoph Hellwig
2025-04-09 7:55 ` [PATCH 15/45] xfs: disable sb_frextents for zoned file systems Christoph Hellwig
2025-04-09 7:55 ` [PATCH 16/45] xfs: parse and validate hardware zone information Christoph Hellwig
2025-04-09 7:55 ` [PATCH 17/45] FIXUP: " Christoph Hellwig
2025-04-09 15:56 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 18/45] xfs: add the zoned space allocator Christoph Hellwig
2025-04-09 7:55 ` [PATCH 19/45] xfs: add support for zoned space reservations Christoph Hellwig
2025-04-09 7:55 ` [PATCH 20/45] FIXUP: " Christoph Hellwig
2025-04-09 15:56 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 21/45] xfs: implement zoned garbage collection Christoph Hellwig
2025-04-09 7:55 ` [PATCH 22/45] xfs: enable fsmap reporting for internal RT devices Christoph Hellwig
2025-04-09 7:55 ` [PATCH 23/45] xfs: enable the zoned RT device feature Christoph Hellwig
2025-04-09 7:55 ` [PATCH 24/45] xfs: support zone gaps Christoph Hellwig
2025-04-09 7:55 ` [PATCH 25/45] FIXUP: " Christoph Hellwig
2025-04-09 15:57 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 26/45] libfrog: report the zoned flag Christoph Hellwig
2025-04-09 15:58 ` Darrick J. Wong
2025-04-10 6:14 ` Christoph Hellwig
2025-04-10 16:36 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 27/45] xfs_repair: support repairing zoned file systems Christoph Hellwig
2025-04-09 16:10 ` Darrick J. Wong
2025-04-10 6:27 ` Christoph Hellwig
2025-04-10 16:41 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 28/45] xfs_repair: fix the RT device check in process_dinode_int Christoph Hellwig
2025-04-09 16:11 ` Darrick J. Wong
2025-04-10 6:29 ` Christoph Hellwig
2025-04-09 7:55 ` [PATCH 29/45] xfs_repair: validate rt groups vs reported hardware zones Christoph Hellwig
2025-04-09 18:41 ` Darrick J. Wong
2025-04-10 6:34 ` Christoph Hellwig
2025-04-10 16:43 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 30/45] xfs_mkfs: support creating zoned file systems Christoph Hellwig
2025-04-09 18:54 ` Darrick J. Wong
2025-04-10 6:45 ` Christoph Hellwig
2025-04-10 16:45 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 31/45] xfs_mkfs: calculate zone overprovisioning when specifying size Christoph Hellwig
2025-04-09 19:06 ` Darrick J. Wong
2025-04-10 7:00 ` Christoph Hellwig
2025-04-09 7:55 ` [PATCH 32/45] xfs_mkfs: default to rtinherit=1 for zoned file systems Christoph Hellwig
2025-04-09 18:59 ` Darrick J. Wong
2025-04-10 6:45 ` Christoph Hellwig
2025-04-09 7:55 ` [PATCH 33/45] xfs_mkfs: reflink conflicts with zoned file systems for now Christoph Hellwig
2025-04-09 19:00 ` Darrick J. Wong
2025-04-10 6:46 ` Christoph Hellwig
2025-04-10 16:47 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 34/45] xfs_mkfs: document the new zoned options in the man page Christoph Hellwig
2025-04-09 19:00 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 35/45] libfrog: report the zoned geometry Christoph Hellwig
2025-04-09 19:01 ` Darrick J. Wong
2025-04-10 7:02 ` Christoph Hellwig
2025-04-09 7:55 ` [PATCH 36/45] man: document XFS_FSOP_GEOM_FLAGS_ZONED Christoph Hellwig
2025-04-09 19:13 ` Darrick J. Wong
2025-04-10 6:53 ` Christoph Hellwig
2025-04-10 16:47 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 37/45] xfs_io: correctly report RGs with internal rt dev in bmap output Christoph Hellwig
2025-04-09 22:22 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 38/45] xfs_io: don't re-query fs_path information in fsmap_f Christoph Hellwig
2025-04-09 20:48 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 39/45] xfs_io: don't re-query geometry " Christoph Hellwig
2025-04-09 20:46 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 40/45] xfs_io: handle internal RT devices in fsmap output Christoph Hellwig
2025-04-09 21:48 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 41/45] xfs_spaceman: handle internal RT devices Christoph Hellwig
2025-04-09 19:29 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 42/45] xfs_scrub: support internal RT sections Christoph Hellwig
2025-04-09 19:30 ` Darrick J. Wong
2025-04-10 6:57 ` Christoph Hellwig
2025-04-09 7:55 ` [PATCH 43/45] xfs_scrub: handle internal RT devices Christoph Hellwig
2025-04-09 19:34 ` Darrick J. Wong [this message]
2025-04-09 7:55 ` [PATCH 44/45] xfs_mdrestore: support " Christoph Hellwig
2025-04-09 19:36 ` Darrick J. Wong
2025-04-09 7:55 ` [PATCH 45/45] xfs_growfs: " Christoph Hellwig
2025-04-09 19:35 ` 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=20250409193434.GO6283@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=aalbersh@kernel.org \
--cc=hans.holmberg@wdc.com \
--cc=hch@lst.de \
--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.