drivers/base/node.c: reduce stack usage of node_read_meminfo()
[sfrench/cifs-2.6.git] / drivers / base / node.c
index 057979a19eea10283e5db959580a6f0208c8ab80..2872e86837b2bb0013b1d2ea9b7d1095d17cd33c 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/memory.h>
 #include <linux/node.h>
 #include <linux/hugetlb.h>
+#include <linux/compaction.h>
 #include <linux/cpumask.h>
 #include <linux/topology.h>
 #include <linux/nodemask.h>
@@ -65,8 +66,7 @@ static ssize_t node_read_meminfo(struct sys_device * dev,
        struct sysinfo i;
 
        si_meminfo_node(&i, nid);
-
-       n = sprintf(buf, "\n"
+       n = sprintf(buf,
                       "Node %d MemTotal:       %8lu kB\n"
                       "Node %d MemFree:        %8lu kB\n"
                       "Node %d MemUsed:        %8lu kB\n"
@@ -77,13 +77,33 @@ static ssize_t node_read_meminfo(struct sys_device * dev,
                       "Node %d Active(file):   %8lu kB\n"
                       "Node %d Inactive(file): %8lu kB\n"
                       "Node %d Unevictable:    %8lu kB\n"
-                      "Node %d Mlocked:        %8lu kB\n"
+                      "Node %d Mlocked:        %8lu kB\n",
+                      nid, K(i.totalram),
+                      nid, K(i.freeram),
+                      nid, K(i.totalram - i.freeram),
+                      nid, K(node_page_state(nid, NR_ACTIVE_ANON) +
+                               node_page_state(nid, NR_ACTIVE_FILE)),
+                      nid, K(node_page_state(nid, NR_INACTIVE_ANON) +
+                               node_page_state(nid, NR_INACTIVE_FILE)),
+                      nid, K(node_page_state(nid, NR_ACTIVE_ANON)),
+                      nid, K(node_page_state(nid, NR_INACTIVE_ANON)),
+                      nid, K(node_page_state(nid, NR_ACTIVE_FILE)),
+                      nid, K(node_page_state(nid, NR_INACTIVE_FILE)),
+                      nid, K(node_page_state(nid, NR_UNEVICTABLE)),
+                      nid, K(node_page_state(nid, NR_MLOCK)));
+
 #ifdef CONFIG_HIGHMEM
+       n += sprintf(buf + n,
                       "Node %d HighTotal:      %8lu kB\n"
                       "Node %d HighFree:       %8lu kB\n"
                       "Node %d LowTotal:       %8lu kB\n"
-                      "Node %d LowFree:        %8lu kB\n"
+                      "Node %d LowFree:        %8lu kB\n",
+                      nid, K(i.totalhigh),
+                      nid, K(i.freehigh),
+                      nid, K(i.totalram - i.totalhigh),
+                      nid, K(i.freeram - i.freehigh));
 #endif
+       n += sprintf(buf + n,
                       "Node %d Dirty:          %8lu kB\n"
                       "Node %d Writeback:      %8lu kB\n"
                       "Node %d FilePages:      %8lu kB\n"
@@ -98,25 +118,6 @@ static ssize_t node_read_meminfo(struct sys_device * dev,
                       "Node %d Slab:           %8lu kB\n"
                       "Node %d SReclaimable:   %8lu kB\n"
                       "Node %d SUnreclaim:     %8lu kB\n",
-                      nid, K(i.totalram),
-                      nid, K(i.freeram),
-                      nid, K(i.totalram - i.freeram),
-                      nid, K(node_page_state(nid, NR_ACTIVE_ANON) +
-                               node_page_state(nid, NR_ACTIVE_FILE)),
-                      nid, K(node_page_state(nid, NR_INACTIVE_ANON) +
-                               node_page_state(nid, NR_INACTIVE_FILE)),
-                      nid, K(node_page_state(nid, NR_ACTIVE_ANON)),
-                      nid, K(node_page_state(nid, NR_INACTIVE_ANON)),
-                      nid, K(node_page_state(nid, NR_ACTIVE_FILE)),
-                      nid, K(node_page_state(nid, NR_INACTIVE_FILE)),
-                      nid, K(node_page_state(nid, NR_UNEVICTABLE)),
-                      nid, K(node_page_state(nid, NR_MLOCK)),
-#ifdef CONFIG_HIGHMEM
-                      nid, K(i.totalhigh),
-                      nid, K(i.freehigh),
-                      nid, K(i.totalram - i.totalhigh),
-                      nid, K(i.freeram - i.freehigh),
-#endif
                       nid, K(node_page_state(nid, NR_FILE_DIRTY)),
                       nid, K(node_page_state(nid, NR_WRITEBACK)),
                       nid, K(node_page_state(nid, NR_FILE_PAGES)),
@@ -246,6 +247,8 @@ int register_node(struct node *node, int num, struct node *parent)
                scan_unevictable_register_node(node);
 
                hugetlb_register_node(node);
+
+               compaction_register_node(node);
        }
        return error;
 }