From 17ba2e5ae38cacf10885f68a2717a82a6d979fb0 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Thu, 14 Oct 2004 20:54:11 +0000 Subject: [PATCH] Augment vnodeinfo to retrieve and display the number of resident pages in attached VM objects. --- test/debug/vnodeinfo.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/test/debug/vnodeinfo.c b/test/debug/vnodeinfo.c index 5464883fd1..94bd6e76cf 100644 --- a/test/debug/vnodeinfo.c +++ b/test/debug/vnodeinfo.c @@ -40,7 +40,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $DragonFly: src/test/debug/vnodeinfo.c,v 1.3 2004/10/08 18:32:58 dillon Exp $ + * $DragonFly: src/test/debug/vnodeinfo.c,v 1.4 2004/10/14 20:54:11 dillon Exp $ */ #define _KERNEL_STRUCTURES_ @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -74,6 +75,7 @@ struct nlist Nl[] = { static void kkread(kvm_t *kd, u_long addr, void *buf, size_t nbytes); static struct mount *dumpmount(kvm_t *kd, struct mount *mp); static struct vnode *dumpvp(kvm_t *kd, struct vnode *vp, int whichlist); +static int getobjpages(kvm_t *kd, struct vm_object *obj); main(int ac, char **av) { @@ -183,6 +185,13 @@ dumpvp(kvm_t *kd, struct vnode *vp, int whichlist) printf(" vnode %p usecnt %d holdcnt %d type=%s flags %08x", vp, vn.v_usecount, vn.v_holdcnt, vtype(vn.v_type), vn.v_flag); + + if ((vn.v_flag & VOBJBUF) && vn.v_object) { + int npages = getobjpages(kd, vn.v_object); + if (npages) + printf(" vmobjpgs=%d", npages); + } + if (vn.v_flag & VROOT) printf(" VROOT"); if (vn.v_flag & VTEXT) @@ -231,6 +240,7 @@ dumpvp(kvm_t *kd, struct vnode *vp, int whichlist) printf(" VOBJDIRTY"); if (vn.v_flag & VPLACEMARKER) printf(" VPLACEMARKER"); + printf("\n"); if (vn.v_lock.lk_sharecount || vn.v_lock.lk_waitcount || @@ -247,7 +257,17 @@ dumpvp(kvm_t *kd, struct vnode *vp, int whichlist) return(vn.v_freelist.tqe_next); } -void +static +int +getobjpages(kvm_t *kd, struct vm_object *obj) +{ + struct vm_object vmobj; + + kkread(kd, (u_long)obj, &vmobj, sizeof(vmobj)); + return(vmobj.resident_page_count); +} + +static void kkread(kvm_t *kd, u_long addr, void *buf, size_t nbytes) { if (kvm_read(kd, addr, buf, nbytes) != nbytes) { -- 2.41.0