On Mon, 23 Aug 2010, Andrew Morton wrote: > > > > diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c > > > > --- a/drivers/md/dm-region-hash.c > > > > +++ b/drivers/md/dm-region-hash.c > > > > @@ -289,8 +289,12 @@ static struct dm_region *__rh_alloc(struct dm_region_hash *rh, region_t region) > > > > struct dm_region *reg, *nreg; > > > > > > > > nreg = mempool_alloc(rh->region_pool, GFP_ATOMIC); > > > > - if (unlikely(!nreg)) > > > > - nreg = kmalloc(sizeof(*nreg), GFP_NOIO | __GFP_NOFAIL); > > > > + if (unlikely(!nreg)) { > > > > + /* FIXME: this may potentially loop forever */ > > > > + do { > > > > + nreg = kmalloc(sizeof(*nreg), GFP_NOIO); > > > > + } while (!nreg); > > > > + } > > > > > > > > nreg->state = rh->log->type->in_sync(rh->log, region, 1) ? > > > > DM_RH_CLEAN : DM_RH_NOSYNC; > > > > > > erm. > > > > > > The reason for adding GFP_NOFAIL in the first place was my observation > > > that the kernel contained lots of open-coded retry-for-ever loops. > > > > > > All of these are wrong, bad, buggy and mustfix. So we consolidated the > > > wrongbadbuggymustfix concept into the core MM so that miscreants could > > > be easily identified and hopefully fixed. > > > > > > > That consolidation would have been unnecessary, then, since all > > allocations with order < PAGE_ALLOC_COSTLY_ORDER automatically loop > > indefinitely in the page allocator. > > The difference is that an order-0 !__GFP_NOFAIL allocation attempt can > fail due to oom-killing. Unless someone broke that. > This is GFP_NOIO, which all the allocations in this patchset are (or GFP_NOFS), so the oom killer isn't involved. -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html