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>