Commit 7a5febe9 authored by NeilBrown's avatar NeilBrown Committed by Linus Torvalds

[PATCH] md: set the unplug_fn and issue_flush_fn for md devices *after* committed to creation

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: default avatarNeil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 29ac8e05
...@@ -462,10 +462,6 @@ static int multipath_run (mddev_t *mddev) ...@@ -462,10 +462,6 @@ static int multipath_run (mddev_t *mddev)
} }
memset(conf->multipaths, 0, sizeof(struct multipath_info)*mddev->raid_disks); 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; conf->working_disks = 0;
ITERATE_RDEV(mddev,rdev,tmp) { ITERATE_RDEV(mddev,rdev,tmp) {
disk_idx = rdev->raid_disk; disk_idx = rdev->raid_disk;
...@@ -528,6 +524,10 @@ static int multipath_run (mddev_t *mddev) ...@@ -528,6 +524,10 @@ static int multipath_run (mddev_t *mddev)
* Ok, everything is just fine now * Ok, everything is just fine now
*/ */
mddev->array_size = mddev->size; mddev->array_size = mddev->size;
mddev->queue->unplug_fn = multipath_unplug;
mddev->queue->issue_flush_fn = multipath_issue_flush;
return 0; return 0;
out_free_conf: out_free_conf:
......
...@@ -1197,10 +1197,6 @@ static int run(mddev_t *mddev) ...@@ -1197,10 +1197,6 @@ static int run(mddev_t *mddev)
if (!conf->r1bio_pool) if (!conf->r1bio_pool)
goto out_no_mem; goto out_no_mem;
mddev->queue->unplug_fn = raid1_unplug;
mddev->queue->issue_flush_fn = raid1_issue_flush;
ITERATE_RDEV(mddev, rdev, tmp) { ITERATE_RDEV(mddev, rdev, tmp) {
disk_idx = rdev->raid_disk; disk_idx = rdev->raid_disk;
if (disk_idx >= mddev->raid_disks if (disk_idx >= mddev->raid_disks
...@@ -1282,6 +1278,9 @@ static int run(mddev_t *mddev) ...@@ -1282,6 +1278,9 @@ static int run(mddev_t *mddev)
*/ */
mddev->array_size = mddev->size; mddev->array_size = mddev->size;
mddev->queue->unplug_fn = raid1_unplug;
mddev->queue->issue_flush_fn = raid1_issue_flush;
return 0; return 0;
out_no_mem: out_no_mem:
......
...@@ -1639,9 +1639,6 @@ static int run(mddev_t *mddev) ...@@ -1639,9 +1639,6 @@ static int run(mddev_t *mddev)
mdname(mddev)); mdname(mddev));
goto out_free_conf; goto out_free_conf;
} }
mddev->queue->unplug_fn = raid10_unplug;
mddev->queue->issue_flush_fn = raid10_issue_flush;
ITERATE_RDEV(mddev, rdev, tmp) { ITERATE_RDEV(mddev, rdev, tmp) {
disk_idx = rdev->raid_disk; disk_idx = rdev->raid_disk;
...@@ -1713,6 +1710,9 @@ static int run(mddev_t *mddev) ...@@ -1713,6 +1710,9 @@ static int run(mddev_t *mddev)
mddev->array_size = size/2; mddev->array_size = size/2;
mddev->resync_max_sectors = size; mddev->resync_max_sectors = size;
mddev->queue->unplug_fn = raid10_unplug;
mddev->queue->issue_flush_fn = raid10_issue_flush;
/* Calculate max read-ahead size. /* Calculate max read-ahead size.
* We need to readahead at least twice a whole stripe.... * We need to readahead at least twice a whole stripe....
* maybe... * maybe...
......
...@@ -1620,9 +1620,6 @@ static int run (mddev_t *mddev) ...@@ -1620,9 +1620,6 @@ static int run (mddev_t *mddev)
atomic_set(&conf->active_stripes, 0); atomic_set(&conf->active_stripes, 0);
atomic_set(&conf->preread_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)); PRINTK("raid5: run(%s) called.\n", mdname(mddev));
ITERATE_RDEV(mddev,rdev,tmp) { ITERATE_RDEV(mddev,rdev,tmp) {
...@@ -1728,6 +1725,10 @@ memory = conf->max_nr_stripes * (sizeof(struct stripe_head) + ...@@ -1728,6 +1725,10 @@ memory = conf->max_nr_stripes * (sizeof(struct stripe_head) +
} }
/* Ok, everything is just fine now */ /* 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); mddev->array_size = mddev->size * (mddev->raid_disks - 1);
return 0; return 0;
abort: abort:
......
...@@ -1779,9 +1779,6 @@ static int run (mddev_t *mddev) ...@@ -1779,9 +1779,6 @@ static int run (mddev_t *mddev)
atomic_set(&conf->active_stripes, 0); atomic_set(&conf->active_stripes, 0);
atomic_set(&conf->preread_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)); PRINTK("raid6: run(%s) called.\n", mdname(mddev));
ITERATE_RDEV(mddev,rdev,tmp) { ITERATE_RDEV(mddev,rdev,tmp) {
...@@ -1895,6 +1892,9 @@ static int run (mddev_t *mddev) ...@@ -1895,6 +1892,9 @@ static int run (mddev_t *mddev)
/* Ok, everything is just fine now */ /* Ok, everything is just fine now */
mddev->array_size = mddev->size * (mddev->raid_disks - 2); 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; return 0;
abort: abort:
if (conf) { if (conf) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment