mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Revert commit 8733bc277a383cf59f38a83956f4f523869cfc90
Author: Mateusz Guzik <mjg@FreeBSD.org>
Date: Thu Sep 14 16:13:01 2023 +0000
vfs: don't provoke recycling non-free vnodes without a good reason
If the total number of free vnodes is at or above target, there is no
point creating more of them.
This commit was done as a performance optimization but ends up
causing slowdowns when doing operations on many files.
Approved by: re (cperciva)
Requested by: re (cperciva)
(cherry picked from commit ab05a1cf321aca0fe632c1ab40f68630b477422c)
(cherry picked from commit 2ca9c96dc0)
This commit is contained in:
parent
f0bfc02cba
commit
c16d0924db
1 changed files with 4 additions and 18 deletions
|
|
@ -1961,25 +1961,11 @@ vn_alloc_hard(struct mount *mp, u_long rnumvnodes, bool bumped)
|
|||
|
||||
mtx_lock(&vnode_list_mtx);
|
||||
|
||||
if (vn_alloc_cyclecount != 0) {
|
||||
rnumvnodes = atomic_load_long(&numvnodes);
|
||||
if (rnumvnodes + 1 < desiredvnodes) {
|
||||
vn_alloc_cyclecount = 0;
|
||||
mtx_unlock(&vnode_list_mtx);
|
||||
goto alloc;
|
||||
}
|
||||
|
||||
rfreevnodes = vnlru_read_freevnodes();
|
||||
if (rfreevnodes < wantfreevnodes) {
|
||||
if (vn_alloc_cyclecount++ >= rfreevnodes) {
|
||||
vn_alloc_cyclecount = 0;
|
||||
vstir = true;
|
||||
}
|
||||
} else {
|
||||
vn_alloc_cyclecount = 0;
|
||||
}
|
||||
rfreevnodes = vnlru_read_freevnodes();
|
||||
if (vn_alloc_cyclecount++ >= rfreevnodes) {
|
||||
vn_alloc_cyclecount = 0;
|
||||
vstir = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Grow the vnode cache if it will not be above its target max
|
||||
* after growing. Otherwise, if the free list is nonempty, try
|
||||
|
|
|
|||
Loading…
Reference in a new issue