Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Mar 2012 08:29:21 +0000 (UTC)
From:      Gleb Kurtsou <gleb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r232959 - head/sys/fs/tmpfs
Message-ID:  <201203140829.q2E8TLjS085147@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203140829.q2E8TLjS085147>