Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma
[linux-2.6-block.git] / mm / page-writeback.c
index bc5149d5ec38016da91a8b1c85aeca0193143f0c..b9956fdee8f5d0ed55713eef51e13a6ea42b2e0d 100644 (file)
@@ -296,11 +296,15 @@ static unsigned long highmem_dirtyable_memory(unsigned long total)
 #ifdef CONFIG_HIGHMEM
        int node;
        unsigned long x = 0;
+       int i;
 
        for_each_node_state(node, N_HIGH_MEMORY) {
-               struct zone *z = &NODE_DATA(node)->node_zones[ZONE_HIGHMEM];
+               for (i = 0; i < MAX_NR_ZONES; i++) {
+                       struct zone *z = &NODE_DATA(node)->node_zones[i];
 
-               x += zone_dirtyable_memory(z);
+                       if (is_highmem(z))
+                               x += zone_dirtyable_memory(z);
+               }
        }
        /*
         * Unreclaimable memory (kernel memory or anonymous memory
@@ -407,8 +411,8 @@ static void domain_dirty_limits(struct dirty_throttle_control *dtc)
                bg_thresh = thresh / 2;
        tsk = current;
        if (tsk->flags & PF_LESS_THROTTLE || rt_task(tsk)) {
-               bg_thresh += bg_thresh / 4;
-               thresh += thresh / 4;
+               bg_thresh += bg_thresh / 4 + global_wb_domain.dirty_limit / 32;
+               thresh += thresh / 4 + global_wb_domain.dirty_limit / 32;
        }
        dtc->thresh = thresh;
        dtc->bg_thresh = bg_thresh;