]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
NFS: Ensure the server has an up to date ctime before hardlinking
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 15 Dec 2021 21:38:15 +0000 (16:38 -0500)
committerStefan Bader <stefan.bader@canonical.com>
Tue, 29 Mar 2022 07:13:47 +0000 (09:13 +0200)
BugLink: https://bugs.launchpad.net/bugs/1962345
[ Upstream commit 204975036b34f55237bc44c8a302a88468ef21b5 ]

Creating a hard link is required by POSIX to update the file ctime, so
ensure that the file data is synced to disk so that we don't clobber the
updated ctime by writing back after creating the hard link.

Fixes: 9f7682728728 ("NFS: Move the delegation return down into nfs4_proc_link()")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
fs/nfs/dir.c

index 43c5223294e3ddbb7d7ea95a8f2c371ed625f6fd..54a6893b0299f392bc1fb6f68c0d42490aff3dea 100644 (file)
@@ -2053,6 +2053,8 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
 
        trace_nfs_link_enter(inode, dir, dentry);
        d_drop(dentry);
+       if (S_ISREG(inode->i_mode))
+               nfs_sync_inode(inode);
        error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name);
        if (error == 0) {
                ihold(inode);