From d0a1038ff39a082a098fc710dc16f8125369d084 Mon Sep 17 00:00:00 2001
From: Brian Behlendorf <behlendorf1@llnl.gov>
Date: Fri, 25 Mar 2011 21:50:40 -0700
Subject: [PATCH] Update /proc/spl/kmem/slab output

The 'slab_fail', 'slab_create', and 'slab_destroy' columns in the slab
output have been removed because they are virtually always zero and
not very useful.

The much more useful 'size' and 'alloc' columns have been added which
show the total slab size and how much of the total size has been
allocated to objects.

Finally, the formatting has been updated to be much more human
readable while still being friendly for tool like awk to parse.
---
 module/spl/spl-proc.c | 46 ++++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 22 deletions(-)

diff --git a/module/spl/spl-proc.c b/module/spl/spl-proc.c
index 789d8e1291..39b65ff387 100644
--- a/module/spl/spl-proc.c
+++ b/module/spl/spl-proc.c
@@ -562,12 +562,16 @@ SPL_PROC_HANDLER(proc_dofreemem)
 static void
 slab_seq_show_headers(struct seq_file *f)
 {
-        seq_printf(f, "%-36s      %-6s - %s %s %s - %s %s %s - "
-                   "%s %s %s - %s %s %s\n", "name", "flags",
-                   "obj_size", "slab_objs", "slab_size",
-                   "slab_fail", "slab_create", "slab_destroy",
-                   "slab_total", "slab_alloc", "slab_max",
-                   "obj_total", "obj_alloc", "obj_max");
+        seq_printf(f,
+            "--------------------- cache ----------"
+            "---------------------------------------------  "
+            "----- slab ------  "
+            "---- object -----\n");
+        seq_printf(f,
+            "name                                  "
+            "  flags      size     alloc slabsize  objsize  "
+            "total alloc   max  "
+            "total alloc   max\n");
 }
 
 static int
@@ -578,22 +582,20 @@ slab_seq_show(struct seq_file *f, void *p)
         ASSERT(skc->skc_magic == SKC_MAGIC);
 
         spin_lock(&skc->skc_lock);
-        seq_printf(f, "%-36s      ", skc->skc_name);
-        seq_printf(f, "0x%04lx - %u %u %u - %lu %lu %lu - "
-                   "%lu %lu %lu - %lu %lu %lu\n",
-                   (long unsigned)skc->skc_flags,
-                   (unsigned)skc->skc_obj_size,
-                   (unsigned)skc->skc_slab_objs,
-                   (unsigned)skc->skc_slab_size,
-                   (long unsigned)skc->skc_slab_fail,
-                   (long unsigned)skc->skc_slab_create,
-                   (long unsigned)skc->skc_slab_destroy,
-                   (long unsigned)skc->skc_slab_total,
-                   (long unsigned)skc->skc_slab_alloc,
-                   (long unsigned)skc->skc_slab_max,
-                   (long unsigned)skc->skc_obj_total,
-                   (long unsigned)skc->skc_obj_alloc,
-                   (long unsigned)skc->skc_obj_max);
+        seq_printf(f, "%-36s  ", skc->skc_name);
+        seq_printf(f, "0x%05lx %9lu %9lu %8u %8u  "
+            "%5lu %5lu %5lu  %5lu %5lu %5lu\n",
+            (long unsigned)skc->skc_flags,
+            (long unsigned)(skc->skc_slab_size * skc->skc_slab_total),
+            (long unsigned)(skc->skc_obj_size * skc->skc_obj_alloc),
+            (unsigned)skc->skc_slab_size,
+            (unsigned)skc->skc_obj_size,
+            (long unsigned)skc->skc_slab_total,
+            (long unsigned)skc->skc_slab_alloc,
+            (long unsigned)skc->skc_slab_max,
+            (long unsigned)skc->skc_obj_total,
+            (long unsigned)skc->skc_obj_alloc,
+            (long unsigned)skc->skc_obj_max);
 
         spin_unlock(&skc->skc_lock);