[dm-devel] mirror patches - device failure detection/race fix/deadlock fix

Alasdair G Kergon agk at redhat.com
Tue Aug 2 17:35:43 UTC 2005


On Tue, Aug 02, 2005 at 11:00:05AM -0500, Jon Brassow wrote:
> The 'race.patch' fixes a couple race conditions that were a result of 
> the __rh_alloc() function releasing and regrabbing a lock when called.

-       read_unlock(&rh->hash_lock);
-       nreg = mempool_alloc(rh->region_pool, GFP_NOIO);
+       nreg = mempool_alloc(rh->region_pool, GFP_ATOMIC);
        nreg->state = rh->log->type->in_sync(rh->log, region, 1) ?

So mempool_alloc is now called while holding a spinlock.
With GFP_ATOMIC, what happens if it returns NULL?
Doesn't it need to be able to sleep to get the benefit of the mempool?

> The 'deadlock.patch' switches all spin_lock calls on the region_lock to 
> spin_lock_irqsave.  Without this patch you machine will hang.
 
I'd prefer it if race.patch used the correct versions (with or without _irq).

Alasdair
-- 
agk at redhat.com




More information about the dm-devel mailing list