On Wed, Jun 25, 2014 at 04:35:28PM -0700, Andrew Morton wrote: > On Wed, 25 Jun 2014 08:58:48 +0100 Mel Gorman <mgorman@xxxxxxx> wrote: > > > @@ -325,7 +321,14 @@ static unsigned long zone_dirty_limit(struct zone *zone) > > */ > > bool zone_dirty_ok(struct zone *zone) > > { > > - unsigned long limit = zone_dirty_limit(zone); > > + unsigned long limit = zone->dirty_limit_cached; > > + struct task_struct *tsk = current; > > + > > + if (tsk->flags & PF_LESS_THROTTLE || rt_task(tsk)) { > > + limit = zone_dirty_limit(zone); > > + zone->dirty_limit_cached = limit; > > + limit += limit / 4; > > + } > > Could we get a comment in here explaining what we're doing and why > PF_LESS_THROTTLE and rt_task control whether we do it? > /* * The dirty limits are lifted by 1/4 for PF_LESS_THROTTLE (ie. nfsd) * and real-time tasks to prioritise their allocations. * PF_LESS_THROTTLE tasks may be cleaning memory and rt tasks may be * blocking tasks that can clean pages. */ That's fairly weak though. It would also seem reasonable to just delete this check and allow PF_LESS_THROTTLE and rt_tasks to fall into the slow path if dirty pages are already fairly distributed between zones. Johannes, any objection to that limit raising logic being deleted? -- Mel Gorman SUSE Labs -- 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