[Glibc-bsd-commits] r3672 - in trunk/kfreebsd-8/debian: . patches
Robert Millan
rmh at alioth.debian.org
Wed Aug 3 12:48:55 UTC 2011
Author: rmh
Date: 2011-08-03 12:48:55 +0000 (Wed, 03 Aug 2011)
New Revision: 3672
Added:
trunk/kfreebsd-8/debian/patches/000_proc_swaps.diff
Modified:
trunk/kfreebsd-8/debian/changelog
trunk/kfreebsd-8/debian/patches/series
Log:
000_proc_swaps.diff: Implement /proc/swaps.
Modified: trunk/kfreebsd-8/debian/changelog
===================================================================
--- trunk/kfreebsd-8/debian/changelog 2011-08-03 12:07:48 UTC (rev 3671)
+++ trunk/kfreebsd-8/debian/changelog 2011-08-03 12:48:55 UTC (rev 3672)
@@ -7,8 +7,9 @@
@version at -@abiname at -@flavor at .
* Loosen freebsd-utils dependency (8.1-5 already provides proper devd
support now that #630614 has been backported).
+ * 000_proc_swaps.diff: Implement /proc/swaps.
- -- Robert Millan <rmh at debian.org> Sun, 31 Jul 2011 19:26:24 +0200
+ -- Robert Millan <rmh at debian.org> Wed, 03 Aug 2011 14:30:56 +0200
kfreebsd-8 (8.2-6) unstable; urgency=low
Added: trunk/kfreebsd-8/debian/patches/000_proc_swaps.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/000_proc_swaps.diff (rev 0)
+++ trunk/kfreebsd-8/debian/patches/000_proc_swaps.diff 2011-08-03 12:48:55 UTC (rev 3672)
@@ -0,0 +1,133 @@
+--- a/sys/compat/linprocfs/linprocfs.c
++++ b/sys/compat/linprocfs/linprocfs.c
+@@ -501,6 +501,33 @@
+ return (0);
+ }
+
++static int
++linprocfs_doswaps(PFS_FILL_ARGS)
++{
++ struct xswdev xsw;
++ uintmax_t total, used;
++ int n;
++ char devname[SPECNAMELEN + 1];
++
++ sbuf_printf(sb, "Filename\t\t\t\tType\t\tSize\tUsed\tPriority\n");
++ mtx_lock(&Giant);
++ for (n = 0; ; n++) {
++ if (swap_dev_info(n, &xsw, devname, sizeof(devname)) != 0)
++ break;
++ total = (uintmax_t)xsw.xsw_nblks * PAGE_SIZE / 1024;
++ used = (uintmax_t)xsw.xsw_used * PAGE_SIZE / 1024;
++
++ /*
++ * The space and not tab after the device name is on
++ * purpose. Linux does so.
++ */
++ sbuf_printf(sb, "/dev/%-34s unknown\t\t%jd\t%jd\t-1\n",
++ devname, total, used);
++ }
++ mtx_unlock(&Giant);
++ return (0);
++}
++
+ /*
+ * Filler function for proc/uptime
+ */
+@@ -1416,6 +1443,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
+@@ -2365,35 +2365,53 @@
+ mtx_unlock(&sw_dev_mtx);
+ }
+
+-static int
+-sysctl_vm_swap_info(SYSCTL_HANDLER_ARGS)
++int
++swap_dev_info(int name, struct xswdev *xs, char *devname, size_t len)
+ {
+- int *name = (int *)arg1;
+- int error, n;
+- struct xswdev xs;
+ struct swdevt *sp;
+-
+- if (arg2 != 1) /* name length */
+- return (EINVAL);
++ char *tmp_devname;
++ int error, n;
+
+ n = 0;
++ error = ENOENT;
+ mtx_lock(&sw_dev_mtx);
+ TAILQ_FOREACH(sp, &swtailq, sw_list) {
+- if (n == *name) {
+- mtx_unlock(&sw_dev_mtx);
+- xs.xsw_version = XSWDEV_VERSION;
+- xs.xsw_dev = sp->sw_dev;
+- xs.xsw_flags = sp->sw_flags;
+- xs.xsw_nblks = sp->sw_nblks;
+- xs.xsw_used = sp->sw_used;
+-
+- error = SYSCTL_OUT(req, &xs, sizeof(xs));
+- return (error);
++ if (n != name) {
++ n++;
++ continue;
+ }
+- n++;
++ xs->xsw_version = XSWDEV_VERSION;
++ xs->xsw_dev = sp->sw_dev;
++ xs->xsw_flags = sp->sw_flags;
++ xs->xsw_nblks = sp->sw_nblks;
++ xs->xsw_used = sp->sw_used;
++ if (devname != NULL) {
++ if (vn_isdisk(sp->sw_vp, NULL))
++ tmp_devname = sp->sw_vp->v_rdev->si_name;
++ else
++ tmp_devname = "[file]";
++ strncpy(devname, tmp_devname, len);
++ }
++ error = 0;
++ break;
+ }
+ mtx_unlock(&sw_dev_mtx);
+- return (ENOENT);
++ return (error);
++}
++
++static int
++sysctl_vm_swap_info(SYSCTL_HANDLER_ARGS)
++{
++ struct xswdev xs;
++ int error;
++
++ if (arg2 != 1) /* name length */
++ return (EINVAL);
++ error = swap_dev_info(*(int *)arg1, &xs, NULL, 0);
++ if (error != 0)
++ return (error);
++ error = SYSCTL_OUT(req, &xs, sizeof(xs));
++ return (error);
+ }
+
+ SYSCTL_INT(_vm, OID_AUTO, nswapdev, CTLFLAG_RD, &nswapdev, 0,
+--- a/sys/vm/swap_pager.h
++++ b/sys/vm/swap_pager.h
+@@ -75,7 +75,8 @@
+ extern int swap_pager_full;
+ extern int swap_pager_avail;
+
+-struct swdevt;
++struct xswdev;
++int swap_dev_info(int name, struct xswdev *xs, char *devname, size_t len);
+ void swap_pager_copy(vm_object_t, vm_object_t, vm_pindex_t, int);
+ void swap_pager_freespace(vm_object_t, vm_pindex_t, vm_size_t);
+ void swap_pager_swap_init(void);
Modified: trunk/kfreebsd-8/debian/patches/series
===================================================================
--- trunk/kfreebsd-8/debian/patches/series 2011-08-03 12:07:48 UTC (rev 3671)
+++ trunk/kfreebsd-8/debian/patches/series 2011-08-03 12:48:55 UTC (rev 3672)
@@ -3,6 +3,7 @@
000_msk_backport.diff
000_net80211_disclosure.diff
000_uhid_nomatch.diff
+000_proc_swaps.diff
001_misc.diff
002_maxpathlen.diff
003_glibc_dev_aicasm.diff
More information about the Glibc-bsd-commits
mailing list