git: 2735c20d114f - main - vm_page: use ref_count for NOFREE counter

From: Doug Moore <dougm_at_FreeBSD.org>
Date: Fri, 02 May 2025 02:17:47 UTC
The branch main has been updated by dougm:

URL: https://cgit.FreeBSD.org/src/commit/?id=2735c20d114f2d53b8a44d4fb7b00ab49280062b

commit 2735c20d114f2d53b8a44d4fb7b00ab49280062b
Author:     Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2025-05-02 02:16:27 +0000
Commit:     Doug Moore <dougm@FreeBSD.org>
CommitDate: 2025-05-02 02:16:27 +0000

    vm_page: use ref_count for NOFREE counter
    
    In managing freed PG_NOFREE pages, use ref_count instead of pindex for
    counting pages in freed PG_NOFREE blocks. No change in behavior is
    expected. This restores the (useful) property that the pindex field is
    of interest only for pages that are mapped to objects.
    
    Reviewed by:    markj
    Differential Revision:  https://reviews.freebsd.org/D50112
---
 sys/vm/vm_page.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index 8dce6feaca09..d254f08d4801 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -2593,18 +2593,19 @@ vm_page_alloc_nofree_domain(int domain, int req)
 			vm_domain_free_unlock(vmd);
 			return (NULL);
 		}
-		m->pindex = count;
+		m->ref_count = count - 1;
 		TAILQ_INSERT_HEAD(&vmd->vmd_nofreeq, m, listq);
 		VM_CNT_ADD(v_nofree_count, count);
 	}
 	m = TAILQ_FIRST(&vmd->vmd_nofreeq);
 	TAILQ_REMOVE(&vmd->vmd_nofreeq, m, listq);
-	if (m->pindex > 1) {
+	if (m->ref_count > 0) {
 		vm_page_t m_next;
 
 		m_next = &m[1];
-		m_next->pindex = m->pindex - 1;
+		m_next->ref_count = m->ref_count - 1;
 		TAILQ_INSERT_HEAD(&vmd->vmd_nofreeq, m_next, listq);
+		m->ref_count = 0;
 	}
 	vm_domain_free_unlock(vmd);
 	VM_CNT_ADD(v_nofree_count, -1);
@@ -2622,7 +2623,7 @@ static void __noinline
 vm_page_free_nofree(struct vm_domain *vmd, vm_page_t m)
 {
 	vm_domain_free_lock(vmd);
-	m->pindex = 1;
+	MPASS(m->ref_count == 0);
 	TAILQ_INSERT_HEAD(&vmd->vmd_nofreeq, m, listq);
 	vm_domain_free_unlock(vmd);
 	VM_CNT_ADD(v_nofree_count, 1);