On Tue, 20 Jul 2010, David Miller wrote: > > The kmalloc() in mdesc_kmalloc() is failable, so remove __GFP_NOFAIL from > > its mask. > > > > Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> > > Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx> > > The __GFP_NOFAIL is there intentionally. > > The code above this, in the cases where the machine description is > dynamically updated by the hypervisor at run time, long after boot, > has no failure handling. > > We absolutely must accept the machine descriptor update and fetch it > from the hypervisor into a new buffer. > > Please don't remove this. > Ok, fair enough. I was convinced by the error handling in both mdesc_update() and mdesc_kmallloc() that this was a failable allocation, but I understand how mdesc_update() must succeed given your description. We can remove those branches from those two functions, though, since __GFP_NOFAIL will always succeed before returning. I'm planning on replacing __GFP_NOFAIL with a __GFP_KILLABLE flag that will use all of the page allocator's capabilities (direct reclaim, memory compaction for order > 0, and the oom killer) before failing. Then, existing __GFP_NOFAIL users can use do { page = alloc_page(GFP_KERNEL | __GFP_KILLABLE); } while (!page); to remove several branches from the page allocator that we'll no longer need. I'll do this in phase two and make sure to convert this instance to do that. Thanks! -- 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>