nfsrv_commit(): Properly handle the case cnt == 0, which means "flush to
end of file". Calling VOP_FSYNC with start == end triggers a DIAGNOSTIC check. Noticed with NFSv3 Linux clients. OK'd by fvdl.
This commit is contained in:
parent
e40e3c96cf
commit
7005ca7253
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: nfs_serv.c,v 1.62 2001/11/10 10:59:09 lukem Exp $ */
|
/* $NetBSD: nfs_serv.c,v 1.63 2002/09/26 20:38:04 bouyer Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1989, 1993
|
* Copyright (c) 1989, 1993
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: nfs_serv.c,v 1.62 2001/11/10 10:59:09 lukem Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: nfs_serv.c,v 1.63 2002/09/26 20:38:04 bouyer Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
|
@ -3010,7 +3010,10 @@ nfsrv_commit(nfsd, slp, procp, mrq)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
for_ret = VOP_GETATTR(vp, &bfor, cred, procp);
|
for_ret = VOP_GETATTR(vp, &bfor, cred, procp);
|
||||||
error = VOP_FSYNC(vp, cred, FSYNC_WAIT, off, off + cnt, procp);
|
if (cnt > 0)
|
||||||
|
error = VOP_FSYNC(vp, cred, FSYNC_WAIT, off, off + cnt, procp);
|
||||||
|
else
|
||||||
|
error = VOP_FSYNC(vp, cred, FSYNC_WAIT, off, vp->v_size, procp);
|
||||||
aft_ret = VOP_GETATTR(vp, &aft, cred, procp);
|
aft_ret = VOP_GETATTR(vp, &aft, cred, procp);
|
||||||
vput(vp);
|
vput(vp);
|
||||||
nfsm_reply(NFSX_V3WCCDATA + NFSX_V3WRITEVERF);
|
nfsm_reply(NFSX_V3WCCDATA + NFSX_V3WRITEVERF);
|
||||||
|
|
Loading…
Reference in New Issue