summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sysdeps/linux/ChangeLog4
-rw-r--r--sysdeps/linux/swap.c38
2 files changed, 35 insertions, 7 deletions
diff --git a/sysdeps/linux/ChangeLog b/sysdeps/linux/ChangeLog
index e155087d..c7224ec8 100644
--- a/sysdeps/linux/ChangeLog
+++ b/sysdeps/linux/ChangeLog
@@ -1,3 +1,7 @@
+2005-06-13 Benoît Dejean <TazForEver@dlfp.org>
+
+ * swap.c: (glibtop_get_swap_s): Added pagein/pageout for linux 2.6.
+
2005-05-26 Benoît Dejean <TazForEver@dlfp.org>
* siglist.c: Fixed compilation on mips. Closes #304570.
diff --git a/sysdeps/linux/swap.c b/sysdeps/linux/swap.c
index b736da77..4c436146 100644
--- a/sysdeps/linux/swap.c
+++ b/sysdeps/linux/swap.c
@@ -49,6 +49,7 @@ glibtop_init_swap_s (glibtop *server)
#define MEMINFO "/proc/meminfo"
#define PROC_STAT "/proc/stat"
+#define PROC_VMSTAT "/proc/vmstat"
void
glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
@@ -69,15 +70,38 @@ glibtop_get_swap_s (glibtop *server, glibtop_swap *buf)
buf->flags = _glibtop_sysdeps_swap;
- file_to_buffer(server, buffer, PROC_STAT);
- p = strstr (buffer, "\nswap");
- if (p == NULL) return;
+ if(server->os_version_code >= LINUX_VERSION_CODE(2, 6, 0))
+ {
+ file_to_buffer (server, buffer, PROC_VMSTAT);
- p = skip_token (p);
+ p = strstr (buffer, "\npswpin");
- buf->pagein = strtoull (p, &p, 0);
- buf->pageout = strtoull (p, &p, 0);
+ if(p)
+ {
+ p = skip_token(p);
+ buf->pagein = strtoull (p, &p, 0);
- buf->flags |= _glibtop_sysdeps_swap_paging;
+ p = skip_token(p);
+ buf->pageout = strtoull (p, &p, 0);
+
+ buf->flags |= _glibtop_sysdeps_swap_paging;
+ }
+ }
+ else /* Linux 2.4 */
+ {
+ file_to_buffer (server, buffer, PROC_STAT);
+
+ p = strstr (buffer, "\nswap");
+
+ if(p)
+ {
+ p = skip_token (p);
+
+ buf->pagein = strtoull (p, &p, 0);
+ buf->pageout = strtoull (p, &p, 0);
+
+ buf->flags |= _glibtop_sysdeps_swap_paging;
+ }
+ }
}