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
This commit is contained in:
Xin LI 2011-12-15 02:26:53 +00:00
parent 3f9bdcef12
commit f8dee27442
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=228520

View File

@ -3454,7 +3454,12 @@ nfsrv_commit(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
}
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
*/