]> granicus.if.org Git - procps-ng/commitdiff
misc: adapted other pgms to changes in, <SLABINFO> api
authorJim Warner <james.warner@comcast.net>
Sun, 5 Jun 2016 05:00:00 +0000 (00:00 -0500)
committerCraig Small <csmall@dropbear.xyz>
Thu, 9 Jun 2016 10:51:06 +0000 (20:51 +1000)
Signed-off-by: Jim Warner <james.warner@comcast.net>
slabtop.c
vmstat.c

index e3bc3ad05052e41a5a955961515950022046e0eb..720f72944aedab8a487e4533758945e28b8f2eae 100644 (file)
--- a/slabtop.c
+++ b/slabtop.c
@@ -46,6 +46,7 @@
 
 #define DEFAULT_SORT  PROCPS_SLABNODE_OBJS
 #define CHAINS_ALLOC  150
+#define MAXTBL(t) (int)( sizeof(t) / sizeof(t[0]) )
 
 static unsigned short Cols, Rows;
 static struct termios Saved_tty;
@@ -54,16 +55,15 @@ static int Run_once = 0;
 
 static struct procps_slabinfo *Slab_info;
 
-enum slabnode_item Sort_item = DEFAULT_SORT;
+enum slabinfo_item Sort_item = DEFAULT_SORT;
 
