git: 7738118e9a29 - main - vm.objects_swap: disable reporting some information

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Mon, 25 Oct 2021 17:34:09 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=7738118e9a298a205b37c256245fd8449acccb0c

commit 7738118e9a298a205b37c256245fd8449acccb0c
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-07-13 10:34:31 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-10-25 17:34:01 +0000

    vm.objects_swap: disable reporting some information
    
    For making the call faster, do not count active/inactive object queues,
    and do not report vnode info if any (for tmpfs).
    
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D31163
---
 sys/vm/vm_object.c | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index addcf5f2c686..9462e8753afb 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -2526,20 +2526,22 @@ vm_object_list_handler(struct sysctl_req *req, bool swap_only)
 		kvo->kvo_memattr = obj->memattr;
 		kvo->kvo_active = 0;
 		kvo->kvo_inactive = 0;
-		TAILQ_FOREACH(m, &obj->memq, listq) {
-			/*
-			 * A page may belong to the object but be
-			 * dequeued and set to PQ_NONE while the
-			 * object lock is not held.  This makes the
-			 * reads of m->queue below racy, and we do not
-			 * count pages set to PQ_NONE.  However, this
-			 * sysctl is only meant to give an
-			 * approximation of the system anyway.
-			 */
-			if (m->a.queue == PQ_ACTIVE)
-				kvo->kvo_active++;
-			else if (m->a.queue == PQ_INACTIVE)
-				kvo->kvo_inactive++;
+		if (!swap_only) {
+			TAILQ_FOREACH(m, &obj->memq, listq) {
+				/*
+				 * A page may belong to the object but be
+				 * dequeued and set to PQ_NONE while the
+				 * object lock is not held.  This makes the
+				 * reads of m->queue below racy, and we do not
+				 * count pages set to PQ_NONE.  However, this
+				 * sysctl is only meant to give an
+				 * approximation of the system anyway.
+				 */
+				if (m->a.queue == PQ_ACTIVE)
+					kvo->kvo_active++;
+				else if (m->a.queue == PQ_INACTIVE)
+					kvo->kvo_inactive++;
+			}
 		}
 
 		kvo->kvo_vn_fileid = 0;
@@ -2547,7 +2549,8 @@ vm_object_list_handler(struct sysctl_req *req, bool swap_only)
 		kvo->kvo_vn_fsid_freebsd11 = 0;
 		freepath = NULL;
 		fullpath = "";
-		kvo->kvo_type = vm_object_kvme_type(obj, &vp);
+		vp = NULL;
+		kvo->kvo_type = vm_object_kvme_type(obj, swap_only ? NULL : &vp);
 		if (vp != NULL) {
 			vref(vp);
 		} else if ((obj->flags & OBJ_ANON) != 0) {