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>