From: NeilBrown There are currently subtle differences in the different personalities concerning when subdevices are unplugged (faulty? nr_pending?). This patch makes them sll uniform. Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- 25-akpm/drivers/md/multipath.c | 2 +- 25-akpm/drivers/md/raid1.c | 2 +- 25-akpm/drivers/md/raid10.c | 2 +- 25-akpm/drivers/md/raid5.c | 4 ++-- 25-akpm/drivers/md/raid6main.c | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff -puN drivers/md/multipath.c~md-rationalise-unplug-functions-in-md drivers/md/multipath.c --- 25/drivers/md/multipath.c~md-rationalise-unplug-functions-in-md Thu Oct 21 15:07:45 2004 +++ 25-akpm/drivers/md/multipath.c Thu Oct 21 15:07:45 2004 @@ -140,7 +140,7 @@ 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->multipaths[i].rdev; - if (rdev && !rdev->faulty) { + if (rdev && !rdev->faulty && atomic_read(&rdev->nr_pending)) { request_queue_t *r_queue = bdev_get_queue(rdev->bdev); atomic_inc(&rdev->nr_pending); diff -puN drivers/md/raid10.c~md-rationalise-unplug-functions-in-md drivers/md/raid10.c --- 25/drivers/md/raid10.c~md-rationalise-unplug-functions-in-md Thu Oct 21 15:07:45 2004 +++ 25-akpm/drivers/md/raid10.c Thu Oct 21 15:07:45 2004 @@ -584,7 +584,7 @@ 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 && atomic_read(&rdev->nr_pending)) { + if (rdev && !rdev->faulty && atomic_read(&rdev->nr_pending)) { request_queue_t *r_queue = bdev_get_queue(rdev->bdev); atomic_inc(&rdev->nr_pending); diff -puN drivers/md/raid1.c~md-rationalise-unplug-functions-in-md drivers/md/raid1.c --- 25/drivers/md/raid1.c~md-rationalise-unplug-functions-in-md Thu Oct 21 15:07:45 2004 +++ 25-akpm/drivers/md/raid1.c Thu Oct 21 15:07:45 2004 @@ -430,7 +430,7 @@ 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 && atomic_read(&rdev->nr_pending)) { + if (rdev && !rdev->faulty && atomic_read(&rdev->nr_pending)) { request_queue_t *r_queue = bdev_get_queue(rdev->bdev); atomic_inc(&rdev->nr_pending); diff -puN drivers/md/raid5.c~md-rationalise-unplug-functions-in-md drivers/md/raid5.c --- 25/drivers/md/raid5.c~md-rationalise-unplug-functions-in-md Thu Oct 21 15:07:45 2004 +++ 25-akpm/drivers/md/raid5.c Thu Oct 21 15:07:45 2004 @@ -1307,13 +1307,13 @@ 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->disks[i].rdev; - if (rdev && atomic_read(&rdev->nr_pending)) { + if (rdev && !rdev->faulty && 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 && r_queue->unplug_fn) + if (r_queue->unplug_fn) r_queue->unplug_fn(r_queue); spin_lock_irqsave(&conf->device_lock, flags); diff -puN drivers/md/raid6main.c~md-rationalise-unplug-functions-in-md drivers/md/raid6main.c --- 25/drivers/md/raid6main.c~md-rationalise-unplug-functions-in-md Thu Oct 21 15:07:45 2004 +++ 25-akpm/drivers/md/raid6main.c Thu Oct 21 15:07:45 2004 @@ -1469,13 +1469,13 @@ 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->disks[i].rdev; - if (rdev && atomic_read(&rdev->nr_pending)) { + if (rdev && !rdev->faulty && 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 && r_queue->unplug_fn) + if (r_queue->unplug_fn) r_queue->unplug_fn(r_queue); spin_lock_irqsave(&conf->device_lock, flags); _