-enum slabnode_item Node_items[] = {
+enum slabinfo_item Node_items[] = {
     PROCPS_SLABNODE_OBJS,     PROCPS_SLABNODE_AOBJS, PROCPS_SLABNODE_USE,
     PROCPS_SLABNODE_OBJ_SIZE, PROCPS_SLABNODE_SLABS, PROCPS_SLABNODE_OBJS_PER_SLAB,
     PROCPS_SLABNODE_SIZE,     PROCPS_SLABNODE_NAME,
     /* next 2 are sortable but are not displayable,
        thus they need not be represented in the Relative_enums */
-    PROCPS_SLABNODE_PAGES_PER_SLAB, PROCPS_SLABNODE_ASLABS,
-    PROCPS_SLABNODE_stack_end };
+    PROCPS_SLABNODE_PAGES_PER_SLAB, PROCPS_SLABNODE_ASLABS };
 
 enum Relative_enums {
     my_OBJS,  my_AOBJS, my_USE,  my_OSIZE,
@@ -127,7 +127,7 @@ static void __attribute__((__noreturn__)) usage (FILE *out)
  * set_sort_func - return the slab_sort_func that matches the given key.
  * On unrecognizable key, DEFAULT_SORT is returned.
  */
-static enum slabnode_item set_sort_item (
+static enum slabinfo_item set_sort_item (
         const char key)
 {
     switch (tolower(key)) {
@@ -195,28 +195,27 @@ static void parse_opts (int argc, char **argv)
 
 static void print_summary (void)
 {
+    enum slabinfo_item items[] = {
+        PROCPS_SLABS_AOBJS,       PROCPS_SLABS_OBJS,
+        PROCPS_SLABS_ASLABS,      PROCPS_SLABS_SLABS,
+        PROCPS_SLABS_ACACHES,     PROCPS_SLABS_CACHES,
+        PROCPS_SLABS_SIZE_ACTIVE, PROCPS_SLABS_SIZE_TOTAL,
+        PROCPS_SLABS_SIZE_MIN,    PROCPS_SLABS_SIZE_AVG,
+        PROCPS_SLABS_SIZE_MAX
+    };
     enum slabs_enums {
         stat_AOBJS,   stat_OBJS,   stat_ASLABS, stat_SLABS,
         stat_ACACHES, stat_CACHES, stat_ACTIVE, stat_TOTAL,
         stat_MIN,     stat_AVG,    stat_MAX
     };
-    static struct slab_result stats[] = {
-        { PROCPS_SLABS_AOBJS,       0 },
-        { PROCPS_SLABS_OBJS,        0 },
-        { PROCPS_SLABS_ASLABS,      0 },
-        { PROCPS_SLABS_SLABS,       0 },
-        { PROCPS_SLABS_ACACHES,     0 },
-        { PROCPS_SLABS_CACHES,      0 },
-        { PROCPS_SLABS_SIZE_ACTIVE, 0 },
-        { PROCPS_SLABS_SIZE_TOTAL,  0 },
-        { PROCPS_SLABS_SIZE_MIN,    0 },
-        { PROCPS_SLABS_SIZE_AVG,    0 },
-        { PROCPS_SLABS_SIZE_MAX,    0 },
-        { PROCPS_SLABS_stack_end,   0 }
-    };
+    struct slabinfo_stack *p;
+    struct slabinfo_result *stats;
 
-    if (procps_slabs_getstack(Slab_info, stats) < 0) \
+    if (!(p = procps_slabinfo_select(Slab_info, items, MAXTBL(items))))
         xerrx(EXIT_FAILURE, _("Error getting slab summary results"));
+    /* we really should use the provided PROCPS_SLABINFO_VAL macro but,
+       let's do this instead to salvage as much original code as possible ... */
+    stats = p->head;
 
     PRINT_line(" %-35s: %u / %u (%.1f%%)\n"
                , /* Translation Hint: Next five strings must not
@@ -258,7 +257,7 @@ static void print_headings (void)
     PRINT_line("%-78s\n", _("  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME"));
 }
 
-static void print_details (struct slabnode_stack *stack)
+static void print_details (struct slabinfo_stack *stack)
 {
     PRINT_line("%6u %6u %3u%% %7.2fK %6u %8u %9luK %-23s\n"
         , stack->head[my_OBJS ].result.u_int
@@ -276,9 +275,8 @@ static void print_details (struct slabnode_stack *stack)
 
 int main(int argc, char *argv[])
 {
-    int is_tty, nr_slabs, rc = EXIT_SUCCESS;
+    int is_tty, rc = EXIT_SUCCESS;
     unsigned short old_rows;
-    struct slabnode_stack **v;
 
 #ifdef HAVE_PROGRAM_INVOCATION_NAME
     program_invocation_name = program_invocation_short_name;
@@ -291,10 +289,7 @@ int main(int argc, char *argv[])
     parse_opts(argc, argv);
 
     if (procps_slabinfo_new(&Slab_info) < 0)
-        xerrx(EXIT_FAILURE, _("Unable to create slabinfo structure"));
-
-    if (!(v = procps_slabnode_stacks_alloc(Slab_info, CHAINS_ALLOC, MAX_ITEMS, Node_items)))
-        xerrx(EXIT_FAILURE, _("Unable to allocate slabinfo nodes"));
+        xerr(EXIT_FAILURE, _("Unable to create slabinfo structure"));
 
     if (!Run_once) {
         is_tty = isatty(STDIN_FILENO);
@@ -309,17 +304,18 @@ int main(int argc, char *argv[])
     }
 
     do {
+        struct slabinfo_reap *reaped;
         struct timeval tv;
         fd_set readfds;
         int i;
 
-        // this next guy also performs the procps_slabnode_read() call
-        if ((nr_slabs = procps_slabnode_stacks_fill(Slab_info, v, CHAINS_ALLOC)) < 0) {
+        if (!(reaped = procps_slabinfo_reap(Slab_info, Node_items, MAXTBL(Node_items)))) {
             xwarn(_("Unable to get slabinfo node data"));
             rc = EXIT_FAILURE;
             break;
         }
-        if (!(v = procps_slabnode_stacks_sort(Slab_info, v, nr_slabs, Sort_item))) {
+
+        if (!(procps_slabinfo_sort(Slab_info, reaped->stacks, reaped->total, Sort_item, PROCPS_SLABINFO_DESCEND))) {
             xwarn(_("Unable to sort slab nodes"));
             rc = EXIT_FAILURE;
             break;
@@ -328,8 +324,8 @@ int main(int argc, char *argv[])
         if (Run_once) {
             print_summary();
             print_headings();
-            for (i = 0; i < nr_slabs; i++)
-                print_details(v[i]);
+            for (i = 0; i < reaped->total; i++)
+                print_details(reaped->stacks[i]);
             break;
         }
 
@@ -343,8 +339,8 @@ int main(int argc, char *argv[])
         print_headings();
         attroff(A_REVERSE);
 
-        for (i = 0; i < Rows - 8 && i < nr_slabs; i++)
-            print_details(v[i]);
+        for (i = 0; i < Rows - 8 && i < reaped->total; i++)
+            print_details(reaped->stacks[i]);
 
         refresh();
         FD_ZERO(&readfds);
index 162b3f39d1e178c88e8deff3a564d98b4cb1a23c..2415343a6c30365cbd09b277ad2e6af24095cbd5 100644 (file)
--- a/vmstat.c
+++ b/vmstat.c
@@ -650,35 +650,31 @@ static void slabheader(void)
 
 static void slabformat (void)
 {
- #define CHAINS_ALLOC  150
  #define MAX_ITEMS (int)(sizeof(node_items) / sizeof(node_items[0]))
     struct procps_slabinfo *slab_info;
-    struct slabnode_stack **v, *p;
-    int i, j, nr_slabs;
-    enum slabnode_item node_items[] = {
+    struct slabinfo_reap *reaped;
+    int i, j;
+    enum slabinfo_item node_items[] = {
         PROCPS_SLABNODE_AOBJS,    PROCPS_SLABNODE_OBJS,
         PROCPS_SLABNODE_OBJ_SIZE, PROCPS_SLABNODE_OBJS_PER_SLAB,
-        PROCPS_SLABNODE_NAME,     PROCPS_SLABNODE_stack_end };
+        PROCPS_SLABNODE_NAME };
     enum rel_enums {
         slab_AOBJS, slab_OBJS, slab_OSIZE, slab_OPS, slab_NAME };
 
     if (procps_slabinfo_new(&slab_info) < 0)
-        xerrx(EXIT_FAILURE, _("Unable to create slabinfo structure"));
-    if (!(v = procps_slabnode_stacks_alloc(slab_info, CHAINS_ALLOC, MAX_ITEMS, node_items)))
-        xerrx(EXIT_FAILURE, _("Unable to allocate slabinfo nodes"));
+        xerr(EXIT_FAILURE, _("Unable to create slabinfo structure"));
 
     if (!moreheaders)
         slabheader();
 
     for (i = 0; infinite_updates || i < num_updates; i++) {
-        // this next guy also performs the procps_slabnode_read() call
-        if ((nr_slabs = procps_slabnode_stacks_fill(slab_info, v, CHAINS_ALLOC)) < 0)
-            xerrx(EXIT_FAILURE, _("Unable to get slabinfo node data, requires root permission"));
-        if (!(v = procps_slabnode_stacks_sort(slab_info, v, nr_slabs, PROCPS_SLABNODE_NAME)))
+        if (!(reaped = procps_slabinfo_reap(slab_info, node_items, MAX_ITEMS)))
+            xerrx(EXIT_FAILURE, _("Unable to get slabinfo node data"));
+        if (!(procps_slabinfo_sort(slab_info, reaped->stacks, reaped->total, PROCPS_SLABNODE_NAME, PROCPS_SLABINFO_ASCEND)))
             xerrx(EXIT_FAILURE, _("Unable to sort slab nodes"));
 
-        for (j = 0; j < nr_slabs; j++) {
-            p = v[j];
+        for (j = 0; j < reaped->total; j++) {
+            struct slabinfo_stack *p = reaped->stacks[j];
             if (moreheaders && ((j % height) == 0))
                 slabheader();
             printf("%-24.24s %6u %6u %6u %6u\n",
@@ -692,7 +688,6 @@ static void slabformat (void)
             sleep(sleep_time);
     }
     procps_slabinfo_unref(&slab_info);
- #undef CHAINS_ALLOC
  #undef MAX_ITEMS
 }