set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
        set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
        md_new_event();
-       md_wakeup_thread(mddev->thread);
        return 0;
 }
 
 
                        if (err == 0) {
                                md_kick_rdev_from_array(rdev);
-                               if (mddev->pers) {
+                               if (mddev->pers)
                                        set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
-                                       md_wakeup_thread(mddev->thread);
-                               }
                                md_new_event();
                        }
                }
                clear_bit(BlockedBadBlocks, &rdev->flags);
                wake_up(&rdev->blocked_wait);
                set_bit(MD_RECOVERY_NEEDED, &rdev->mddev->recovery);
-               md_wakeup_thread(rdev->mddev->thread);
 
                err = 0;
        } else if (cmd_match(buf, "insync") && rdev->raid_disk == -1) {
                    !test_bit(Replacement, &rdev->flags))
                        set_bit(WantReplacement, &rdev->flags);
                set_bit(MD_RECOVERY_NEEDED, &rdev->mddev->recovery);
-               md_wakeup_thread(rdev->mddev->thread);
                err = 0;
        } else if (cmd_match(buf, "-want_replacement")) {
                /* Clearing 'want_replacement' is always allowed.
                if (rdev->raid_disk >= 0)
                        return -EBUSY;
                set_bit(MD_RECOVERY_NEEDED, &rdev->mddev->recovery);
-               md_wakeup_thread(rdev->mddev->thread);
        } else if (rdev->mddev->pers) {
                /* Activating a spare .. or possibly reactivating
                 * if we ever get bitmaps working here.
        /* run start up tasks that require md_thread */
        md_start(mddev);
 
-       md_wakeup_thread(mddev->thread);
        md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */
 
        set_capacity_and_notify(mddev->gendisk, mddev->array_sectors);
 
        if (mddev->pers->start) {
                set_bit(MD_RECOVERY_WAIT, &mddev->recovery);
-               md_wakeup_thread(mddev->thread);
                ret = mddev->pers->start(mddev);
                clear_bit(MD_RECOVERY_WAIT, &mddev->recovery);
                md_wakeup_thread(mddev->sync_thread);
        pr_debug("md: %s switched to read-write mode.\n", mdname(mddev));
        /* Kick recovery or resync if necessary */
        set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
-       md_wakeup_thread(mddev->thread);
        md_wakeup_thread(mddev->sync_thread);
        sysfs_notify_dirent_safe(mddev->sysfs_state);
        return 0;
        if (!test_bit(MD_RECOVERY_FROZEN, &mddev->recovery)) {
                did_freeze = 1;
                set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
-               md_wakeup_thread(mddev->thread);
        }
 
        stop_sync_thread(mddev, false, false);
        if ((mddev->pers && !err) || did_freeze) {
                clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
                set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
-               md_wakeup_thread(mddev->thread);
                sysfs_notify_dirent_safe(mddev->sysfs_state);
        }
 
        if (!test_bit(MD_RECOVERY_FROZEN, &mddev->recovery)) {
                did_freeze = 1;
                set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
-               md_wakeup_thread(mddev->thread);
        }
 
        stop_sync_thread(mddev, true, false);
                if (did_freeze) {
                        clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
                        set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
-                       md_wakeup_thread(mddev->thread);
                }
                return -EBUSY;
        }
 
        md_kick_rdev_from_array(rdev);
        set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
-       if (mddev->thread)
-               md_wakeup_thread(mddev->thread);
-       else
+       if (!mddev->thread)
                md_update_sb(mddev, 1);
        md_new_event();
 
         * array immediately.
         */
        set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
-       md_wakeup_thread(mddev->thread);
        md_new_event();
        return 0;