Thread (19 messages) 19 messages, 4 authors, 2011-02-22

Re: [PATCH 3/5] mm: Implement IO-less balance_dirty_pages()

From: Peter Zijlstra <hidden>
Date: 2011-02-04 13:15:58
Also in: linux-fsdevel

On Fri, 2011-02-04 at 02:38 +0100, Jan Kara wrote:
+static int check_dirty_limits(struct backing_dev_info *bdi,
+                             struct dirty_limit_state *pst)
+{
+       struct dirty_limit_state st;
+       unsigned long bdi_thresh;
+       unsigned long min_bdi_thresh;
+       int ret = DIRTY_OK;
 
+       get_global_dirty_limit_state(&st);
+       /*
+        * Throttle it only when the background writeback cannot catch-up. This
+        * avoids (excessively) small writeouts when the bdi limits are ramping
+        * up.
+        */
+       if (st.nr_reclaimable + st.nr_writeback <=
+                       (st.background_thresh + st.dirty_thresh) / 2)
+               goto out;
 
+       get_bdi_dirty_limit_state(bdi, &st);
+       min_bdi_thresh = task_min_dirty_limit(st.bdi_thresh);
+       bdi_thresh = task_dirty_limit(current, st.bdi_thresh);
+
+       /*
+        * The bdi thresh is somehow "soft" limit derived from the global
+        * "hard" limit. The former helps to prevent heavy IO bdi or process
+        * from holding back light ones; The latter is the last resort
+        * safeguard.
+        */
+       if ((st.bdi_nr_reclaimable + st.bdi_nr_writeback > bdi_thresh)
+           || (st.nr_reclaimable + st.nr_writeback > st.dirty_thresh)) {
+               ret = DIRTY_EXCEED_LIMIT;
+               goto out;
+       }
+       if (st.bdi_nr_reclaimable + st.bdi_nr_writeback > min_bdi_thresh) {
+               ret = DIRTY_MAY_EXCEED_LIMIT;
+               goto out;
+       }
+       if (st.nr_reclaimable > st.background_thresh)
+               ret = DIRTY_EXCEED_BACKGROUND;
+out:
+       if (pst)
+               *pst = st;
By mandating pst is always provided you can reduce the total stack
footprint, avoid the memcopy and clean up the control flow ;-)
+       return ret;
+} 
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help