svn commit: r245662 - stable/9/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Sat Jan 19 06:31:37 UTC 2013
Author: kib
Date: Sat Jan 19 06:31:37 2013
New Revision: 245662
URL: http://svnweb.freebsd.org/changeset/base/245662
Log:
MFC r245407,245411:
Set the v_hash for a new vnode in the getnewvnode() to the value
calculated based on the vnode structure address.
Modified:
stable/9/sys/kern/vfs_subr.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/kern/vfs_subr.c
==============================================================================
--- stable/9/sys/kern/vfs_subr.c Sat Jan 19 06:27:39 2013 (r245661)
+++ stable/9/sys/kern/vfs_subr.c Sat Jan 19 06:31:37 2013 (r245662)
@@ -282,6 +282,8 @@ SYSCTL_INT(_debug, OID_AUTO, vnlru_nowhe
#define VSHOULDFREE(vp) (!((vp)->v_iflag & VI_FREE) && !(vp)->v_holdcnt)
#define VSHOULDBUSY(vp) (((vp)->v_iflag & VI_FREE) && (vp)->v_holdcnt)
+/* Shift count for (uintptr_t)vp to initialize vp->v_hash. */
+static int vnsz2log;
/*
* Initialize the vnode management data structures.
@@ -296,6 +298,7 @@ SYSCTL_INT(_debug, OID_AUTO, vnlru_nowhe
static void
vntblinit(void *dummy __unused)
{
+ u_int i;
int physvnodes, virtvnodes;
/*
@@ -337,6 +340,9 @@ vntblinit(void *dummy __unused)
syncer_maxdelay = syncer_mask + 1;
mtx_init(&sync_mtx, "Syncer mtx", NULL, MTX_DEF);
cv_init(&sync_wakeup, "syncer");
+ for (i = 1; i <= sizeof(struct vnode); i <<= 1)
+ vnsz2log++;
+ vnsz2log--;
}
SYSINIT(vfs, SI_SUB_VFS, SI_ORDER_FIRST, vntblinit, NULL);
@@ -1077,6 +1083,14 @@ alloc:
}
rangelock_init(&vp->v_rl);
+ /*
+ * For the filesystems which do not use vfs_hash_insert(),
+ * still initialize v_hash to have vfs_hash_index() useful.
+ * E.g., nullfs uses vfs_hash_index() on the lower vnode for
+ * its own hashing.
+ */
+ vp->v_hash = (uintptr_t)vp >> vnsz2log;
+
*vpp = vp;
return (0);
}
More information about the svn-src-stable-9
mailing list