writeback: support retrieving per group debug writeback stats of bdi
[linux-block.git] / mm / page-writeback.c
index 2c1f595d1ddc487008cc55c64d9ef7e612c4ef34..c5fb3121469ad515e128555ce2987b4e72e67d50 100644 (file)
@@ -892,6 +892,25 @@ unsigned long wb_calc_thresh(struct bdi_writeback *wb, unsigned long thresh)
        return __wb_calc_thresh(&gdtc);
 }
 
+unsigned long cgwb_calc_thresh(struct bdi_writeback *wb)
+{
+       struct dirty_throttle_control gdtc = { GDTC_INIT_NO_WB };
+       struct dirty_throttle_control mdtc = { MDTC_INIT(wb, &gdtc) };
+       unsigned long filepages = 0, headroom = 0, writeback = 0;
+
+       gdtc.avail = global_dirtyable_memory();
+       gdtc.dirty = global_node_page_state(NR_FILE_DIRTY) +
+                    global_node_page_state(NR_WRITEBACK);
+
+       mem_cgroup_wb_stats(wb, &filepages, &headroom,
+                           &mdtc.dirty, &writeback);
+       mdtc.dirty += writeback;
+       mdtc_calc_avail(&mdtc, filepages, headroom);
+       domain_dirty_limits(&mdtc);
+
+       return __wb_calc_thresh(&mdtc);
+}
+
 /*
  *                           setpoint - dirty 3
  *        f(dirty) := 1.0 + (----------------)