svn commit: r193176 - head/sys/fs/pseudofs
Konstantin Belousov
kib at FreeBSD.org
Sun May 31 15:01:51 UTC 2009
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);
More information about the svn-src-head
mailing list