Re: [-mm][PATCH 4/5] core of reclaim throttle

From: Rik van Riel
Date: Mon May 05 2008 - 17:52:00 EST


On Sun, 04 May 2008 22:12:12 +0900
KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> wrote:

> + throttle_on = 1;
> + current->flags |= PF_RECLAIMING;
> + wait_event(zone->reclaim_throttle_waitq,
> + atomic_add_unless(&zone->nr_reclaimers, 1, MAX_RECLAIM_TASKS));

This is a problem. Processes without __GFP_FS or __GFP_IO cannot wait on
processes that have those flags set in their gfp_mask, and tasks that do
not have __GFP_IO set cannot wait for tasks with it. This is because the
tasks that have those flags set may grab locks that the tasks without the
flag are holding, causing a deadlock.

The easiest fix would be to only make tasks with both __GFP_FS and __GFP_IO
sleep. Tasks that call try_to_free_pages without those flags are relatively
rare and should hopefully not cause any issues.

--
All Rights Reversed
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/