Author: kib
Date: Thu May  7 18:14:21 2009
New Revision: 191895
URL: http://svn.freebsd.org/changeset/base/191895

Log:
  Eliminate the loop and the call to pause(9) in vfs_vget_ino(). If
  vfs_busy(MBF_NOWAIT) failed, unlock the vnode and sleep in vfs_busy().
  
  Suggested and reviewed by:    jeff
  Tested by:    pho
  MFC after:    3 weeks

Modified:
  head/sys/kern/vfs_vnops.c

Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c   Thu May  7 18:03:47 2009        (r191894)
+++ head/sys/kern/vfs_vnops.c   Thu May  7 18:14:21 2009        (r191895)
@@ -1292,15 +1292,17 @@ vn_vget_ino(struct vnode *vp, ino_t ino,
        ltype = VOP_ISLOCKED(vp);
        KASSERT(ltype == LK_EXCLUSIVE || ltype == LK_SHARED,
            ("vn_vget_ino: vp not locked"));
-       for (;;) {
-               error = vfs_busy(mp, MBF_NOWAIT);
-               if (error == 0)
-                       break;
+       error = vfs_busy(mp, MBF_NOWAIT);
+       if (error != 0) {
                VOP_UNLOCK(vp, 0);
-               pause("vn_vget", 1);
+               error = vfs_busy(mp, 0);
                vn_lock(vp, ltype | LK_RETRY);
-               if (vp->v_iflag & VI_DOOMED)
+               if (error != 0)
+                       return (ENOENT);
+               if (vp->v_iflag & VI_DOOMED) {
+                       vfs_unbusy(mp);
                        return (ENOENT);
+               }
        }
        VOP_UNLOCK(vp, 0);
        error = VFS_VGET(mp, ino, lkflags, rvp);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to