summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2006-01-30 08:19:01 +0000
committerjeff <jeff@FreeBSD.org>2006-01-30 08:19:01 +0000
commit822d3c835515a6e1d6b56ae89bfb042147973ea7 (patch)
tree70168c607192f3742303e6727b937c41a0fd9d9d
parent4eae100a42c2bc23a1e46d2b9cf024398efd73cc (diff)
downloadFreeBSD-src-822d3c835515a6e1d6b56ae89bfb042147973ea7.zip
FreeBSD-src-822d3c835515a6e1d6b56ae89bfb042147973ea7.tar.gz
- Lock access to vrele() with VFS_LOCK_GIANT() rather than mtx_lock(&Giant).
Sponsored by: Isilon Systems, Inc.
-rw-r--r--sys/kern/kern_ktrace.c7
-rw-r--r--sys/kern/uipc_usrreq.c7
2 files changed, 10 insertions, 4 deletions
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c
index fbb0b0d..7f42f67 100644
--- a/sys/kern/kern_ktrace.c
+++ b/sys/kern/kern_ktrace.c
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mutex.h>
#include <sys/mac.h>
#include <sys/malloc.h>
+#include <sys/mount.h>
#include <sys/namei.h>
#include <sys/proc.h>
#include <sys/unistd.h>
@@ -830,9 +831,11 @@ ktrops(td, p, ops, facs, vp)
mtx_unlock(&ktrace_mtx);
PROC_UNLOCK(p);
if (tracevp != NULL) {
- mtx_lock(&Giant);
+ int vfslocked;
+
+ vfslocked = VFS_LOCK_GIANT(tracevp->v_mount);
vrele(tracevp);
- mtx_unlock(&Giant);
+ VFS_UNLOCK_GIANT(vfslocked);
}
if (tracecred != NULL)
crfree(tracecred);
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c
index ba2c3a7..f13dcda 100644
--- a/sys/kern/uipc_usrreq.c
+++ b/sys/kern/uipc_usrreq.c
@@ -47,6 +47,7 @@ __FBSDID("$FreeBSD$");
#include <sys/lock.h>
#include <sys/mac.h>
#include <sys/mbuf.h>
+#include <sys/mount.h>
#include <sys/mutex.h>
#include <sys/namei.h>
#include <sys/proc.h>
@@ -811,9 +812,11 @@ unp_detach(struct unpcb *unp)
FREE(unp->unp_addr, M_SONAME);
uma_zfree(unp_zone, unp);
if (vp) {
- mtx_lock(&Giant);
+ int vfslocked;
+
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
vrele(vp);
- mtx_unlock(&Giant);
+ VFS_UNLOCK_GIANT(vfslocked);
}
if (local_unp_rights)
taskqueue_enqueue(taskqueue_thread, &unp_gc_task);
OpenPOWER on IntegriCloud