From: Jeff Layton <jlayton@kernel.org>
To: Amir Goldstein <amir73il@gmail.com>,
"J . Bruce Fields" <bfields@fieldses.org>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [RFC][PATCH 1/2] vfs: update overlay inode times on write
Date: Tue, 02 Jan 2018 13:48:27 -0500 [thread overview]
Message-ID: <1514918907.3462.17.camel@kernel.org> (raw)
In-Reply-To: <1514896009-11468-2-git-send-email-amir73il@gmail.com>
On Tue, 2018-01-02 at 14:26 +0200, Amir Goldstein wrote:
> Currently with overlayfs, the real upper inode's i_mtime is updated on
> write, but not overlay vfs inode. The vfs inode's i_mtime is used by nfsd
> to check if nfs client cache is stale, so updating the overlay vfs inode
> i_mtime on write is required for overlayfs NFS export support.
>
> The non uptodate mtime issue was found and verified with the
> nfstest_posix test when run over NFS exported overlayfs:
>
> $ nfstest_posix --runtest=write
> ...
> FAIL: write - file st_mtime should be updated
>
> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> ---
> fs/inode.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/fs/inode.c b/fs/inode.c
> index 03102d6ef044..a252256f4e51 100644
> --- a/fs/inode.c
> +++ b/fs/inode.c
> @@ -1567,8 +1567,7 @@ EXPORT_SYMBOL(bmap);
> /*
> * Update times in overlayed inode from underlying real inode
> */
> -static void update_ovl_inode_times(struct dentry *dentry, struct inode *inode,
> - bool rcu)
> +static void update_ovl_d_inode_times(struct dentry *dentry, bool rcu)
> {
> struct dentry *upperdentry;
>
> @@ -1585,6 +1584,7 @@ static void update_ovl_inode_times(struct dentry *dentry, struct inode *inode,
> * stale mtime/ctime.
> */
> if (upperdentry) {
> + struct inode *inode = d_inode(dentry);
> struct inode *realinode = d_inode(upperdentry);
>
> if ((!timespec_equal(&inode->i_mtime, &realinode->i_mtime) ||
> @@ -1607,7 +1607,8 @@ static int relatime_need_update(const struct path *path, struct inode *inode,
> if (!(path->mnt->mnt_flags & MNT_RELATIME))
> return 1;
>
> - update_ovl_inode_times(path->dentry, inode, rcu);
> + update_ovl_d_inode_times(path->dentry, rcu);
> +
> /*
> * Is mtime younger than atime? If yes, update atime:
> */
> @@ -1876,6 +1877,8 @@ int file_update_time(struct file *file)
> ret = update_time(inode, &now, sync_it);
> __mnt_drop_write_file(file);
>
> + update_ovl_d_inode_times(file->f_path.dentry, false);
> +
> return ret;
> }
> EXPORT_SYMBOL(file_update_time);
This code all seems to be called from the relatime handling codepath,
but the problem statement is all about the mtime.
Is there a reason for that, or would this be better done in (e.g.)
ovl_update_time? Is this code trying to delay updating times until
something is trying to access it?
--
Jeff Layton <jlayton@kernel.org>
next prev parent reply other threads:[~2018-01-02 18:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-02 12:26 [RFC][PATCH 0/2] Updating overlay inode i_mtime for nfsd Amir Goldstein
2018-01-02 12:26 ` [RFC][PATCH 1/2] vfs: update overlay inode times on write Amir Goldstein
2018-01-02 16:51 ` Vivek Goyal
2018-01-02 17:27 ` Amir Goldstein
2018-01-02 21:26 ` Dave Chinner
2018-01-02 18:48 ` Jeff Layton [this message]
2018-01-02 19:45 ` Amir Goldstein
2018-01-02 12:26 ` [RFC][PATCH 2/2] vfs: update overlay inode times on lease_get_mtime() Amir Goldstein
2018-01-02 22:54 ` J . Bruce Fields
2018-01-03 6:48 ` Amir Goldstein
2018-01-03 8:40 ` Amir Goldstein
-- strict thread matches above, loose matches on Subject: below --
2018-01-03 15:11 [RFC][PATCH 0/2] Updating overlay inode i_mtime for nfsd Amir Goldstein
2018-01-03 15:11 ` [RFC][PATCH 1/2] vfs: update overlay inode times on write Amir Goldstein
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=1514918907.3462.17.camel@kernel.org \
--to=jlayton@kernel.org \
--cc=amir73il@gmail.com \
--cc=bfields@fieldses.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-unionfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
/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.