From: Brian Foster <bfoster@redhat.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 4/8] xfs: move v1 inode conversion to xfs_inode_from_disk
Date: Mon, 25 Jan 2016 10:43:48 -0500 [thread overview]
Message-ID: <20160125154348.GD4108@bfoster.bfoster> (raw)
In-Reply-To: <1452751765-4420-5-git-send-email-david@fromorbit.com>
On Thu, Jan 14, 2016 at 05:09:21PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> So we don't have to carry an di_onlink variable around anymore, move
> the inode conversion from v1 inode format to v2 inode format into
> xfs_inode_from_disk(). This means we can remove the di_onlink fields
> from the struct xfs_icdinode.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
Reviewed-by: Brian Foster <bfoster@redhat.com>
> fs/xfs/libxfs/xfs_inode_buf.c | 42 ++++++++++++++++++++----------------------
> fs/xfs/libxfs/xfs_inode_buf.h | 1 -
> fs/xfs/libxfs/xfs_log_format.h | 2 +-
> fs/xfs/xfs_inode.c | 2 --
> fs/xfs/xfs_inode_item.c | 2 +-
> 5 files changed, 22 insertions(+), 27 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
> index 17ff4e8..8a1b460 100644
> --- a/fs/xfs/libxfs/xfs_inode_buf.c
> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
> @@ -204,13 +204,25 @@ xfs_inode_from_disk(
>
> to->di_mode = be16_to_cpu(from->di_mode);
> to->di_version = from ->di_version;
> +
> + /*
> + * Convert v1 inodes immediately to v2 inode format as this is the
> + * minimum inode version format we support in the rest of the code.
> + */
> + if (to->di_version == 1) {
> + to->di_nlink = be16_to_cpu(from->di_onlink);
> + to->di_projid_lo = 0;
> + to->di_projid_hi = 0;
> + to->di_version = 2;
> + } else {
> + to->di_nlink = be32_to_cpu(from->di_nlink);
> + to->di_projid_lo = be16_to_cpu(from->di_projid_lo);
> + to->di_projid_hi = be16_to_cpu(from->di_projid_hi);
> + }
> +
> to->di_format = from->di_format;
> - to->di_onlink = be16_to_cpu(from->di_onlink);
> to->di_uid = be32_to_cpu(from->di_uid);
> to->di_gid = be32_to_cpu(from->di_gid);
> - to->di_nlink = be32_to_cpu(from->di_nlink);
> - to->di_projid_lo = be16_to_cpu(from->di_projid_lo);
> - to->di_projid_hi = be16_to_cpu(from->di_projid_hi);
> to->di_flushiter = be16_to_cpu(from->di_flushiter);
>
> /*
> @@ -256,11 +268,11 @@ xfs_inode_to_disk(
> struct inode *inode = VFS_I(ip);
>
> to->di_magic = cpu_to_be16(XFS_DINODE_MAGIC);
> + to->di_onlink = 0;
>
> to->di_mode = cpu_to_be16(from->di_mode);
> to->di_version = from->di_version;
> to->di_format = from->di_format;
> - to->di_onlink = cpu_to_be16(from->di_onlink);
> to->di_uid = cpu_to_be32(from->di_uid);
> to->di_gid = cpu_to_be32(from->di_gid);
> to->di_nlink = cpu_to_be32(from->di_nlink);
> @@ -310,9 +322,9 @@ xfs_log_dinode_to_disk(
> {
> to->di_magic = cpu_to_be16(from->di_magic);
> to->di_mode = cpu_to_be16(from->di_mode);
> - to->di_version = from ->di_version;
> + to->di_version = from->di_version;
> to->di_format = from->di_format;
> - to->di_onlink = cpu_to_be16(from->di_onlink);
> + to->di_onlink = 0;
> to->di_uid = cpu_to_be32(from->di_uid);
> to->di_gid = cpu_to_be32(from->di_gid);
> to->di_nlink = cpu_to_be32(from->di_nlink);
> @@ -492,21 +504,7 @@ xfs_iread(
> ip->i_d.di_mode = 0;
> }
>
> - /*
> - * Automatically convert version 1 inode formats in memory to version 2
> - * inode format. If the inode is modified, it will get logged and
> - * rewritten as a version 2 inode. We can do this because we set the
> - * superblock feature bit for v2 inodes unconditionally during mount
> - * and it means the reast of the code can assume the inode version is 2
> - * or higher.
> - */
> - if (ip->i_d.di_version == 1) {
> - ip->i_d.di_version = 2;
> - ip->i_d.di_nlink = ip->i_d.di_onlink;
> - ip->i_d.di_onlink = 0;
> - xfs_set_projid(ip, 0);
> - }
> -
> + ASSERT(ip->i_d.di_version >= 2);
> ip->i_delayed_blks = 0;
>
> /*
> diff --git a/fs/xfs/libxfs/xfs_inode_buf.h b/fs/xfs/libxfs/xfs_inode_buf.h
> index 69d626e..feb04e6 100644
> --- a/fs/xfs/libxfs/xfs_inode_buf.h
> +++ b/fs/xfs/libxfs/xfs_inode_buf.h
> @@ -31,7 +31,6 @@ struct xfs_icdinode {
> __uint16_t di_mode; /* mode and type of file */
> __int8_t di_version; /* inode version */
> __int8_t di_format; /* format of di_c data */
> - __uint16_t di_onlink; /* old number of links to file */
> __uint16_t di_flushiter; /* incremented on flush */
> __uint32_t di_uid; /* owner's user id */
> __uint32_t di_gid; /* owner's group id */
> diff --git a/fs/xfs/libxfs/xfs_log_format.h b/fs/xfs/libxfs/xfs_log_format.h
> index d00ed63..03f90b9 100644
> --- a/fs/xfs/libxfs/xfs_log_format.h
> +++ b/fs/xfs/libxfs/xfs_log_format.h
> @@ -369,7 +369,7 @@ struct xfs_log_dinode {
> __uint16_t di_mode; /* mode and type of file */
> __int8_t di_version; /* inode version */
> __int8_t di_format; /* format of di_c data */
> - __uint16_t di_onlink; /* old number of links to file */
> + __uint8_t di_pad3[2]; /* unused in v2/3 inodes */
> __uint32_t di_uid; /* owner's user id */
> __uint32_t di_gid; /* owner's group id */
> __uint32_t di_nlink; /* number of links to file */
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index 3f020b5..914ec41 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -794,9 +794,7 @@ xfs_ialloc(
> ip->i_d.di_version = 2;
>
> ip->i_d.di_mode = mode;
> - ip->i_d.di_onlink = 0;
> ip->i_d.di_nlink = nlink;
> - ASSERT(ip->i_d.di_nlink == nlink);
> ip->i_d.di_uid = xfs_kuid_to_uid(current_fsuid());
> ip->i_d.di_gid = xfs_kgid_to_gid(current_fsgid());
> xfs_set_projid(ip, prid);
> diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
> index ae60087..d777b7a 100644
> --- a/fs/xfs/xfs_inode_item.c
> +++ b/fs/xfs/xfs_inode_item.c
> @@ -336,7 +336,6 @@ xfs_inode_to_log_dinode(
> to->di_mode = from->di_mode;
> to->di_version = from->di_version;
> to->di_format = from->di_format;
> - to->di_onlink = from->di_onlink;
> to->di_uid = from->di_uid;
> to->di_gid = from->di_gid;
> to->di_nlink = from->di_nlink;
> @@ -344,6 +343,7 @@ xfs_inode_to_log_dinode(
> to->di_projid_hi = from->di_projid_hi;
>
> memset(to->di_pad, 0, sizeof(to->di_pad));
> + memset(to->di_pad3, 0, sizeof(to->di_pad3));
> to->di_atime.t_sec = inode->i_atime.tv_sec;
> to->di_atime.t_nsec = inode->i_atime.tv_nsec;
> to->di_mtime.t_sec = inode->i_mtime.tv_sec;
> --
> 2.5.0
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2016-01-25 15:43 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-14 6:09 [PATCH v2 0/8] xfs: shrink the xfs_icdinode Dave Chinner
2016-01-14 6:09 ` [PATCH 1/8] xfs: introduce inode log format object Dave Chinner
2016-01-25 15:43 ` Brian Foster
2016-01-14 6:09 ` [PATCH 2/8] xfs: remove timestamps from incore inode Dave Chinner
2016-01-25 15:43 ` Brian Foster
2016-01-14 6:09 ` [PATCH 3/8] xfs; cull unnecessary icdinode fields Dave Chinner
2016-01-25 15:43 ` Brian Foster
2016-01-14 6:09 ` [PATCH 4/8] xfs: move v1 inode conversion to xfs_inode_from_disk Dave Chinner
2016-01-25 15:43 ` Brian Foster [this message]
2016-01-14 6:09 ` [PATCH 5/8] xfs: use vfs inode nlink field everywhere Dave Chinner
2016-01-25 18:25 ` Brian Foster
2016-01-14 6:09 ` [PATCH 6/8] xfs: move inode generation count to VFS inode Dave Chinner
2016-01-25 18:25 ` Brian Foster
2016-01-14 6:09 ` [PATCH 7/8] xfs: move di_changecount " Dave Chinner
2016-01-25 18:25 ` Brian Foster
2016-01-14 6:09 ` [PATCH 8/8] xfs: mode di_mode to vfs inode Dave Chinner
2016-01-25 18:25 ` Brian Foster
-- strict thread matches above, loose matches on Subject: below --
2016-01-12 9:01 [RFC PATCH 0/8] xfs: shrink the struct xfs_icdinode Dave Chinner
2016-01-12 9:01 ` [PATCH 4/8] xfs: move v1 inode conversion to xfs_inode_from_disk Dave Chinner
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=20160125154348.GD4108@bfoster.bfoster \
--to=bfoster@redhat.com \
--cc=david@fromorbit.com \
--cc=xfs@oss.sgi.com \
/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.