> GFP_BUFFER allocations are done very often by reiserfs.
>
> Thanks
>
> --- mm/page_alloc.c.orig Sat Jun 30 19:33:41 2001
> +++ mm/page_alloc.c Sat Jun 30 19:35:53 2001
> @@ -440,9 +440,13 @@
> * the inactive clean list. (done by page_launder)
> */
> if (gfp_mask & __GFP_WAIT) {
> + int progress;
> memory_pressure++;
> - try_to_free_pages(gfp_mask);
> - goto try_again;
> + progress = try_to_free_pages(gfp_mask);
> + if (progress || ((gfp_mask) & __GFP_IO))
> + goto try_again;
> + else
> + return NULL;
> }
> }
Isn't something like this in 2.4.5-ac22 allready?
* Another issue are GFP_BUFFER allocations; because they
* do not have __GFP_IO set it's possible we cannot make
* any progress freeing pages, in that case it's better
* to give up than to deadlock the kernel looping here.
*/
if (gfp_mask & __GFP_WAIT) {
if (!order || free_shortage()) {
int progress = try_to_free_pages(gfp_mask);
if (progress || (gfp_mask & __GFP_IO))
goto try_again;
/*
* Fail in case no progress was made and the
* allocation may not be able to block on IO.
*/
return NULL;
}
}
2.4.5-ac22 is running like a champion since Jun 29, for me.
Regards,
Dieter
BTW If you have another patch I'll try it for you.
--
Dieter N�tzel
Graduate Student, Computer Science
University of Hamburg
Department of Computer Science
Cognitive Systems Group
Vogt-K�lln-Stra�e 30
D-22527 Hamburg, Germany
email: [EMAIL PROTECTED]
@home: [EMAIL PROTECTED]