From: NeilBrown The functions are all subtley different. This patch makes them all much the same. In particular, EOPNOTSUPP gets returned by all is appropriate. Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- 25-akpm/drivers/md/linear.c | 11 ++++------- 25-akpm/drivers/md/multipath.c | 13 +++++-------- 25-akpm/drivers/md/raid0.c | 12 ++++-------- 25-akpm/drivers/md/raid1.c | 12 ++++++------ 25-akpm/drivers/md/raid10.c | 12 ++++++------ 25-akpm/drivers/md/raid5.c | 22 ++++++---------------- 25-akpm/drivers/md/raid6main.c | 22 ++++++---------------- 7 files changed, 37 insertions(+), 67 deletions(-) diff -puN drivers/md/linear.c~md-rationalise-issue_flush-function-in-md-personalities drivers/md/linear.c --- 25/drivers/md/linear.c~md-rationalise-issue_flush-function-in-md-personalities Thu Oct 21 15:07:42 2004 +++ 25-akpm/drivers/md/linear.c Thu Oct 21 15:07:42 2004 @@ -99,17 +99,14 @@ static int linear_issue_flush(request_qu linear_conf_t *conf = mddev_to_conf(mddev); int i, ret = 0; - for (i=0; i < mddev->raid_disks; i++) { + for (i=0; i < mddev->raid_disks && ret == 0; i++) { struct block_device *bdev = conf->disks[i].rdev->bdev; request_queue_t *r_queue = bdev_get_queue(bdev); - if (!r_queue->issue_flush_fn) { + if (!r_queue->issue_flush_fn) ret = -EOPNOTSUPP; - break; - } - ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); - if (ret) - break; + else + ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); } return ret; } diff -puN drivers/md/multipath.c~md-rationalise-issue_flush-function-in-md-personalities drivers/md/multipath.c --- 25/drivers/md/multipath.c~md-rationalise-issue_flush-function-in-md-personalities Thu Oct 21 15:07:42 2004 +++ 25-akpm/drivers/md/multipath.c Thu Oct 21 15:07:42 2004 @@ -219,20 +219,17 @@ static int multipath_issue_flush(request multipath_conf_t *conf = mddev_to_conf(mddev); int i, ret = 0; - for (i=0; iraid_disks; i++) { + for (i=0; iraid_disks && ret == 0; i++) { mdk_rdev_t *rdev = conf->multipaths[i].rdev; if (rdev && !rdev->faulty) { struct block_device *bdev = rdev->bdev; request_queue_t *r_queue = bdev_get_queue(bdev); - if (!r_queue->issue_flush_fn) { + if (!r_queue->issue_flush_fn) ret = -EOPNOTSUPP; - break; - } - - ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); - if (ret) - break; + else + ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, + error_sector); } } return ret; diff -puN drivers/md/raid0.c~md-rationalise-issue_flush-function-in-md-personalities drivers/md/raid0.c --- 25/drivers/md/raid0.c~md-rationalise-issue_flush-function-in-md-personalities Thu Oct 21 15:07:42 2004 +++ 25-akpm/drivers/md/raid0.c Thu Oct 21 15:07:42 2004 @@ -48,18 +48,14 @@ static int raid0_issue_flush(request_que mdk_rdev_t **devlist = conf->strip_zone[0].dev; int i, ret = 0; - for (i=0; iraid_disks; i++) { + for (i=0; iraid_disks && ret == 0; i++) { struct block_device *bdev = devlist[i]->bdev; request_queue_t *r_queue = bdev_get_queue(bdev); - if (!r_queue->issue_flush_fn) { + if (!r_queue->issue_flush_fn) ret = -EOPNOTSUPP; - break; - } - - ret =r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); - if (ret) - break; + else + ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); } return ret; } diff -puN drivers/md/raid10.c~md-rationalise-issue_flush-function-in-md-personalities drivers/md/raid10.c --- 25/drivers/md/raid10.c~md-rationalise-issue_flush-function-in-md-personalities Thu Oct 21 15:07:42 2004 +++ 25-akpm/drivers/md/raid10.c Thu Oct 21 15:07:42 2004 @@ -613,17 +613,17 @@ static int raid10_issue_flush(request_qu int i, ret = 0; spin_lock_irqsave(&conf->device_lock, flags); - for (i=0; iraid_disks; i++) { + for (i=0; iraid_disks && ret == 0; i++) { mdk_rdev_t *rdev = conf->mirrors[i].rdev; if (rdev && !rdev->faulty) { struct block_device *bdev = rdev->bdev; request_queue_t *r_queue = bdev_get_queue(bdev); - if (r_queue->issue_flush_fn) { - ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); - if (ret) - break; - } + if (!r_queue->issue_flush_fn) + ret = -EOPNOTSUPP; + else + ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, + error_sector); } } spin_unlock_irqrestore(&conf->device_lock, flags); diff -puN drivers/md/raid1.c~md-rationalise-issue_flush-function-in-md-personalities drivers/md/raid1.c --- 25/drivers/md/raid1.c~md-rationalise-issue_flush-function-in-md-personalities Thu Oct 21 15:07:42 2004 +++ 25-akpm/drivers/md/raid1.c Thu Oct 21 15:07:42 2004 @@ -459,17 +459,17 @@ static int raid1_issue_flush(request_que int i, ret = 0; spin_lock_irqsave(&conf->device_lock, flags); - for (i=0; iraid_disks; i++) { + for (i=0; iraid_disks && ret == 0; i++) { mdk_rdev_t *rdev = conf->mirrors[i].rdev; if (rdev && !rdev->faulty) { struct block_device *bdev = rdev->bdev; request_queue_t *r_queue = bdev_get_queue(bdev); - if (r_queue->issue_flush_fn) { - ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); - if (ret) - break; - } + if (!r_queue->issue_flush_fn) + ret = -EOPNOTSUPP; + else + ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, + error_sector); } } spin_unlock_irqrestore(&conf->device_lock, flags); diff -puN drivers/md/raid5.c~md-rationalise-issue_flush-function-in-md-personalities drivers/md/raid5.c --- 25/drivers/md/raid5.c~md-rationalise-issue_flush-function-in-md-personalities Thu Oct 21 15:07:42 2004 +++ 25-akpm/drivers/md/raid5.c Thu Oct 21 15:07:42 2004 @@ -1347,27 +1347,17 @@ static int raid5_issue_flush(request_que raid5_conf_t *conf = mddev_to_conf(mddev); int i, ret = 0; - for (i=0; iraid_disks; i++) { + for (i=0; iraid_disks && ret == 0; i++) { mdk_rdev_t *rdev = conf->disks[i].rdev; if (rdev && !rdev->faulty) { struct block_device *bdev = rdev->bdev; - request_queue_t *r_queue; + request_queue_t *r_queue = bdev_get_queue(bdev); - if (!bdev) - continue; - - r_queue = bdev_get_queue(bdev); - if (!r_queue) - continue; - - if (!r_queue->issue_flush_fn) { + if (!r_queue->issue_flush_fn) ret = -EOPNOTSUPP; - break; - } - - ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); - if (ret) - break; + else + ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, + error_sector); } } return ret; diff -puN drivers/md/raid6main.c~md-rationalise-issue_flush-function-in-md-personalities drivers/md/raid6main.c --- 25/drivers/md/raid6main.c~md-rationalise-issue_flush-function-in-md-personalities Thu Oct 21 15:07:42 2004 +++ 25-akpm/drivers/md/raid6main.c Thu Oct 21 15:07:42 2004 @@ -1509,27 +1509,17 @@ static int raid6_issue_flush(request_que raid6_conf_t *conf = mddev_to_conf(mddev); int i, ret = 0; - for (i=0; iraid_disks; i++) { + for (i=0; iraid_disks && ret == 0; i++) { mdk_rdev_t *rdev = conf->disks[i].rdev; if (rdev && !rdev->faulty) { struct block_device *bdev = rdev->bdev; - request_queue_t *r_queue; + request_queue_t *r_queue = bdev_get_queue(bdev); - if (!bdev) - continue; - - r_queue = bdev_get_queue(bdev); - if (!r_queue) - continue; - - if (!r_queue->issue_flush_fn) { + if (!r_queue->issue_flush_fn) ret = -EOPNOTSUPP; - break; - } - - ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector); - if (ret) - break; + else + ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, + error_sector); } } return ret; _