summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/compat/linprocfs/linprocfs.c13
-rw-r--r--sys/compat/linux/linux_misc.c12
-rw-r--r--sys/vm/swap_pager.c18
-rw-r--r--sys/vm/swap_pager.h2
4 files changed, 27 insertions, 18 deletions
diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c
index fe789be..da3530b 100644
--- a/sys/compat/linprocfs/linprocfs.c
+++ b/sys/compat/linprocfs/linprocfs.c
@@ -121,6 +121,7 @@ linprocfs_domeminfo(PFS_FILL_ARGS)
unsigned long long swapused; /* used swap space in bytes */
unsigned long long swapfree; /* free swap space in bytes */
vm_object_t object;
+ int i, j;
memtotal = physmem * PAGE_SIZE;
/*
@@ -135,14 +136,10 @@ linprocfs_domeminfo(PFS_FILL_ARGS)
*/
memused = cnt.v_wire_count * PAGE_SIZE;
memfree = memtotal - memused;
- if (swapblist == NULL) {
- swaptotal = 0;
- swapfree = 0;
- } else {
- swaptotal = (u_quad_t)swapblist->bl_blocks * 1024; /* XXX why 1024? */
- swapfree = (u_quad_t)swapblist->bl_root->u.bmu_avail * PAGE_SIZE;
- }
- swapused = swaptotal - swapfree;
+ swap_pager_status(&i, &j);
+ swaptotal = i * PAGE_SIZE;
+ swapused = j * PAGE_SIZE;
+ swapfree = swaptotal - swapused;
memshared = 0;
TAILQ_FOREACH(object, &vm_object_list, object_list)
if (object->shadow_count > 1)
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index cf113ea..8ccc5cf 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -108,7 +108,7 @@ linux_sysinfo(struct thread *td, struct linux_sysinfo_args *args)
{
struct l_sysinfo sysinfo;
vm_object_t object;
- int i;
+ int i, j;
struct timespec ts;
/* Uptime is copied out of print_uptime() in kern_shutdown.c */
@@ -144,13 +144,9 @@ linux_sysinfo(struct thread *td, struct linux_sysinfo_args *args)
sysinfo.sharedram *= PAGE_SIZE;
sysinfo.bufferram = 0;
- if (swapblist == NULL) {
- sysinfo.totalswap= 0;
- sysinfo.freeswap = 0;
- } else {
- sysinfo.totalswap = swapblist->bl_blocks * 1024;
- sysinfo.freeswap = swapblist->bl_root->u.bmu_avail * PAGE_SIZE;
- }
+ swap_pager_status(&i, &j);
+ sysinfo.totalswap= i * PAGE_SIZE;
+ sysinfo.freeswap = (i - j) * PAGE_SIZE;
sysinfo.procs = 20; /* Hack */
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index faf9075..38806a1 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -142,7 +142,7 @@ static int nsw_wcount_async; /* limit write buffers / asynchronous */
static int nsw_wcount_async_max;/* assigned maximum */
static int nsw_cluster_max; /* maximum VOP I/O allowed */
-struct blist *swapblist;
+static struct blist *swapblist;
static struct swblock **swhash;
static int swhash_mask;
static int swap_async_max = 4; /* maximum in-progress async I/O's */
@@ -2666,6 +2666,22 @@ done2:
return (error);
}
+void
+swap_pager_status(int *total, int *used)
+{
+ struct swdevt *sp;
+ int i;
+
+ *total = 0;
+ *used = 0;
+ for (sp = swdevt, i = 0; i < nswdev; i++, sp++) {
+ if (sp->sw_vp == NULL)
+ continue;
+ *total += sp->sw_nblks;
+ *used += sp->sw_used;
+ }
+}
+
static int
sysctl_vm_swap_info(SYSCTL_HANDLER_ARGS)
{
diff --git a/sys/vm/swap_pager.h b/sys/vm/swap_pager.h
index 4d965a1..34d5bb1 100644
--- a/sys/vm/swap_pager.h
+++ b/sys/vm/swap_pager.h
@@ -93,7 +93,6 @@ struct swdevt {
#define SWAP_META_MASK (SWAP_META_PAGES - 1)
extern int swap_pager_full;
-extern struct blist *swapblist;
extern int vm_swap_size;
void swap_pager_putpages(vm_object_t, vm_page_t *, int, boolean_t, int *);
@@ -102,6 +101,7 @@ void swap_pager_freespace(vm_object_t, vm_pindex_t, vm_size_t);
void swap_pager_swap_init(void);
int swap_pager_isswapped(vm_object_t, int);
int swap_pager_reserve(vm_object_t, vm_pindex_t, vm_size_t);
+void swap_pager_status(int *total, int *used);
#endif /* _KERNEL */
#endif /* _VM_SWAP_PAGER_H_ */
OpenPOWER on IntegriCloud