On 09/14/2010 07:11 PM, Neil Brown wrote:
Index: linux-2.6.32-SLE11-SP1/mm/vmscan.c =================================================================== --- linux-2.6.32-SLE11-SP1.orig/mm/vmscan.c 2010-09-15 08:37:32.000000000 +1000 +++ linux-2.6.32-SLE11-SP1/mm/vmscan.c 2010-09-15 08:38:57.000000000 +1000 @@ -1106,6 +1106,11 @@ static unsigned long shrink_inactive_lis /* We are about to die and free our memory. Return now. */ if (fatal_signal_pending(current)) return SWAP_CLUSTER_MAX; + if (!(sc->gfp_mask& __GFP_IO)) + /* Not allowed to do IO, so mustn't wait + * on processes that might try to + */ + return SWAP_CLUSTER_MAX; } /*
Close. We must also be sure that processes without __GFP_FS set in their gfp_mask do not wait on processes that do have __GFP_FS set. Considering how many times we've run into a bug like this, I'm kicking myself for not having thought of it :( -- All rights reversed -- 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/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>