svn commit: r285392 - head/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Sat Jul 11 16:28:13 UTC 2015
Author: mjg
Date: Sat Jul 11 16:28:12 2015
New Revision: 285392
URL: https://svnweb.freebsd.org/changeset/base/285392
Log:
vfs: move si_usecount manipulation to dedicated functions
Reviewed by: kib
Modified:
head/sys/kern/vfs_subr.c
Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c Sat Jul 11 16:22:48 2015 (r285391)
+++ head/sys/kern/vfs_subr.c Sat Jul 11 16:28:12 2015 (r285392)
@@ -105,6 +105,8 @@ static void v_incr_usecount(struct vnode
static void v_decr_usecount(struct vnode *);
static void v_decr_useonly(struct vnode *);
static void v_upgrade_usecount(struct vnode *);
+static void v_incr_devcount(struct vnode *);
+static void v_decr_devcount(struct vnode *);
static void vnlru_free(int);
static void vgonel(struct vnode *);
static void vfs_knllock(void *arg);
@@ -2082,11 +2084,7 @@ v_incr_usecount(struct vnode *vp)
CTR2(KTR_VFS, "%s: vp %p", __func__, vp);
vholdl(vp);
vp->v_usecount++;
- if (vp->v_type == VCHR && vp->v_rdev != NULL) {
- dev_lock();
- vp->v_rdev->si_usecount++;
- dev_unlock();
- }
+ v_incr_devcount(vp);
}
/*
@@ -2099,11 +2097,7 @@ v_upgrade_usecount(struct vnode *vp)
CTR2(KTR_VFS, "%s: vp %p", __func__, vp);
vp->v_usecount++;
- if (vp->v_type == VCHR && vp->v_rdev != NULL) {
- dev_lock();
- vp->v_rdev->si_usecount++;
- dev_unlock();
- }
+ v_incr_devcount(vp);
}
/*
@@ -2120,11 +2114,7 @@ v_decr_usecount(struct vnode *vp)
("v_decr_usecount: negative usecount"));
CTR2(KTR_VFS, "%s: vp %p", __func__, vp);
vp->v_usecount--;
- if (vp->v_type == VCHR && vp->v_rdev != NULL) {
- dev_lock();
- vp->v_rdev->si_usecount--;
- dev_unlock();
- }
+ v_decr_devcount(vp);
vdropl(vp);
}
@@ -2143,6 +2133,36 @@ v_decr_useonly(struct vnode *vp)
("v_decr_useonly: negative usecount"));
CTR2(KTR_VFS, "%s: vp %p", __func__, vp);
vp->v_usecount--;
+ v_decr_devcount(vp);
+}
+
+/*
+ * Increment si_usecount of the associated device, if any.
+ */
+static void
+v_incr_devcount(struct vnode *vp)
+{
+
+#ifdef INVARIANTS
+ /* getnewvnode() calls v_incr_usecount() without holding interlock. */
+ if (vp->v_type != VNON || vp->v_data != NULL)
+ ASSERT_VI_LOCKED(vp, __FUNCTION__);
+#endif
+ if (vp->v_type == VCHR && vp->v_rdev != NULL) {
+ dev_lock();
+ vp->v_rdev->si_usecount++;
+ dev_unlock();
+ }
+}
+
+/*
+ * Decrement si_usecount of the associated device, if any.
+ */
+static void
+v_decr_devcount(struct vnode *vp)
+{
+
+ ASSERT_VI_LOCKED(vp, __FUNCTION__);
if (vp->v_type == VCHR && vp->v_rdev != NULL) {
dev_lock();
vp->v_rdev->si_usecount--;
More information about the svn-src-all
mailing list