Author: kib
Date: Sun May 31 15:01:50 2009
New Revision: 193176
URL: http://svn.freebsd.org/changeset/base/193176

Log:
  Unlock the pseudofs vnode before calling fill method for pfs_readlink().
  The fill code may need to lock another vnode, e.g. procfs file
  implementation.
  
  Reviewed by:  des
  Tested by:    pho
  MFC after:    2 weeks

Modified:
  head/sys/fs/pseudofs/pseudofs_vnops.c

Modified: head/sys/fs/pseudofs/pseudofs_vnops.c
==============================================================================
--- head/sys/fs/pseudofs/pseudofs_vnops.c       Sun May 31 14:58:43 2009        
(r193175)
+++ head/sys/fs/pseudofs/pseudofs_vnops.c       Sun May 31 15:01:50 2009        
(r193176)
@@ -827,7 +827,7 @@ pfs_readlink(struct vop_readlink_args *v
        struct proc *proc = NULL;
        char buf[PATH_MAX];
        struct sbuf sb;
-       int error;
+       int error, locked;
 
        PFS_TRACE(("%s", pn->pn_name));
        pfs_assert_not_owned(pn);
@@ -849,6 +849,9 @@ pfs_readlink(struct vop_readlink_args *v
                _PHOLD(proc);
                PROC_UNLOCK(proc);
        }
+       vhold(vn);
+       locked = VOP_ISLOCKED(vn);
+       VOP_UNLOCK(vn, 0);
 
        /* sbuf_new() can't fail with a static buffer */
        sbuf_new(&sb, buf, sizeof buf, 0);
@@ -857,6 +860,8 @@ pfs_readlink(struct vop_readlink_args *v
 
        if (proc != NULL)
                PRELE(proc);
+       vn_lock(vn, locked | LK_RETRY);
+       vdrop(vn);
 
        if (error) {
                sbuf_delete(&sb);
_______________________________________________
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