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@xxxxxxxxxx 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@xxxxxxxxx"> email@xxxxxxxxx </a>