git: 2ca9c96dc0cf - stable/14 - Revert commit 8733bc277a383cf59f38a83956f4f523869cfc90 Author: Mateusz Guzik <mjg@FreeBSD.org> Date: Thu Sep 14 16:13:01 2023 +0000
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 13 Nov 2024 19:52:18 UTC
The branch stable/14 has been updated by mckusick: URL: https://cgit.FreeBSD.org/src/commit/?id=2ca9c96dc0cf0d1f91b37346bce8fd0dd1639ddd commit 2ca9c96dc0cf0d1f91b37346bce8fd0dd1639ddd Author: Kirk McKusick <mckusick@FreeBSD.org> AuthorDate: 2024-11-13 19:37:14 +0000 Commit: Kirk McKusick <mckusick@FreeBSD.org> CommitDate: 2024-11-13 19:52:05 +0000 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. Requested by: re (cperciva) (cherry picked from commit ab05a1cf321aca0fe632c1ab40f68630b477422c) --- sys/kern/vfs_subr.c | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 646339987ba2..747cdf722cc9 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -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