On Fri 04-02-11 14:09:16, Peter Zijlstra wrote: > 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 ;-) OK, will do. Honza -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html