--- 2.4.19-pre5/drivers/block/ll_rw_blk.c~ide-lockup Fri Mar 29 21:19:11 2002 +++ 2.4.19-pre5-akpm/drivers/block/ll_rw_blk.c Fri Mar 29 21:20:04 2002 @@ -336,14 +336,16 @@ void generic_unplug_device(void *data) */ int blk_grow_request_list(request_queue_t *q, int nr_requests) { - spin_lock_irq(&io_request_lock); + unsigned long flags; + + spin_lock_irqsave(&io_request_lock, flags); while (q->nr_requests < nr_requests) { struct request *rq; int rw; - spin_unlock_irq(&io_request_lock); + spin_unlock_irqrestore(&io_request_lock, flags); rq = kmem_cache_alloc(request_cachep, SLAB_KERNEL); - spin_lock_irq(&io_request_lock); + spin_lock_irqsave(&io_request_lock, flags); if (rq == NULL) break; memset(rq, 0, sizeof(*rq)); @@ -356,7 +358,7 @@ int blk_grow_request_list(request_queue_ q->batch_requests = q->nr_requests / 4; if (q->batch_requests > 32) q->batch_requests = 32; - spin_unlock_irq(&io_request_lock); + spin_unlock_irqrestore(&io_request_lock, flags); return q->nr_requests; }