All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] NFSD: Make FILE_SYNC WRITEs comply with spec
@ 2025-10-22 16:22 Chuck Lever
  2025-10-22 17:22 ` Tom Talpey
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Chuck Lever @ 2025-10-22 16:22 UTC (permalink / raw)
  To: NeilBrown, Jeff Layton, Olga Kornievskaia, Dai Ngo, Tom Talpey
  Cc: linux-nfs, Chuck Lever, Mike Snitzer

From: Chuck Lever <chuck.lever@oracle.com>

Mike noted that when NFSD responds to an NFS_FILE_SYNC WRITE, it
does not also persist file time stamps. To wit, Section 18.32.3
of RFC 8881 mandates:

> The client specifies with the stable parameter the method of how
> the data is to be processed by the server. If stable is
> FILE_SYNC4, the server MUST commit the data written plus all file
> system metadata to stable storage before returning results. This
> corresponds to the NFSv2 protocol semantics. Any other behavior
> constitutes a protocol violation. If stable is DATA_SYNC4, then
> the server MUST commit all of the data to stable storage and
> enough of the metadata to retrieve the data before returning.

For many years, NFSD has used a "data sync only" optimization for
FILE_SYNC WRITEs, so file time stamps haven't been persisted as the
mandate above requires.

Reported-by: Mike Snitzer <snitzer@kernel.org>
Closes: https://lore.kernel.org/linux-nfs/20251018005431.3403-1-cel@kernel.org/T/#t
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 fs/nfsd/vfs.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

This would need to be applied to nfsd-testing before the DIRECT
WRITE patches. I'm guessing a Cc: stable would be needed as well.

diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index f537a7b4ee01..2c5d38f38454 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1315,7 +1315,8 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp,
 	init_sync_kiocb(&kiocb, file);
 	kiocb.ki_pos = offset;
 	if (stable && !fhp->fh_use_wgather)
-		kiocb.ki_flags |= IOCB_DSYNC;
+		kiocb.ki_flags |=
+			(stable == NFS_FILE_SYNC ? IOCB_SYNC : IOCB_DSYNC);
 
 	nvecs = xdr_buf_to_bvec(rqstp->rq_bvec, rqstp->rq_maxpages, payload);
 	iov_iter_bvec(&iter, ITER_SOURCE, rqstp->rq_bvec, nvecs, *cnt);
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2025-10-28 22:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-22 16:22 [RFC PATCH] NFSD: Make FILE_SYNC WRITEs comply with spec Chuck Lever
2025-10-22 17:22 ` Tom Talpey
2025-10-22 17:46   ` Mike Snitzer
2025-10-22 18:25     ` Tom Talpey
2025-10-22 18:39       ` Mike Snitzer
2025-10-23  6:39   ` Christoph Hellwig
2025-10-22 17:27 ` Mike Snitzer
2025-10-28 22:28   ` Dave Chinner
2025-10-23  6:38 ` Christoph Hellwig
2025-10-23 12:46   ` Chuck Lever
2025-10-23 13:34     ` Christoph Hellwig

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.