[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230518114742.128950-5-jlayton@kernel.org>
Date: Thu, 18 May 2023 07:47:37 -0400
From: Jeff Layton <jlayton@...nel.org>
To: Alexander Viro <viro@...iv.linux.org.uk>,
Christian Brauner <brauner@...nel.org>,
"Darrick J. Wong" <djwong@...nel.org>,
Hugh Dickins <hughd@...gle.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Dave Chinner <david@...morbit.com>,
Chuck Lever <chuck.lever@...cle.com>
Cc: Jan Kara <jack@...e.cz>, Amir Goldstein <amir73il@...il.com>,
David Howells <dhowells@...hat.com>,
Neil Brown <neilb@...e.de>,
Matthew Wilcox <willy@...radead.org>,
Andreas Dilger <adilger.kernel@...ger.ca>,
Theodore T'so <tytso@....edu>, Chris Mason <clm@...com>,
Josef Bacik <josef@...icpanda.com>,
David Sterba <dsterba@...e.com>,
Namjae Jeon <linkinjeon@...nel.org>,
Steve French <sfrench@...ba.org>,
Sergey Senozhatsky <senozhatsky@...omium.org>,
Tom Talpey <tom@...pey.com>, linux-fsdevel@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-xfs@...r.kernel.org,
linux-btrfs@...r.kernel.org, linux-ext4@...r.kernel.org,
linux-mm@...ck.org, linux-nfs@...r.kernel.org,
linux-cifs@...r.kernel.org
Subject: [PATCH v4 4/9] nfsd: ensure we use ctime_peek to grab the inode->i_ctime
If getattr fails, then nfsd can end up scraping the time values directly
out of the inode for pre and post-op attrs. This may or may not be the
right thing to do, but for now make it at least use ctime_peek in this
situation to ensure that the QUERIED flag is masked.
Signed-off-by: Jeff Layton <jlayton@...nel.org>
---
fs/nfsd/nfsfh.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c
index ccd8485fee04..f053cf20dd8a 100644
--- a/fs/nfsd/nfsfh.c
+++ b/fs/nfsd/nfsfh.c
@@ -624,9 +624,14 @@ void fh_fill_pre_attrs(struct svc_fh *fhp)
inode = d_inode(fhp->fh_dentry);
err = fh_getattr(fhp, &stat);
if (err) {
- /* Grab the times from inode anyway */
+ /*
+ * Grab the times from inode anyway.
+ *
+ * FIXME: is this the right thing to do? Or should we just
+ * not send pre and post-op attrs in this case?
+ */
stat.mtime = inode->i_mtime;
- stat.ctime = inode->i_ctime;
+ stat.ctime = ctime_peek(inode);
stat.size = inode->i_size;
if (v4 && IS_I_VERSION(inode)) {
stat.change_cookie = inode_query_iversion(inode);
@@ -662,7 +667,7 @@ void fh_fill_post_attrs(struct svc_fh *fhp)
err = fh_getattr(fhp, &fhp->fh_post_attr);
if (err) {
fhp->fh_post_saved = false;
- fhp->fh_post_attr.ctime = inode->i_ctime;
+ fhp->fh_post_attr.ctime = ctime_peek(inode);
if (v4 && IS_I_VERSION(inode)) {
fhp->fh_post_attr.change_cookie = inode_query_iversion(inode);
fhp->fh_post_attr.result_mask |= STATX_CHANGE_COOKIE;
--
2.40.1
Powered by blists - more mailing lists