Move the nfsrpc_close() call in ncl_reclaim() for the NFSv4 client

to below the vnode_destroy_vobject() call, since that is where
writes are flushed.

Suggested by:	kib
MFC after:	1 week
This commit is contained in:
Rick Macklem 2012-06-17 18:34:04 +00:00
parent 604a7c2f00
commit 79cafccd40

@ -257,15 +257,6 @@ ncl_reclaim(struct vop_reclaim_args *ap)
struct nfsnode *np = VTONFS(vp);
struct nfsdmap *dp, *dp2;
if (NFS_ISV4(vp) && vp->v_type == VREG)
/*
* Since mmap()'d files do I/O after VOP_CLOSE(), the NFSv4
* Close operations are delayed until ncl_inactive().
* However, since VOP_INACTIVE() is not guaranteed to be
* called, we need to do it again here.
*/
(void) nfsrpc_close(vp, 1, ap->a_td);
/*
* If the NLM is running, give it a chance to abort pending
* locks.
@ -278,6 +269,15 @@ ncl_reclaim(struct vop_reclaim_args *ap)
*/
vnode_destroy_vobject(vp);
if (NFS_ISV4(vp) && vp->v_type == VREG)
/*
* We can now safely close any remaining NFSv4 Opens for
* this file. Most opens will have already been closed by
* ncl_inactive(), but there are cases where it is not
* called, so we need to do it again here.
*/
(void) nfsrpc_close(vp, 1, ap->a_td);
vfs_hash_remove(vp);
/*