]> git.hungrycats.org Git - linux/commitdiff
[PATCH] md: Don't setup make_request_fn for md array until *after* it has been started
authorNeil Brown <neilb@cse.unsw.edu.au>
Mon, 22 Sep 2003 12:21:53 +0000 (05:21 -0700)
committerLinus Torvalds <torvalds@home.osdl.org>
Mon, 22 Sep 2003 12:21:53 +0000 (05:21 -0700)
Also revert to md_fail_request before stopping an array.

The ->stop method can never fail, so there is not point checking it.

drivers/md/md.c

index 6a67e10393e2bd72e8d9ac286d4296a511df77a9..3e6e50d6f0d8878ac5ea1070800cf541053edcd9 100644 (file)
@@ -1607,9 +1607,6 @@ static int do_md_run(mddev_t * mddev)
        mddev->pers = pers[pnum];
        spin_unlock(&pers_lock);
 
-       blk_queue_make_request(mddev->queue, mddev->pers->make_request);
-       mddev->queue->queuedata = mddev;
-
        err = mddev->pers->run(mddev);
        if (err) {
                printk(KERN_ERR "md: pers->run() failed ...\n");
@@ -1627,6 +1624,10 @@ static int do_md_run(mddev_t * mddev)
        set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
        md_wakeup_thread(mddev->thread);
        set_capacity(disk, mddev->array_size<<1);
+
+       blk_queue_make_request(mddev->queue, mddev->pers->make_request);
+       mddev->queue->queuedata = mddev;
+
        return 0;
 }
 
@@ -1698,12 +1699,8 @@ static int do_md_stop(mddev_t * mddev, int ro)
                } else {
                        if (mddev->ro)
                                set_disk_ro(disk, 0);
-                       if (mddev->pers->stop(mddev)) {
-                               err = -EBUSY;
-                               if (mddev->ro)
-                                       set_disk_ro(disk, 1);
-                               goto out;
-                       }
+                       blk_queue_make_request(mddev->queue, md_fail_request);
+                       mddev->pers->stop(mddev);
                        module_put(mddev->pers->owner);
                        mddev->pers = NULL;
                        if (mddev->ro)