Author: kib
Date: Thu Mar 28 06:39:27 2013
New Revision: 248815
URL: http://svnweb.freebsd.org/changeset/base/248815

Log:
  Release the v_writecount reference on the vnode in case of error,
  before the vnode is vput() in vm_mmap_vnode().  Error return means
  that there is no use reference on the vnode from the vm object
  reference, and failing to restore v_writecount breaks the invariant
  that v_writecount is less or equal to the usecount.
  
  The situation observed when nfs client returns ESTALE for
  VOP_GETATTR() after the open.
  
  In collaboration with:        pho
  MFC after:    1 week

Modified:
  head/sys/vm/vm_mmap.c

Modified: head/sys/vm/vm_mmap.c
==============================================================================
--- head/sys/vm/vm_mmap.c       Thu Mar 28 06:31:04 2013        (r248814)
+++ head/sys/vm/vm_mmap.c       Thu Mar 28 06:39:27 2013        (r248815)
@@ -1345,6 +1345,10 @@ mark_atime:
        vfs_mark_atime(vp, cred);
 
 done:
+       if (error != 0 && *writecounted) {
+               *writecounted = FALSE;
+               vnode_pager_update_writecount(obj, objsize, 0);
+       }
        vput(vp);
        return (error);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to