All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Carlos Maiolino <cem@kernel.org>,
	Hans Holmberg <hans.holmberg@wdc.com>,
	linux-xfs@vger.kernel.org
Subject: Re: [PATCH 35/43] xfs: enable fsmap reporting for internal RT devices
Date: Fri, 13 Dec 2024 15:11:15 -0800	[thread overview]
Message-ID: <20241213231115.GF6678@frogsfrogsfrogs> (raw)
In-Reply-To: <20241211085636.1380516-36-hch@lst.de>

On Wed, Dec 11, 2024 at 09:55:00AM +0100, Christoph Hellwig wrote:
> File system with internal RT devices are a bit odd in that we need
> to report AGs and RGs.  To make this happen use separate synthetic
> fmr_device values for the different sections instead of the dev_t
> mapping used by other XFS configurations.
> 
> The data device is reported as file system metadata before the
> start of the RGs for the synthetic RT fmr_device.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  fs/xfs/libxfs/xfs_fs.h |  9 +++++
>  fs/xfs/xfs_fsmap.c     | 80 +++++++++++++++++++++++++++++++++---------
>  2 files changed, 72 insertions(+), 17 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_fs.h b/fs/xfs/libxfs/xfs_fs.h
> index 5e66fb2b2cc7..12463ba766da 100644
> --- a/fs/xfs/libxfs/xfs_fs.h
> +++ b/fs/xfs/libxfs/xfs_fs.h
> @@ -1082,6 +1082,15 @@ struct xfs_rtgroup_geometry {
>  #define XFS_IOC_COMMIT_RANGE	     _IOW ('X', 131, struct xfs_commit_range)
>  /*	XFS_IOC_GETFSUUID ---------- deprecated 140	 */
>  
> +/*
> + * Devices supported by a single XFS file system.  Reported in fsmaps fmr_device
> + * when using internal RT devices.
> + */
> +enum xfs_device {
> +	XFS_DEV_DATA	= 1,
> +	XFS_DEV_LOG	= 2,
> +	XFS_DEV_RT	= 3,
> +};
> 
>  #ifndef HAVE_BBMACROS
>  /*
> diff --git a/fs/xfs/xfs_fsmap.c b/fs/xfs/xfs_fsmap.c
> index 917d4d0e51b3..a4bc1642fe56 100644
> --- a/fs/xfs/xfs_fsmap.c
> +++ b/fs/xfs/xfs_fsmap.c
> @@ -879,17 +879,39 @@ xfs_getfsmap_rtdev_rmapbt(
>  	struct xfs_mount		*mp = tp->t_mountp;
>  	struct xfs_rtgroup		*rtg = NULL;
>  	struct xfs_btree_cur		*bt_cur = NULL;
> +	xfs_daddr_t			rtstart_daddr;
>  	xfs_rtblock_t			start_rtb;
>  	xfs_rtblock_t			end_rtb;
>  	xfs_rgnumber_t			start_rg, end_rg;
>  	uint64_t			eofs;
>  	int				error = 0;
>  
> -	eofs = XFS_FSB_TO_BB(mp, mp->m_sb.sb_rblocks);
> +	eofs = XFS_FSB_TO_BB(mp, mp->m_sb.sb_rtstart + mp->m_sb.sb_rblocks);
>  	if (keys[0].fmr_physical >= eofs)
>  		return 0;
> -	start_rtb = xfs_daddr_to_rtb(mp, keys[0].fmr_physical);
> -	end_rtb = xfs_daddr_to_rtb(mp, min(eofs - 1, keys[1].fmr_physical));
> +
> +	rtstart_daddr = XFS_FSB_TO_BB(mp, mp->m_sb.sb_rtstart);
> +	if (keys[0].fmr_physical < rtstart_daddr) {
> +		struct xfs_fsmap_irec		frec = {
> +			.owner			= XFS_RMAP_OWN_FS,
> +			.len_daddr		= rtstart_daddr,
> +		};
> +
> +		/* Adjust the low key if we are continuing from where we left off. */
> +		if (keys[0].fmr_length > 0) {
> +			info->low_daddr = keys[0].fmr_physical + keys[0].fmr_length;
> +			return 0;
> +		}
> +
> +		/* Fabricate an rmap entry for space occupied by the data dev */
> +		error = xfs_getfsmap_helper(tp, info, &frec);
> +		if (error)
> +			return error;

Seeing as you report different fmr_device values for the data and rt
devices, I'd have though that you'd want the rt fsmappings to start at
fmr_physical == 0.  But then I guess for the sb_rtstart > 0 case, the
rtblock values that get written into the bmbt have that rtstart value
added in, don't they?

--D

> +	}
> +
> +	start_rtb = xfs_daddr_to_rtb(mp, rtstart_daddr + keys[0].fmr_physical);
> +	end_rtb = xfs_daddr_to_rtb(mp, rtstart_daddr +
> +			min(eofs - 1, keys[1].fmr_physical));
>  
>  	info->missing_owner = XFS_FMR_OWN_FREE;
>  
> @@ -1004,22 +1026,40 @@ xfs_getfsmap_rtdev_rmapbt(
>  }
>  #endif /* CONFIG_XFS_RT */
>  
> +static uint32_t
> +xfs_getfsmap_device(
> +	struct xfs_mount	*mp,
> +	enum xfs_device		dev)
> +{
> +	if (mp->m_sb.sb_rtstart)
> +		return dev;
> +
> +	switch (dev) {
> +	case XFS_DEV_DATA:
> +		return new_encode_dev(mp->m_ddev_targp->bt_dev);
> +	case XFS_DEV_LOG:
> +		return new_encode_dev(mp->m_logdev_targp->bt_dev);
> +	case XFS_DEV_RT:
> +		if (!mp->m_rtdev_targp)
> +			break;
> +		return new_encode_dev(mp->m_rtdev_targp->bt_dev);
> +	}
> +
> +	return -1;
> +}
> +
>  /* Do we recognize the device? */
>  STATIC bool
>  xfs_getfsmap_is_valid_device(
>  	struct xfs_mount	*mp,
>  	struct xfs_fsmap	*fm)
>  {
> -	if (fm->fmr_device == 0 || fm->fmr_device == UINT_MAX ||
> -	    fm->fmr_device == new_encode_dev(mp->m_ddev_targp->bt_dev))
> -		return true;
> -	if (mp->m_logdev_targp &&
> -	    fm->fmr_device == new_encode_dev(mp->m_logdev_targp->bt_dev))
> -		return true;
> -	if (mp->m_rtdev_targp &&
> -	    fm->fmr_device == new_encode_dev(mp->m_rtdev_targp->bt_dev))
> -		return true;
> -	return false;
> +	return fm->fmr_device == 0 ||
> +		fm->fmr_device == UINT_MAX ||
> +		fm->fmr_device == xfs_getfsmap_device(mp, XFS_DEV_DATA) ||
> +		fm->fmr_device == xfs_getfsmap_device(mp, XFS_DEV_LOG) ||
> +		(mp->m_rtdev_targp &&
> +		 fm->fmr_device == xfs_getfsmap_device(mp, XFS_DEV_RT));
>  }
>  
>  /* Ensure that the low key is less than the high key. */
> @@ -1126,7 +1166,7 @@ xfs_getfsmap(
>  	/* Set up our device handlers. */
>  	memset(handlers, 0, sizeof(handlers));
>  	handlers[0].nr_sectors = XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks);
> -	handlers[0].dev = new_encode_dev(mp->m_ddev_targp->bt_dev);
> +	handlers[0].dev = xfs_getfsmap_device(mp, XFS_DEV_DATA);
>  	if (use_rmap)
>  		handlers[0].fn = xfs_getfsmap_datadev_rmapbt;
>  	else
> @@ -1134,7 +1174,7 @@ xfs_getfsmap(
>  	if (mp->m_logdev_targp != mp->m_ddev_targp) {
>  		handlers[1].nr_sectors = XFS_FSB_TO_BB(mp,
>  						       mp->m_sb.sb_logblocks);
> -		handlers[1].dev = new_encode_dev(mp->m_logdev_targp->bt_dev);
> +		handlers[1].dev = xfs_getfsmap_device(mp, XFS_DEV_LOG);
>  		handlers[1].fn = xfs_getfsmap_logdev;
>  	}
>  #ifdef CONFIG_XFS_RT
> @@ -1144,7 +1184,7 @@ xfs_getfsmap(
>  	 */
>  	if (mp->m_rtdev_targp && (use_rmap || !xfs_has_zoned(mp))) {
>  		handlers[2].nr_sectors = XFS_FSB_TO_BB(mp, mp->m_sb.sb_rblocks);
> -		handlers[2].dev = new_encode_dev(mp->m_rtdev_targp->bt_dev);
> +		handlers[2].dev = xfs_getfsmap_device(mp, XFS_DEV_RT);
>  		if (use_rmap)
>  			handlers[2].fn = xfs_getfsmap_rtdev_rmapbt;
>  		else
> @@ -1234,7 +1274,13 @@ xfs_getfsmap(
>  
>  	if (tp)
>  		xfs_trans_cancel(tp);
> -	head->fmh_oflags = FMH_OF_DEV_T;
> +
> +	/*
> +	 * For internal RT device we need to report different synthetic devices
> +	 * for a single physical device, and thus can't report the actual dev_t.
> +	 */
> +	if (!mp->m_sb.sb_rtstart)
> +		head->fmh_oflags = FMH_OF_DEV_T;
>  	return error;
>  }
>  
> -- 
> 2.45.2
> 
> 

  reply	other threads:[~2024-12-13 23:11 UTC|newest]

Thread overview: 143+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-11  8:54 RFC: support for zoned devices Christoph Hellwig
2024-12-11  8:54 ` [PATCH 01/43] xfs: constify feature checks Christoph Hellwig
2024-12-12 20:44   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 02/43] xfs: factor out a xfs_rt_check_size helper Christoph Hellwig
2024-12-12 21:11   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 03/43] xfs: add a rtg_blocks helper Christoph Hellwig
2024-12-12 21:12   ` Darrick J. Wong
2024-12-13  5:00     ` Christoph Hellwig
2024-12-15 18:10       ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 04/43] xfs: move xfs_bmapi_reserve_delalloc to xfs_iomap.c Christoph Hellwig
2024-12-12 21:18   ` Darrick J. Wong
2024-12-13  5:04     ` Christoph Hellwig
2024-12-15 18:13       ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 05/43] xfs: don't take m_sb_lock in xfs_fs_statfs Christoph Hellwig
2024-12-12 21:42   ` Darrick J. Wong
2024-12-13  5:06     ` Christoph Hellwig
2024-12-15 18:16       ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 06/43] xfs: refactor xfs_fs_statfs Christoph Hellwig
2024-12-12 21:24   ` Darrick J. Wong
2024-12-13  5:08     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 07/43] xfs: cleanup xfs_vn_getattr Christoph Hellwig
2024-12-12 21:24   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 08/43] xfs: report the correct dio alignment for COW inodes Christoph Hellwig
2024-12-12 21:29   ` Darrick J. Wong
2024-12-13  5:09     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 09/43] xfs: generalize the freespace and reserved blocks handling Christoph Hellwig
2024-12-12 21:37   ` Darrick J. Wong
2024-12-13  5:11     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 10/43] xfs: preserve RT reservations across remounts Christoph Hellwig
2024-12-12 21:38   ` Darrick J. Wong
2024-12-13  9:15     ` Hans Holmberg
2024-12-15 18:42       ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 11/43] xfs: skip always_cow inodes in xfs_reflink_trim_around_shared Christoph Hellwig
2024-12-12 21:38   ` Darrick J. Wong
2024-12-13  5:12     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 12/43] xfs: refine the unaligned check for always COW inodes in xfs_file_dio_write Christoph Hellwig
2024-12-12 21:44   ` Darrick J. Wong
2024-12-13  5:14     ` Christoph Hellwig
2024-12-13 23:14       ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 13/43] xfs: support XFS_BMAPI_REMAP in xfs_bmap_del_extent_delay Christoph Hellwig
2024-12-12 21:47   ` [PATCH 13/43] xfs: support XFS_BMAPI_REMAP in xfs_bmap_del_extent_delayOM Darrick J. Wong
2024-12-13  5:14     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 14/43] xfs: add a xfs_rtrmap_first_unwritten_rgbno helper Christoph Hellwig
2024-12-12 21:48   ` Darrick J. Wong
2024-12-13  5:16     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 15/43] xfs: define the zoned on-disk format Christoph Hellwig
2024-12-12 22:02   ` Darrick J. Wong
2024-12-13  5:22     ` Christoph Hellwig
2024-12-13 17:09       ` Darrick J. Wong
2024-12-15  5:20         ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 16/43] xfs: allow internal RT devices for zoned mode Christoph Hellwig
2024-12-12 22:06   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 17/43] xfs: don't allow growfs of the data device with internal RT device Christoph Hellwig
2024-12-12 22:07   ` Darrick J. Wong
2024-12-13  5:22     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 18/43] xfs: export zoned geometry via XFS_FSOP_GEOM Christoph Hellwig
2024-12-12 22:09   ` Darrick J. Wong
2024-12-13  5:23     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 19/43] xfs: disable sb_frextents for zoned file systems Christoph Hellwig
2024-12-12 22:26   ` Darrick J. Wong
2024-12-13  5:29     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 20/43] xfs: disable FITRIM for zoned RT devices Christoph Hellwig
2024-12-12 22:13   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 21/43] xfs: don't call xfs_can_free_eofblocks from ->release for zoned inodes Christoph Hellwig
2024-12-12 22:15   ` Darrick J. Wong
2024-12-13  5:28     ` Christoph Hellwig
2024-12-13 17:13       ` Darrick J. Wong
2024-12-13 17:18         ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 22/43] xfs: skip zoned RT inodes in xfs_inodegc_want_queue_rt_file Christoph Hellwig
2024-12-12 22:15   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 23/43] xfs: parse and validate hardware zone information Christoph Hellwig
2024-12-13 17:31   ` Darrick J. Wong
2024-12-15  5:24     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 24/43] xfs: add the zoned space allocator Christoph Hellwig
2024-12-13 18:33   ` Darrick J. Wong
2024-12-15  5:27     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 25/43] xfs: add support for zoned space reservations Christoph Hellwig
2024-12-13 21:01   ` Darrick J. Wong
2024-12-15  5:31     ` Christoph Hellwig
2024-12-17 16:59       ` Darrick J. Wong
2024-12-19  5:50         ` Christoph Hellwig
2024-12-19 16:00           ` Darrick J. Wong
2024-12-19 17:36             ` Christoph Hellwig
2024-12-19 17:37               ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 26/43] xfs: implement zoned garbage collection Christoph Hellwig
2024-12-13 22:18   ` Darrick J. Wong
2024-12-15  5:57     ` Christoph Hellwig
2024-12-17  1:27       ` Darrick J. Wong
2024-12-17  4:06         ` Christoph Hellwig
2024-12-17 17:42           ` Darrick J. Wong
2024-12-18  7:13             ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 27/43] xfs: implement buffered writes to zoned RT devices Christoph Hellwig
2024-12-13 22:37   ` Darrick J. Wong
2024-12-15  6:12     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 28/43] xfs: implement direct " Christoph Hellwig
2024-12-13 22:39   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 29/43] xfs: wire up zoned block freeing in xfs_rtextent_free_finish_item Christoph Hellwig
2024-12-13 22:40   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 30/43] xfs: hide reserved RT blocks from statfs Christoph Hellwig
2024-12-13 22:43   ` Darrick J. Wong
2024-12-15  6:03     ` Christoph Hellwig
2024-12-11  8:54 ` [PATCH 31/43] xfs: support growfs on zoned file systems Christoph Hellwig
2024-12-13 22:45   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 32/43] xfs: allow COW forks on zoned file systems in xchk_bmap Christoph Hellwig
2024-12-13 22:47   ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 33/43] xfs: support xchk_xref_is_used_rt_space on zoned file systems Christoph Hellwig
2024-12-13 22:49   ` Darrick J. Wong
2024-12-15  6:13     ` Christoph Hellwig
2024-12-17 17:02       ` Darrick J. Wong
2024-12-11  8:54 ` [PATCH 34/43] xfs: support xrep_require_rtext_inuse " Christoph Hellwig
2024-12-13 22:49   ` Darrick J. Wong
2024-12-11  8:55 ` [PATCH 35/43] xfs: enable fsmap reporting for internal RT devices Christoph Hellwig
2024-12-13 23:11   ` Darrick J. Wong [this message]
2024-12-15  6:26     ` Christoph Hellwig
2024-12-17 17:06       ` Darrick J. Wong
2024-12-11  8:55 ` [PATCH 36/43] xfs: disable reflink for zoned file systems Christoph Hellwig
2024-12-13 23:12   ` Darrick J. Wong
2024-12-15  6:26     ` Christoph Hellwig
2024-12-17 17:10       ` Darrick J. Wong
2024-12-18  7:09         ` Christoph Hellwig
2024-12-18 18:16           ` Darrick J. Wong
2024-12-11  8:55 ` [PATCH 37/43] xfs: disable rt quotas " Christoph Hellwig
2024-12-13 23:05   ` Darrick J. Wong
2024-12-15  6:21     ` Christoph Hellwig
2024-12-11  8:55 ` [PATCH 38/43] xfs: enable the zoned RT device feature Christoph Hellwig
2024-12-13 22:52   ` Darrick J. Wong
2024-12-15  6:15     ` Christoph Hellwig
2024-12-11  8:55 ` [PATCH 39/43] xfs: support zone gaps Christoph Hellwig
2024-12-13 22:55   ` Darrick J. Wong
2024-12-11  8:55 ` [PATCH 40/43] xfs: add a max_open_zones mount option Christoph Hellwig
2024-12-13 22:57   ` Darrick J. Wong
2024-12-15  6:16     ` Christoph Hellwig
2024-12-17 17:12       ` Darrick J. Wong
2024-12-11  8:55 ` [PATCH 41/43] xfs: support write life time based data placement Christoph Hellwig
2024-12-13 23:00   ` Darrick J. Wong
2024-12-15  6:19     ` Christoph Hellwig
2024-12-17 17:14       ` Darrick J. Wong
2024-12-18  7:10         ` Christoph Hellwig
2024-12-18 18:19           ` Darrick J. Wong
2024-12-11  8:55 ` [PATCH 42/43] xfs: wire up the show_stats super operation Christoph Hellwig
2024-12-13 23:01   ` Darrick J. Wong
2024-12-11  8:55 ` [PATCH 43/43] xfs: export zone stats in /proc/*/mountstats Christoph Hellwig
2024-12-13 23:04   ` 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=20241213231115.GF6678@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=cem@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.