From: NeilBrown We we set the too early, they may still be in place and possibly get called even though the array didn't get set up properly. Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- drivers/md/multipath.c | 8 ++++---- drivers/md/raid1.c | 7 +++---- drivers/md/raid10.c | 6 +++--- drivers/md/raid5.c | 7 ++++--- drivers/md/raid6main.c | 6 +++--- 5 files changed, 17 insertions(+), 17 deletions(-) diff -puN drivers/md/multipath.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation drivers/md/multipath.c --- 25/drivers/md/multipath.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation 2005-05-09 22:30:53.000000000 -0700 +++ 25-akpm/drivers/md/multipath.c 2005-05-09 22:30:53.000000000 -0700 @@ -462,10 +462,6 @@ static int multipath_run (mddev_t *mddev } memset(conf->multipaths, 0, sizeof(struct multipath_info)*mddev->raid_disks); - mddev->queue->unplug_fn = multipath_unplug; - - mddev->queue->issue_flush_fn = multipath_issue_flush; - conf->working_disks = 0; ITERATE_RDEV(mddev,rdev,tmp) { disk_idx = rdev->raid_disk; @@ -528,6 +524,10 @@ static int multipath_run (mddev_t *mddev * Ok, everything is just fine now */ mddev->array_size = mddev->size; + + mddev->queue->unplug_fn = multipath_unplug; + mddev->queue->issue_flush_fn = multipath_issue_flush; + return 0; out_free_conf: diff -puN drivers/md/raid10.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation drivers/md/raid10.c --- 25/drivers/md/raid10.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation 2005-05-09 22:30:53.000000000 -0700 +++ 25-akpm/drivers/md/raid10.c 2005-05-09 22:30:53.000000000 -0700 @@ -1639,9 +1639,6 @@ static int run(mddev_t *mddev) mdname(mddev)); goto out_free_conf; } - mddev->queue->unplug_fn = raid10_unplug; - - mddev->queue->issue_flush_fn = raid10_issue_flush; ITERATE_RDEV(mddev, rdev, tmp) { disk_idx = rdev->raid_disk; @@ -1713,6 +1710,9 @@ static int run(mddev_t *mddev) mddev->array_size = size/2; mddev->resync_max_sectors = size; + mddev->queue->unplug_fn = raid10_unplug; + mddev->queue->issue_flush_fn = raid10_issue_flush; + /* Calculate max read-ahead size. * We need to readahead at least twice a whole stripe.... * maybe... diff -puN drivers/md/raid1.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation drivers/md/raid1.c --- 25/drivers/md/raid1.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation 2005-05-09 22:30:53.000000000 -0700 +++ 25-akpm/drivers/md/raid1.c 2005-05-09 22:30:53.000000000 -0700 @@ -1197,10 +1197,6 @@ static int run(mddev_t *mddev) if (!conf->r1bio_pool) goto out_no_mem; - mddev->queue->unplug_fn = raid1_unplug; - - mddev->queue->issue_flush_fn = raid1_issue_flush; - ITERATE_RDEV(mddev, rdev, tmp) { disk_idx = rdev->raid_disk; if (disk_idx >= mddev->raid_disks @@ -1282,6 +1278,9 @@ static int run(mddev_t *mddev) */ mddev->array_size = mddev->size; + mddev->queue->unplug_fn = raid1_unplug; + mddev->queue->issue_flush_fn = raid1_issue_flush; + return 0; out_no_mem: diff -puN drivers/md/raid5.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation drivers/md/raid5.c --- 25/drivers/md/raid5.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation 2005-05-09 22:30:53.000000000 -0700 +++ 25-akpm/drivers/md/raid5.c 2005-05-09 22:30:53.000000000 -0700 @@ -1620,9 +1620,6 @@ static int run (mddev_t *mddev) atomic_set(&conf->active_stripes, 0); atomic_set(&conf->preread_active_stripes, 0); - mddev->queue->unplug_fn = raid5_unplug_device; - mddev->queue->issue_flush_fn = raid5_issue_flush; - PRINTK("raid5: run(%s) called.\n", mdname(mddev)); ITERATE_RDEV(mddev,rdev,tmp) { @@ -1728,6 +1725,10 @@ memory = conf->max_nr_stripes * (sizeof( } /* Ok, everything is just fine now */ + + mddev->queue->unplug_fn = raid5_unplug_device; + mddev->queue->issue_flush_fn = raid5_issue_flush; + mddev->array_size = mddev->size * (mddev->raid_disks - 1); return 0; abort: diff -puN drivers/md/raid6main.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation drivers/md/raid6main.c --- 25/drivers/md/raid6main.c~md-set-the-unplug_fn-and-issue_flush_fn-for-md-devices-after-committed-to-creation 2005-05-09 22:30:53.000000000 -0700 +++ 25-akpm/drivers/md/raid6main.c 2005-05-09 22:30:53.000000000 -0700 @@ -1779,9 +1779,6 @@ static int run (mddev_t *mddev) atomic_set(&conf->active_stripes, 0); atomic_set(&conf->preread_active_stripes, 0); - mddev->queue->unplug_fn = raid6_unplug_device; - mddev->queue->issue_flush_fn = raid6_issue_flush; - PRINTK("raid6: run(%s) called.\n", mdname(mddev)); ITERATE_RDEV(mddev,rdev,tmp) { @@ -1895,6 +1892,9 @@ static int run (mddev_t *mddev) /* Ok, everything is just fine now */ mddev->array_size = mddev->size * (mddev->raid_disks - 2); + + mddev->queue->unplug_fn = raid6_unplug_device; + mddev->queue->issue_flush_fn = raid6_issue_flush; return 0; abort: if (conf) { _