tools headers UAPI: Sync linux/prctl.h with the kernel sources
[linux-2.6-microblaze.git] / mm / vmstat.c
index 74b2c37..cccee36 100644 (file)
@@ -934,7 +934,7 @@ void cpu_vm_stats_fold(int cpu)
 
 /*
  * this is only called if !populated_zone(zone), which implies no other users of
- * pset->vm_stat_diff[] exsist.
+ * pset->vm_stat_diff[] exist.
  */
 void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset)
 {
@@ -1312,6 +1312,10 @@ const char * const vmstat_text[] = {
 #ifdef CONFIG_HUGETLB_PAGE
        "htlb_buddy_alloc_success",
        "htlb_buddy_alloc_fail",
+#endif
+#ifdef CONFIG_CMA
+       "cma_alloc_success",
+       "cma_alloc_fail",
 #endif
        "unevictable_pgs_culled",
        "unevictable_pgs_scanned",
@@ -1365,6 +1369,10 @@ const char * const vmstat_text[] = {
        "swap_ra",
        "swap_ra_hit",
 #endif
+#ifdef CONFIG_X86
+       "direct_map_level2_splits",
+       "direct_map_level3_splits",
+#endif
 #endif /* CONFIG_VM_EVENT_COUNTERS || CONFIG_MEMCG */
 };
 #endif /* CONFIG_PROC_FS || CONFIG_SYSFS || CONFIG_NUMA || CONFIG_MEMCG */
@@ -1854,25 +1862,34 @@ int vmstat_refresh(struct ctl_table *table, int write,
        if (err)
                return err;
        for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) {
+               /*
+                * Skip checking stats known to go negative occasionally.
+                */
+               switch (i) {
+               case NR_ZONE_WRITE_PENDING:
+               case NR_FREE_CMA_PAGES:
+                       continue;
+               }
                val = atomic_long_read(&vm_zone_stat[i]);
                if (val < 0) {
                        pr_warn("%s: %s %ld\n",
                                __func__, zone_stat_name(i), val);
-                       err = -EINVAL;
                }
        }
-#ifdef CONFIG_NUMA
-       for (i = 0; i < NR_VM_NUMA_STAT_ITEMS; i++) {
-               val = atomic_long_read(&vm_numa_stat[i]);
+       for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++) {
+               /*
+                * Skip checking stats known to go negative occasionally.
+                */
+               switch (i) {
+               case NR_WRITEBACK:
+                       continue;
+               }
+               val = atomic_long_read(&vm_node_stat[i]);
                if (val < 0) {
                        pr_warn("%s: %s %ld\n",
-                               __func__, numa_stat_name(i), val);
-                       err = -EINVAL;
+                               __func__, node_stat_name(i), val);
                }
        }
-#endif
-       if (err)
-               return err;
        if (write)
                *ppos += *lenp;
        else