Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Dec 2011 02:26:54 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r228520 - head/sys/nfsserver
Message-ID:  <201112150226.pBF2QsKW025116@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: delphij
Date: Thu Dec 15 02:26:53 2011
New Revision: 228520
URL: http://svn.freebsd.org/changeset/base/228520

Log:
  Honor NFSv3 commit call (RFC 1813, Section 3.3.21) where when count is 0,
  the full length from offset is being flushed.  Note that for now VOP_FSYNC
  does not support offset and length parameters so we still do the same full
  VOP_FSYNC.  This issue was reported at FreeNAS support site as FreeNAS
  ticket #1096.
  
  Submitted by:	"ceckerle" <ce.freenas eckerle net>
  Prodded by:	gcooper
  Reviewed by:	rmacklem
  MFC after:	2 weeks

Modified:
  head/sys/nfsserver/nfs_serv.c

Modified: head/sys/nfsserver/nfs_serv.c
==============================================================================
--- head/sys/nfsserver/nfs_serv.c	Thu Dec 15 01:05:38 2011	(r228519)
+++ head/sys/nfsserver/nfs_serv.c	Thu Dec 15 02:26:53 2011	(r228520)
@@ -3454,7 +3454,12 @@ nfsrv_commit(struct nfsrv_descript *nfsd
 	}
 	for_ret = VOP_GETATTR(vp, &bfor, cred);
 
-	if (cnt > MAX_COMMIT_COUNT) {
+	/*
+	 * RFC 1813 3.3.21: if count is 0, a flush from offset to the end of file
+	 * is done.  At this time VOP_FSYNC does not accept offset and byte count
+	 * parameters so call VOP_FSYNC the whole file for now.
+	 */
+	if (cnt == 0 || cnt > MAX_COMMIT_COUNT) {
 		/*
 		 * Give up and do the whole thing
 		 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201112150226.pBF2QsKW025116>