svn commit: r194205 - in stable/7/sys: . contrib/pf dev/ath/ath_hal
fs/pseudofs
Konstantin Belousov
kib at FreeBSD.org
Sun Jun 14 18:04:23 UTC 2009
Author: kib
Date: Sun Jun 14 18:04:22 2009
New Revision: 194205
URL: http://svn.freebsd.org/changeset/base/194205
Log:
MFC r193176:
Unlock the pseudofs vnode before calling fill method for pfs_readlink().
Modified:
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/ath/ath_hal/ (props changed)
stable/7/sys/fs/pseudofs/pseudofs_vnops.c
Modified: stable/7/sys/fs/pseudofs/pseudofs_vnops.c
==============================================================================
--- stable/7/sys/fs/pseudofs/pseudofs_vnops.c Sun Jun 14 18:01:35 2009 (r194204)
+++ stable/7/sys/fs/pseudofs/pseudofs_vnops.c Sun Jun 14 18:04:22 2009 (r194205)
@@ -746,9 +746,10 @@ pfs_readlink(struct vop_readlink_args *v
struct pfs_node *pn = pvd->pvd_pn;
struct uio *uio = va->a_uio;
struct proc *proc = NULL;
+ struct thread *td = curthread;
char buf[PATH_MAX];
struct sbuf sb;
- int error;
+ int error, locked;
PFS_TRACE(("%s", pn->pn_name));
pfs_assert_not_owned(pn);
@@ -770,14 +771,19 @@ pfs_readlink(struct vop_readlink_args *v
_PHOLD(proc);
PROC_UNLOCK(proc);
}
+ vhold(vn);
+ locked = VOP_ISLOCKED(vn, td);
+ VOP_UNLOCK(vn, 0, td);
/* sbuf_new() can't fail with a static buffer */
sbuf_new(&sb, buf, sizeof buf, 0);
- error = pn_fill(curthread, proc, pn, &sb, NULL);
+ error = pn_fill(td, proc, pn, &sb, NULL);
if (proc != NULL)
PRELE(proc);
+ vn_lock(vn, locked | LK_RETRY, td);
+ vdrop(vn);
if (error) {
sbuf_delete(&sb);
More information about the svn-src-stable-7
mailing list