From: Jeff Layton <jlayton@redhat.com>
To: JunChao Sun <sunjunchao2870@gmail.com>
Cc: linux-fsdevel@vger.kernel.org, dhowells@redhat.com,
lczerner@redhat.com, bxue@redhat.com, ceph-devel@vger.kernel.org,
linux-nfs@vger.kernel.org, linux-afs@lists.infradead.org,
linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-btrfs@vger.kernel.org
Subject: Re: [RFC PATCH 1/4] vfs: report change attribute in statx for IS_I_VERSION inodes
Date: Wed, 10 Aug 2022 06:35:38 -0400 [thread overview]
Message-ID: <a396a94d30132b157860c9e367f9a4354223f7f5.camel@redhat.com> (raw)
In-Reply-To: <CAHB1Nah5ttUCuUUdPZjb9n_1uDTh_-J_N6JaJiwY+oZj7atJeg@mail.gmail.com>
On Wed, 2022-08-10 at 11:00 +0800, JunChao Sun wrote:
> On Sat, Aug 6, 2022 at 2:37 AM Jeff Layton <jlayton@kernel.org> wrote:
> >
> > From: Jeff Layton <jlayton@redhat.com>
> >
> > Claim one of the spare fields in struct statx to hold a 64-bit change
> > >
> > > attribute. When statx requests this attribute, do an
> > > inode_query_iversion and fill the result in the field.
>
> I guess, is it better to update the corresponding part of the man-pages...?
Yes. If we end up accepting a patch like this, we'll need to update the
statx(2) manpage. We'll probably also want to add support for it to the
/bin/stat coreutils command as well.
At this point, I'm trying to put together some xfstests so we can ensure
that this feature doesn't regress (if we take it).
> >
> >
> > Also update the test-statx.c program to fetch the change attribute as
> > well.
> >
> > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > ---
> > fs/stat.c | 7 +++++++
> > include/linux/stat.h | 1 +
> > include/uapi/linux/stat.h | 3 ++-
> > samples/vfs/test-statx.c | 4 +++-
> > 4 files changed, 13 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/stat.c b/fs/stat.c
> > index 9ced8860e0f3..976e0a59ab23 100644
> > --- a/fs/stat.c
> > +++ b/fs/stat.c
> > @@ -17,6 +17,7 @@
> > #include <linux/syscalls.h>
> > #include <linux/pagemap.h>
> > #include <linux/compat.h>
> > +#include <linux/iversion.h>
> >
> > #include <linux/uaccess.h>
> > #include <asm/unistd.h>
> > @@ -118,6 +119,11 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
> > stat->attributes_mask |= (STATX_ATTR_AUTOMOUNT |
> > STATX_ATTR_DAX);
> >
> > + if ((request_mask & STATX_CHGATTR) && IS_I_VERSION(inode)) {
> > + stat->result_mask |= STATX_CHGATTR;
> > + stat->chgattr = inode_query_iversion(inode);
> > + }
> > +
> > mnt_userns = mnt_user_ns(path->mnt);
> > if (inode->i_op->getattr)
> > return inode->i_op->getattr(mnt_userns, path, stat,
> > @@ -611,6 +617,7 @@ cp_statx(const struct kstat *stat, struct statx __user *buffer)
> > tmp.stx_dev_major = MAJOR(stat->dev);
> > tmp.stx_dev_minor = MINOR(stat->dev);
> > tmp.stx_mnt_id = stat->mnt_id;
> > + tmp.stx_chgattr = stat->chgattr;
> >
> > return copy_to_user(buffer, &tmp, sizeof(tmp)) ? -EFAULT : 0;
> > }
> > diff --git a/include/linux/stat.h b/include/linux/stat.h
> > index 7df06931f25d..4a17887472f6 100644
> > --- a/include/linux/stat.h
> > +++ b/include/linux/stat.h
> > @@ -50,6 +50,7 @@ struct kstat {
> > struct timespec64 btime; /* File creation time */
> > u64 blocks;
> > u64 mnt_id;
> > + u64 chgattr;
> > };
> >
> > #endif
> > diff --git a/include/uapi/linux/stat.h b/include/uapi/linux/stat.h
> > index 1500a0f58041..b45243a0fbc5 100644
> > --- a/include/uapi/linux/stat.h
> > +++ b/include/uapi/linux/stat.h
> > @@ -124,7 +124,7 @@ struct statx {
> > __u32 stx_dev_minor;
> > /* 0x90 */
> > __u64 stx_mnt_id;
> > - __u64 __spare2;
> > + __u64 stx_chgattr; /* Inode change attribute */
> > /* 0xa0 */
> > __u64 __spare3[12]; /* Spare space for future expansion */
> > /* 0x100 */
> > @@ -152,6 +152,7 @@ struct statx {
> > #define STATX_BASIC_STATS 0x000007ffU /* The stuff in the normal stat struct */
> > #define STATX_BTIME 0x00000800U /* Want/got stx_btime */
> > #define STATX_MNT_ID 0x00001000U /* Got stx_mnt_id */
> > +#define STATX_CHGATTR 0x00002000U /* Want/git stx_chgattr */
> >
> > #define STATX__RESERVED 0x80000000U /* Reserved for future struct statx expansion */
> >
> > diff --git a/samples/vfs/test-statx.c b/samples/vfs/test-statx.c
> > index 49c7a46cee07..767208d2f564 100644
> > --- a/samples/vfs/test-statx.c
> > +++ b/samples/vfs/test-statx.c
> > @@ -109,6 +109,8 @@ static void dump_statx(struct statx *stx)
> > printf(" Inode: %-11llu", (unsigned long long) stx->stx_ino);
> > if (stx->stx_mask & STATX_NLINK)
> > printf(" Links: %-5u", stx->stx_nlink);
> > + if (stx->stx_mask & STATX_CHGATTR)
> > + printf(" Change Attr: 0x%llx", stx->stx_chgattr);
> > if (stx->stx_mask & STATX_TYPE) {
> > switch (stx->stx_mode & S_IFMT) {
> > case S_IFBLK:
> > @@ -218,7 +220,7 @@ int main(int argc, char **argv)
> > struct statx stx;
> > int ret, raw = 0, atflag = AT_SYMLINK_NOFOLLOW;
> >
> > - unsigned int mask = STATX_BASIC_STATS | STATX_BTIME;
> > + unsigned int mask = STATX_BASIC_STATS | STATX_BTIME | STATX_CHGATTR;
> >
> > for (argv++; *argv; argv++) {
> > if (strcmp(*argv, "-F") == 0) {
> > --
> > 2.37.1
> >
>
--
Jeff Layton <jlayton@redhat.com>
next prev parent reply other threads:[~2022-08-10 10:35 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-05 18:35 [RFC PATCH 0/4] vfs: allow querying i_version via statx Jeff Layton
2022-08-05 18:35 ` [RFC PATCH 1/4] vfs: report change attribute in statx for IS_I_VERSION inodes Jeff Layton
2022-08-05 22:01 ` Dave Chinner
2022-08-05 22:06 ` Jeff Layton
2022-08-08 13:19 ` Jeff Layton
2022-08-09 15:33 ` Darrick J. Wong
2022-08-09 18:04 ` Jeff Layton
2022-08-09 18:28 ` Jeff Layton
2022-08-08 2:09 ` Xiubo Li
2022-08-08 10:18 ` Jeff Layton
2022-08-10 3:00 ` JunChao Sun
2022-08-10 10:35 ` Jeff Layton [this message]
2022-08-05 18:35 ` [RFC PATCH 2/4] nfs: report the change attribute if requested Jeff Layton
2022-08-05 18:35 ` [RFC PATCH 3/4] afs: fill out change attribute in statx replies Jeff Layton
2022-08-05 18:35 ` [RFC PATCH 4/4] ceph: fill in the change attribute in statx requests Jeff Layton
2022-08-08 11:56 ` Xiubo Li
2022-08-05 18:52 ` [RFC PATCH 0/4] vfs: allow querying i_version via statx Frank Filz
2022-08-05 19:17 ` [RFC PATCH 1/4] vfs: report change attribute in statx for IS_I_VERSION inodes David Howells
2022-08-05 20:00 ` Jeff Layton
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=a396a94d30132b157860c9e367f9a4354223f7f5.camel@redhat.com \
--to=jlayton@redhat.com \
--cc=bxue@redhat.com \
--cc=ceph-devel@vger.kernel.org \
--cc=dhowells@redhat.com \
--cc=lczerner@redhat.com \
--cc=linux-afs@lists.infradead.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=sunjunchao2870@gmail.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.