summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2009-02-17 22:46:30 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2009-02-17 22:46:30 +0000
commit48fb501ef250c1b8eba3d14661aed0186da7d2ca (patch)
tree5e7217a42e5c928de0cbc78949a963d75a18e9dd
parent33a5fd27094ed5081979f27bacbe82cce0f6722c (diff)
Notes
-rw-r--r--sys/dev/hwpmc/hwpmc_mod.c2
-rw-r--r--sys/fs/procfs/procfs.c12
-rw-r--r--sys/fs/procfs/procfs_map.c5
-rw-r--r--sys/kern/kern_descrip.c10
-rw-r--r--sys/kern/kern_proc.c5
5 files changed, 12 insertions, 22 deletions
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c
index 6c0e0ea27254..ee42521d63d8 100644
--- a/sys/dev/hwpmc/hwpmc_mod.c
+++ b/sys/dev/hwpmc/hwpmc_mod.c
@@ -669,9 +669,7 @@ pmc_getfilename(struct vnode *v, char **fullpath, char **freepath)
td = curthread;
*fullpath = "unknown";
*freepath = NULL;
- vn_lock(v, LK_CANRECURSE | LK_EXCLUSIVE | LK_RETRY, td);
vn_fullpath(td, v, fullpath, freepath);
- VOP_UNLOCK(v, 0, td);
}
/*
diff --git a/sys/fs/procfs/procfs.c b/sys/fs/procfs/procfs.c
index 56bc0cc03751..26bd18532f8e 100644
--- a/sys/fs/procfs/procfs.c
+++ b/sys/fs/procfs/procfs.c
@@ -70,17 +70,13 @@ procfs_doprocfile(PFS_FILL_ARGS)
char *fullpath = "unknown";
char *freepath = NULL;
struct vnode *textvp;
- int err;
+ PROC_LOCK(p);
textvp = p->p_textvp;
- VI_LOCK(textvp);
- vholdl(textvp);
- err = vn_lock(textvp, LK_EXCLUSIVE | LK_INTERLOCK, td);
- vdrop(textvp);
- if (err)
- return (err);
+ vhold(textvp);
+ PROC_UNLOCK(p);
vn_fullpath(td, textvp, &fullpath, &freepath);
- VOP_UNLOCK(textvp, 0, td);
+ vdrop(textvp);
sbuf_printf(sb, "%s", fullpath);
if (freepath)
free(freepath, M_TEMP);
diff --git a/sys/fs/procfs/procfs_map.c b/sys/fs/procfs/procfs_map.c
index afcd59a46ea4..f7e053c0f1a9 100644
--- a/sys/fs/procfs/procfs_map.c
+++ b/sys/fs/procfs/procfs_map.c
@@ -190,10 +190,9 @@ procfs_doprocmap(PFS_FILL_ARGS)
shadow_count = obj->shadow_count;
VM_OBJECT_UNLOCK(obj);
if (vp != NULL) {
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
vn_fullpath(td, vp, &fullpath, &freepath);
- vput(vp);
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ vrele(vp);
VFS_UNLOCK_GIANT(vfslocked);
}
} else {
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index da7c447f41a8..07bbb74088dd 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -2836,10 +2836,9 @@ export_vnode_for_sysctl(struct vnode *vp, int type,
freepath = NULL;
fullpath = "-";
FILEDESC_SUNLOCK(fdp);
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread);
vn_fullpath(curthread, vp, &fullpath, &freepath);
- vput(vp);
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ vrele(vp);
VFS_UNLOCK_GIANT(vfslocked);
strlcpy(kif->kf_path, fullpath, sizeof(kif->kf_path));
if (freepath != NULL)
@@ -3001,10 +3000,9 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER_ARGS)
freepath = NULL;
fullpath = "-";
FILEDESC_SUNLOCK(fdp);
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread);
vn_fullpath(curthread, vp, &fullpath, &freepath);
- vput(vp);
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ vrele(vp);
VFS_UNLOCK_GIANT(vfslocked);
strlcpy(kif->kf_path, fullpath,
sizeof(kif->kf_path));
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index ca2d84c97f82..a591162e56e0 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -1475,12 +1475,11 @@ sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_ARGS)
kve->kve_shadow_count = obj->shadow_count;
VM_OBJECT_UNLOCK(obj);
if (vp != NULL) {
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY,
- curthread);
vn_fullpath(curthread, vp, &fullpath,
&freepath);
cred = curthread->td_ucred;
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ vn_lock(vp, LK_SHARED | LK_RETRY, curthread);
if (VOP_GETATTR(vp, &va, cred, curthread) == 0) {
kve->kve_fileid = va.va_fileid;
kve->kve_fsid = va.va_fsid;