X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fmd%2Fraid1.c;h=c600b1b2da85e0d4882ece7c867d241759975791;hb=5237fac468d9ad78bc9c09d26426b3425b876540;hp=bcc81ef13a3513e0c36cede63d372102a4013c1f;hpb=86090fcac5e27b630656fe3d963a6b80e26dac44;p=linux-2.6.git diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index bcc81ef13..c600b1b2d 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -459,11 +459,17 @@ static void unplug_slaves(mddev_t *mddev) spin_lock_irqsave(&conf->device_lock, flags); for (i=0; iraid_disks; i++) { mdk_rdev_t *rdev = conf->mirrors[i].rdev; - if (rdev && !rdev->faulty) { + if (rdev && atomic_read(&rdev->nr_pending)) { request_queue_t *r_queue = bdev_get_queue(rdev->bdev); + atomic_inc(&rdev->nr_pending); + spin_unlock_irqrestore(&conf->device_lock, flags); + if (r_queue->unplug_fn) r_queue->unplug_fn(r_queue); + + spin_lock_irqsave(&conf->device_lock, flags); + atomic_dec(&rdev->nr_pending); } } spin_unlock_irqrestore(&conf->device_lock, flags);