From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 08/14] xfs: use a union for i_cowextsize and i_flushiter
Date: Tue, 2 Jun 2020 17:33:05 -0700 [thread overview]
Message-ID: <20200603003305.GW8230@magnolia> (raw)
In-Reply-To: <20200524091757.128995-9-hch@lst.de>
On Sun, May 24, 2020 at 11:17:51AM +0200, Christoph Hellwig wrote:
> The i_cowextsize field is only used for v3 inodes, and the i_flushiter
> field is only used for v1/v2 inodes. Use a union to pack the inode a
> littler better after adding a few missing guards around their usage.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/libxfs/xfs_inode_buf.c | 3 ++-
> fs/xfs/xfs_inode.c | 6 ++++--
> fs/xfs/xfs_inode.h | 7 +++++--
> fs/xfs/xfs_ioctl.c | 6 +++++-
> 4 files changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
> index 03bd7cdd0ddc8..8c4b7bd69285f 100644
> --- a/fs/xfs/libxfs/xfs_inode_buf.c
> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
> @@ -205,7 +205,8 @@ xfs_inode_from_disk(
> * inode. If the inode is unused, mode is zero and we shouldn't mess
> * with the unitialized part of it.
> */
> - ip->i_flushiter = be16_to_cpu(from->di_flushiter);
> + if (!xfs_sb_version_has_v3inode(&ip->i_mount->m_sb))
> + ip->i_flushiter = be16_to_cpu(from->di_flushiter);
> inode->i_generation = be32_to_cpu(from->di_gen);
> inode->i_mode = be16_to_cpu(from->di_mode);
> if (!inode->i_mode)
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index 805f63fb3c8b4..dff853a7ed0c3 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -3792,8 +3792,10 @@ xfs_iflush_int(
> xfs_inode_to_disk(ip, dip, iip->ili_item.li_lsn);
>
> /* Wrap, we never let the log put out DI_MAX_FLUSH */
> - if (ip->i_flushiter == DI_MAX_FLUSH)
> - ip->i_flushiter = 0;
> + if (!xfs_sb_version_has_v3inode(&mp->m_sb)) {
> + if (ip->i_flushiter == DI_MAX_FLUSH)
> + ip->i_flushiter = 0;
> + }
>
> xfs_iflush_fork(ip, dip, iip, XFS_DATA_FORK);
> if (XFS_IFORK_Q(ip))
> diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
> index 91259403ba741..59f7341ece285 100644
> --- a/fs/xfs/xfs_inode.h
> +++ b/fs/xfs/xfs_inode.h
> @@ -58,8 +58,11 @@ typedef struct xfs_inode {
> xfs_rfsblock_t i_nblocks; /* # of direct & btree blocks */
> uint32_t i_projid; /* owner's project id */
> xfs_extlen_t i_extsize; /* basic/minimum extent size */
> - uint32_t i_cowextsize; /* basic cow extent size */
> - uint16_t i_flushiter; /* incremented on flush */
> + /* cowextsize is only used for v3 inodes, flushiter for v1/2 */
> + union {
> + uint32_t i_cowextsize; /* basic cow extent size */
> + uint16_t i_flushiter; /* incremented on flush */
> + };
>
> struct xfs_icdinode i_d; /* most of ondisk inode */
>
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index a9b31ae3c28c0..18ea8b76c7d53 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -1108,7 +1108,11 @@ xfs_fill_fsxattr(
>
> simple_fill_fsxattr(fa, xfs_ip2xflags(ip));
> fa->fsx_extsize = ip->i_extsize << ip->i_mount->m_sb.sb_blocklog;
> - fa->fsx_cowextsize = ip->i_cowextsize << ip->i_mount->m_sb.sb_blocklog;
> + if (xfs_sb_version_has_v3inode(&ip->i_mount->m_sb) &&
> + (ip->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE)) {
> + fa->fsx_cowextsize =
> + ip->i_cowextsize << ip->i_mount->m_sb.sb_blocklog;
Could you turn these into XFS_FSB_TO_B() while you're at it?
--D
> + }
> fa->fsx_projid = ip->i_projid;
> if (ifp && (ifp->if_flags & XFS_IFEXTENTS))
> fa->fsx_nextents = xfs_iext_count(ifp);
> --
> 2.26.2
>
next prev parent reply other threads:[~2020-06-03 0:33 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-24 9:17 kill of struct xfs_icdinode Christoph Hellwig
2020-05-24 9:17 ` [PATCH 01/14] xfs: don't clear the "dinode core" in xfs_inode_alloc Christoph Hellwig
2020-05-24 9:17 ` [PATCH 02/14] xfs: move the di_projid field to struct xfs_inode Christoph Hellwig
2020-05-24 9:17 ` [PATCH 03/14] xfs: move the di_size " Christoph Hellwig
2020-05-24 9:17 ` [PATCH 04/14] xfs: move the di_nblocks " Christoph Hellwig
2020-05-24 9:17 ` [PATCH 05/14] xfs: move the di_extsize " Christoph Hellwig
2020-05-24 9:17 ` [PATCH 06/14] xfs: move the di_cowextsize " Christoph Hellwig
2020-06-03 0:30 ` Darrick J. Wong
2020-05-24 9:17 ` [PATCH 07/14] xfs: move the di_flushiter " Christoph Hellwig
2020-05-24 9:17 ` [PATCH 08/14] xfs: use a union for i_cowextsize and i_flushiter Christoph Hellwig
2020-06-03 0:33 ` Darrick J. Wong [this message]
2020-05-24 9:17 ` [PATCH 09/14] xfs: move the di_forkoff field to struct xfs_inode Christoph Hellwig
2020-05-24 9:17 ` [PATCH 10/14] xfs: move the di_flags " Christoph Hellwig
2020-05-24 9:17 ` [PATCH 11/14] xfs: move the di_flags2 " Christoph Hellwig
2020-05-24 9:17 ` [PATCH 12/14] xfs: move the di_crtime " Christoph Hellwig
2020-05-24 9:17 ` [PATCH 13/14] xfs: move the di_dmevmask " Christoph Hellwig
2020-06-03 0:36 ` Darrick J. Wong
2020-06-19 13:42 ` Christoph Hellwig
2020-05-24 9:17 ` [PATCH 14/14] xfs: move the di_dmstate " Christoph Hellwig
2020-06-01 12:56 ` kill of struct xfs_icdinode Brian Foster
2020-06-19 13:35 ` Christoph Hellwig
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=20200603003305.GW8230@magnolia \
--to=darrick.wong@oracle.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.