Author: gleb
Date: Wed Mar 14 08:29:21 2012
New Revision: 232959
URL: http://svn.freebsd.org/changeset/base/232959

Log:
  Don't enforce LK_RETRY to get existing vnode in tmpfs_alloc_vp()
  
  Doomed vnode is hardly of any use here, besides all callers handle error
  case. vfs_hash_get() does the same.
  
  Don't mess with vnode holdcount, vget() takes care of it already.
  
  Approved by:  mdf (mentor)

Modified:
  head/sys/fs/tmpfs/tmpfs_subr.c

Modified: head/sys/fs/tmpfs/tmpfs_subr.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_subr.c      Wed Mar 14 08:00:33 2012        
(r232958)
+++ head/sys/fs/tmpfs/tmpfs_subr.c      Wed Mar 14 08:29:21 2012        
(r232959)
@@ -320,9 +320,11 @@ loop:
                MPASS((node->tn_vpstate & TMPFS_VNODE_DOOMED) == 0);
                VI_LOCK(vp);
                TMPFS_NODE_UNLOCK(node);
-               vholdl(vp);
-               (void) vget(vp, lkflag | LK_INTERLOCK | LK_RETRY, curthread);
-               vdrop(vp);
+               error = vget(vp, lkflag | LK_INTERLOCK, curthread);
+               if (error != 0) {
+                       vp = NULL;
+                       goto out;
+               }
 
                /*
                 * Make sure the vnode is still there after
@@ -420,11 +422,13 @@ unlock:
 out:
        *vpp = vp;
 
-       MPASS(IFF(error == 0, *vpp != NULL && VOP_ISLOCKED(*vpp)));
 #ifdef INVARIANTS
-       TMPFS_NODE_LOCK(node);
-       MPASS(*vpp == node->tn_vnode);
-       TMPFS_NODE_UNLOCK(node);
+       if (error == 0) {
+               MPASS(*vpp != NULL && VOP_ISLOCKED(*vpp));
+               TMPFS_NODE_LOCK(node);
+               MPASS(*vpp == node->tn_vnode);
+               TMPFS_NODE_UNLOCK(node);
+       }
 #endif
 
        return error;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to