The branch releng/14.0 has been updated by mjg:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=421857921ab1a6219d665605b2c76ff4272e788a

commit 421857921ab1a6219d665605b2c76ff4272e788a
Author:     Mateusz Guzik <[email protected]>
AuthorDate: 2023-10-11 06:39:48 +0000
Commit:     Mateusz Guzik <[email protected]>
CommitDate: 2023-10-14 01:07:42 +0000

    vfs: don't recycle transiently excess vnodes
    
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    
    (cherry picked from commit a4f753e812d8913e9be481c6dfa1574c7f032a56)
    (cherry picked from commit e3b2372a76c18551529e1aa43d185f602dccdbf1)
    
    Approved by:    re (gjb)
---
 sys/kern/vfs_subr.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 5834feff080c..52c14b4a234a 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -1656,8 +1656,12 @@ vnlru_proc_light_pick(void)
        /*
         * vnode limit might have changed and now we may be at a significant
         * excess. Bail if we can't sort it out with free vnodes.
+        *
+        * Due to atomic updates the count can legitimately go above
+        * the limit for a short period, don't bother doing anything in
+        * that case.
         */
-       if (rnumvnodes > desiredvnodes) {
+       if (rnumvnodes > desiredvnodes + 10) {
                if (rnumvnodes - rfreevnodes >= desiredvnodes ||
                    rfreevnodes <= wantfreevnodes) {
                        return (-1);
@@ -1734,7 +1738,7 @@ vnlru_proc(void)
                 * adjusted using its sysctl, or emergency growth), first
                 * try to reduce it by discarding from the free list.
                 */
-               if (rnumvnodes > desiredvnodes) {
+               if (rnumvnodes > desiredvnodes + 10) {
                        vnlru_free_locked(rnumvnodes - desiredvnodes);
                        mtx_lock(&vnode_list_mtx);
                        rnumvnodes = atomic_load_long(&numvnodes);

Reply via email to