aboutsummaryrefslogtreecommitdiff
path: root/sys/ufs/ufs
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2020-01-13 02:37:25 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2020-01-13 02:37:25 +0000
commitcc3593fbd953e2eeec72dbca05e77632817cba0b (patch)
treeb5827bd68489e58764853a18f380df46585ceced /sys/ufs/ufs
parent80663cadb825db5aa70756c7292f1f5315535120 (diff)
downloadsrc-cc3593fbd953e2eeec72dbca05e77632817cba0b.tar.gz
src-cc3593fbd953e2eeec72dbca05e77632817cba0b.zip
vfs: rework vnode list management
The current notion of an active vnode is eliminated. Vnodes transition between 0<->1 hold counts all the time and the associated traversal between different lists induces significant scalability problems in certain workloads. Introduce a global list containing all allocated vnodes. They get unlinked only when UMA reclaims memory and are only requeued when hold count reaches 0. Sample result from an incremental make -s -j 104 bzImage on tmpfs: stock: 118.55s user 3649.73s system 7479% cpu 50.382 total patched: 122.38s user 1780.45s system 6242% cpu 30.480 total Reviewed by: jeff Tested by: pho (in a larger patch, previous version) Differential Revision: https://reviews.freebsd.org/D22997
Notes
Notes: svn path=/head/; revision=356672
Diffstat (limited to 'sys/ufs/ufs')
-rw-r--r--sys/ufs/ufs/ufs_quota.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/ufs/ufs/ufs_quota.c b/sys/ufs/ufs/ufs_quota.c
index d0065e4f06da..f59ff2a1c183 100644
--- a/sys/ufs/ufs/ufs_quota.c
+++ b/sys/ufs/ufs/ufs_quota.c
@@ -1083,7 +1083,7 @@ qsync(struct mount *mp)
* synchronizing any modified dquot structures.
*/
again:
- MNT_VNODE_FOREACH_ACTIVE(vp, mp, mvp) {
+ MNT_VNODE_FOREACH_ALL(vp, mp, mvp) {
if (vp->v_type == VNON) {
VI_UNLOCK(vp);
continue;
@@ -1091,7 +1091,7 @@ again:
error = vget(vp, LK_EXCLUSIVE | LK_INTERLOCK, td);
if (error) {
if (error == ENOENT) {
- MNT_VNODE_FOREACH_ACTIVE_ABORT(mp, mvp);
+ MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp);
goto again;
}
continue;