From owner-freebsd-bugs@FreeBSD.ORG Thu Jul 28 23:40:08 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7CB331065672 for ; Thu, 28 Jul 2011 23:40:08 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 51BD38FC0C for ; Thu, 28 Jul 2011 23:40:08 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SNe8TR040312 for ; Thu, 28 Jul 2011 23:40:08 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p6SNe8kH040311; Thu, 28 Jul 2011 23:40:08 GMT (envelope-from gnats) Resent-Date: Thu, 28 Jul 2011 23:40:08 GMT Resent-Message-Id: <201107282340.p6SNe8kH040311@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Robert Millan Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 332491065670 for ; Thu, 28 Jul 2011 23:30:44 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id 0A1058FC08 for ; Thu, 28 Jul 2011 23:30:44 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SNUh5l033207 for ; Thu, 28 Jul 2011 23:30:43 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id p6SNUhJX033206; Thu, 28 Jul 2011 23:30:43 GMT (envelope-from nobody) Message-Id: <201107282330.p6SNUhJX033206@red.freebsd.org> Date: Thu, 28 Jul 2011 23:30:43 GMT From: Robert Millan To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: kern/159281: [PATCH] Linux-like /proc/swaps for linprocfs X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 23:40:08 -0000 >Number: 159281 >Category: kern >Synopsis: [PATCH] Linux-like /proc/swaps for linprocfs >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Jul 28 23:40:07 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Robert Millan >Release: Debian GNU/kFreeBSD "sid" >Organization: >Environment: >Description: Please consider this patch, it implements Linux-like /proc/swaps for linprocfs. E.g. $ cat /proc/swaps Filename Type Size Used Priority /dev/zvol/dimoni/swap unknown 2097152 0 -1 >How-To-Repeat: >Fix: Patch attached with submission follows: --- a/sys/compat/linprocfs/linprocfs.c +++ b/sys/compat/linprocfs/linprocfs.c @@ -498,6 +498,44 @@ return (0); } +static int +linprocfs_doswaps(PFS_FILL_ARGS) +{ + struct xswdev xsw; + int mib[3], mibsize; + size_t size; + int n; + long long total, used; + char devname[SPECNAMELEN + 1]; + + sbuf_printf(sb, "Filename\t\t\t\tType\t\tSize\tUsed\tPriority\n"); + + mibsize = sizeof mib / sizeof mib[0]; + + mib[0] = CTL_VM; + mib[1] = VM_SWAP_INFO; + + for (n = 0; ; n++) { + mib[2] = n; + size = sizeof(xsw); + if (kernel_sysctl(td, mib, mibsize, &xsw, &size, NULL, 0, + NULL, 0) != 0) + break; + + size = sizeof(devname); + if (kernel_sysctlbyname(td, "kern.devname", devname, &size, + &xsw.xsw_dev, sizeof (xsw.xsw_dev), NULL, 0) != 0) + break; + + total = (long long)xsw.xsw_nblks * PAGE_SIZE / 1024; + used = (long long)xsw.xsw_used * PAGE_SIZE / 1024; + + sbuf_printf(sb, "/dev/%-34s unknown\t\t%u\t%u\t-1\n", devname, total, used); + } + + return (0); +} + /* * Filler function for proc/uptime */ @@ -1486,6 +1524,8 @@ NULL, NULL, NULL, 0); pfs_create_file(root, "stat", &linprocfs_dostat, NULL, NULL, NULL, PFS_RD); + pfs_create_file(root, "swaps", &linprocfs_doswaps, + NULL, NULL, NULL, PFS_RD); pfs_create_file(root, "uptime", &linprocfs_douptime, NULL, NULL, NULL, PFS_RD); pfs_create_file(root, "version", &linprocfs_doversion, --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -2398,7 +2398,7 @@ SYSCTL_INT(_vm, OID_AUTO, nswapdev, CTLFLAG_RD, &nswapdev, 0, "Number of swap devices"); -SYSCTL_NODE(_vm, OID_AUTO, swap_info, CTLFLAG_RD, sysctl_vm_swap_info, +SYSCTL_NODE(_vm, VM_SWAP_INFO, swap_info, CTLFLAG_RD, sysctl_vm_swap_info, "Swap statistics by device"); /* --- a/sys/vm/vm_param.h +++ b/sys/vm/vm_param.h @@ -84,7 +84,8 @@ #define VM_V_PAGEOUT_FREE_MIN 9 /* cnt.v_pageout_free_min */ #define VM_PAGEOUT_ALGORITHM 10 /* pageout algorithm */ #define VM_SWAPPING_ENABLED 11 /* swapping enabled */ -#define VM_MAXID 12 /* number of valid vm ids */ +#define VM_SWAP_INFO 12 /* swap_info */ +#define VM_MAXID 13 /* number of valid vm ids */ #define CTL_VM_NAMES { \ { 0, 0 }, \ @@ -99,6 +100,7 @@ { "v_pageout_free_min", CTLTYPE_UINT}, \ { "pageout_algorithm", CTLTYPE_INT}, \ { "swap_enabled", CTLTYPE_INT},\ + { "swap_info", CTLTYPE_STRUCT},\ } /* >Release-Note: >Audit-Trail: >Unformatted: