aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c346
1 files changed, 205 insertions, 141 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index cb20d0b0555a..c148b6302154 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -36,6 +36,7 @@
36#include <linux/blkdev.h> 36#include <linux/blkdev.h>
37#include <linux/sysctl.h> 37#include <linux/sysctl.h>
38#include <linux/seq_file.h> 38#include <linux/seq_file.h>
39#include <linux/smp_lock.h>
39#include <linux/buffer_head.h> /* for invalidate_bdev */ 40#include <linux/buffer_head.h> /* for invalidate_bdev */
40#include <linux/poll.h> 41#include <linux/poll.h>
41#include <linux/ctype.h> 42#include <linux/ctype.h>
@@ -261,7 +262,7 @@ static int md_make_request(struct request_queue *q, struct bio *bio)
261 * Once ->stop is called and completes, the module will be completely 262 * Once ->stop is called and completes, the module will be completely
262 * unused. 263 * unused.
263 */ 264 */
264static void mddev_suspend(mddev_t *mddev) 265void mddev_suspend(mddev_t *mddev)
265{ 266{
266 BUG_ON(mddev->suspended); 267 BUG_ON(mddev->suspended);
267 mddev->suspended = 1; 268 mddev->suspended = 1;
@@ -269,13 +270,15 @@ static void mddev_suspend(mddev_t *mddev)
269 wait_event(mddev->sb_wait, atomic_read(&mddev->active_io) == 0); 270 wait_event(mddev->sb_wait, atomic_read(&mddev->active_io) == 0);
270 mddev->pers->quiesce(mddev, 1); 271 mddev->pers->quiesce(mddev, 1);
271} 272}
273EXPORT_SYMBOL_GPL(mddev_suspend);
272 274
273static void mddev_resume(mddev_t *mddev) 275void mddev_resume(mddev_t *mddev)
274{ 276{
275 mddev->suspended = 0; 277 mddev->suspended = 0;
276 wake_up(&mddev->sb_wait); 278 wake_up(&mddev->sb_wait);
277 mddev->pers->quiesce(mddev, 0); 279 mddev->pers->quiesce(mddev, 0);
278} 280}
281EXPORT_SYMBOL_GPL(mddev_resume);
279 282
280int mddev_congested(mddev_t *mddev, int bits) 283int mddev_congested(mddev_t *mddev, int bits)
281{ 284{
@@ -353,7 +356,7 @@ static void md_submit_barrier(struct work_struct *ws)
353 /* an empty barrier - all done */ 356 /* an empty barrier - all done */
354 bio_endio(bio, 0); 357 bio_endio(bio, 0);
355 else { 358 else {
356 bio->bi_rw &= ~(1<<BIO_RW_BARRIER); 359 bio->bi_rw &= ~REQ_HARDBARRIER;
357 if (mddev->pers->make_request(mddev, bio)) 360 if (mddev->pers->make_request(mddev, bio))
358 generic_make_request(bio); 361 generic_make_request(bio);
359 mddev->barrier = POST_REQUEST_BARRIER; 362 mddev->barrier = POST_REQUEST_BARRIER;
@@ -384,6 +387,51 @@ void md_barrier_request(mddev_t *mddev, struct bio *bio)
384} 387}
385EXPORT_SYMBOL(md_barrier_request); 388EXPORT_SYMBOL(md_barrier_request);
386 389
390/* Support for plugging.
391 * This mirrors the plugging support in request_queue, but does not
392 * require having a whole queue
393 */
394static void plugger_work(struct work_struct *work)
395{
396 struct plug_handle *plug =
397 container_of(work, struct plug_handle, unplug_work);
398 plug->unplug_fn(plug);
399}
400static void plugger_timeout(unsigned long data)
401{
402 struct plug_handle *plug = (void *)data;
403 kblockd_schedule_work(NULL, &plug->unplug_work);
404}
405void plugger_init(struct plug_handle *plug,
406 void (*unplug_fn)(struct plug_handle *))
407{
408 plug->unplug_flag = 0;
409 plug->unplug_fn = unplug_fn;
410 init_timer(&plug->unplug_timer);
411 plug->unplug_timer.function = plugger_timeout;
412 plug->unplug_timer.data = (unsigned long)plug;
413 INIT_WORK(&plug->unplug_work, plugger_work);
414}
415EXPORT_SYMBOL_GPL(plugger_init);
416
417void plugger_set_plug(struct plug_handle *plug)
418{
419 if (!test_and_set_bit(PLUGGED_FLAG, &plug->unplug_flag))
420 mod_timer(&plug->unplug_timer, jiffies + msecs_to_jiffies(3)+1);
421}
422EXPORT_SYMBOL_GPL(plugger_set_plug);
423
424int plugger_remove_plug(struct plug_handle *plug)
425{
426 if (test_and_clear_bit(PLUGGED_FLAG, &plug->unplug_flag)) {
427 del_timer(&plug->unplug_timer);
428 return 1;
429 } else
430 return 0;
431}
432EXPORT_SYMBOL_GPL(plugger_remove_plug);
433
434
387static inline mddev_t *mddev_get(mddev_t *mddev) 435static inline mddev_t *mddev_get(mddev_t *mddev)
388{ 436{
389 atomic_inc(&mddev->active); 437 atomic_inc(&mddev->active);
@@ -416,7 +464,7 @@ static void mddev_put(mddev_t *mddev)
416 spin_unlock(&all_mddevs_lock); 464 spin_unlock(&all_mddevs_lock);
417} 465}
418 466
419static void mddev_init(mddev_t *mddev) 467void mddev_init(mddev_t *mddev)
420{ 468{
421 mutex_init(&mddev->open_mutex); 469 mutex_init(&mddev->open_mutex);
422 mutex_init(&mddev->reconfig_mutex); 470 mutex_init(&mddev->reconfig_mutex);
@@ -436,6 +484,7 @@ static void mddev_init(mddev_t *mddev)
436 mddev->resync_max = MaxSector; 484 mddev->resync_max = MaxSector;
437 mddev->level = LEVEL_NONE; 485 mddev->level = LEVEL_NONE;
438} 486}
487EXPORT_SYMBOL_GPL(mddev_init);
439 488
440static mddev_t * mddev_find(dev_t unit) 489static mddev_t * mddev_find(dev_t unit)
441{ 490{
@@ -532,25 +581,31 @@ static void mddev_unlock(mddev_t * mddev)
532 * an access to the files will try to take reconfig_mutex 581 * an access to the files will try to take reconfig_mutex
533 * while holding the file unremovable, which leads to 582 * while holding the file unremovable, which leads to
534 * a deadlock. 583 * a deadlock.
535 * So hold open_mutex instead - we are allowed to take 584 * So hold set sysfs_active while the remove in happeing,
536 * it while holding reconfig_mutex, and md_run can 585 * and anything else which might set ->to_remove or my
537 * use it to wait for the remove to complete. 586 * otherwise change the sysfs namespace will fail with
587 * -EBUSY if sysfs_active is still set.
588 * We set sysfs_active under reconfig_mutex and elsewhere
589 * test it under the same mutex to ensure its correct value
590 * is seen.
538 */ 591 */
539 struct attribute_group *to_remove = mddev->to_remove; 592 struct attribute_group *to_remove = mddev->to_remove;
540 mddev->to_remove = NULL; 593 mddev->to_remove = NULL;
541 mutex_lock(&mddev->open_mutex); 594 mddev->sysfs_active = 1;
542 mutex_unlock(&mddev->reconfig_mutex); 595 mutex_unlock(&mddev->reconfig_mutex);
543 596
544 if (to_remove != &md_redundancy_group) 597 if (mddev->kobj.sd) {
545 sysfs_remove_group(&mddev->kobj, to_remove); 598 if (to_remove != &md_redundancy_group)
546 if (mddev->pers == NULL || 599 sysfs_remove_group(&mddev->kobj, to_remove);
547 mddev->pers->sync_request == NULL) { 600 if (mddev->pers == NULL ||
548 sysfs_remove_group(&mddev->kobj, &md_redundancy_group); 601 mddev->pers->sync_request == NULL) {
549 if (mddev->sysfs_action) 602 sysfs_remove_group(&mddev->kobj, &md_redundancy_group);
550 sysfs_put(mddev->sysfs_action); 603 if (mddev->sysfs_action)
551 mddev->sysfs_action = NULL; 604 sysfs_put(mddev->sysfs_action);
605 mddev->sysfs_action = NULL;
606 }
552 } 607 }
553 mutex_unlock(&mddev->open_mutex); 608 mddev->sysfs_active = 0;
554 } else 609 } else
555 mutex_unlock(&mddev->reconfig_mutex); 610 mutex_unlock(&mddev->reconfig_mutex);
556 611
@@ -675,11 +730,11 @@ void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev,
675 * if zero is reached. 730 * if zero is reached.
676 * If an error occurred, call md_error 731 * If an error occurred, call md_error
677 * 732 *
678 * As we might need to resubmit the request if BIO_RW_BARRIER 733 * As we might need to resubmit the request if REQ_HARDBARRIER
679 * causes ENOTSUPP, we allocate a spare bio... 734 * causes ENOTSUPP, we allocate a spare bio...
680 */ 735 */
681 struct bio *bio = bio_alloc(GFP_NOIO, 1); 736 struct bio *bio = bio_alloc(GFP_NOIO, 1);
682 int rw = (1<<BIO_RW) | (1<<BIO_RW_SYNCIO) | (1<<BIO_RW_UNPLUG); 737 int rw = REQ_WRITE | REQ_SYNC | REQ_UNPLUG;
683 738
684 bio->bi_bdev = rdev->bdev; 739 bio->bi_bdev = rdev->bdev;
685 bio->bi_sector = sector; 740 bio->bi_sector = sector;
@@ -691,7 +746,7 @@ void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev,
691 atomic_inc(&mddev->pending_writes); 746 atomic_inc(&mddev->pending_writes);
692 if (!test_bit(BarriersNotsupp, &rdev->flags)) { 747 if (!test_bit(BarriersNotsupp, &rdev->flags)) {
693 struct bio *rbio; 748 struct bio *rbio;
694 rw |= (1<<BIO_RW_BARRIER); 749 rw |= REQ_HARDBARRIER;
695 rbio = bio_clone(bio, GFP_NOIO); 750 rbio = bio_clone(bio, GFP_NOIO);
696 rbio->bi_private = bio; 751 rbio->bi_private = bio;
697 rbio->bi_end_io = super_written_barrier; 752 rbio->bi_end_io = super_written_barrier;
@@ -736,7 +791,7 @@ int sync_page_io(struct block_device *bdev, sector_t sector, int size,
736 struct completion event; 791 struct completion event;
737 int ret; 792 int ret;
738 793
739 rw |= (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG); 794 rw |= REQ_SYNC | REQ_UNPLUG;
740 795
741 bio->bi_bdev = bdev; 796 bio->bi_bdev = bdev;
742 bio->bi_sector = sector; 797 bio->bi_sector = sector;
@@ -1811,11 +1866,9 @@ static int bind_rdev_to_array(mdk_rdev_t * rdev, mddev_t * mddev)
1811 goto fail; 1866 goto fail;
1812 1867
1813 ko = &part_to_dev(rdev->bdev->bd_part)->kobj; 1868 ko = &part_to_dev(rdev->bdev->bd_part)->kobj;
1814 if ((err = sysfs_create_link(&rdev->kobj, ko, "block"))) { 1869 if (sysfs_create_link(&rdev->kobj, ko, "block"))
1815 kobject_del(&rdev->kobj); 1870 /* failure here is OK */;
1816 goto fail; 1871 rdev->sysfs_state = sysfs_get_dirent_safe(rdev->kobj.sd, "state");
1817 }
1818 rdev->sysfs_state = sysfs_get_dirent(rdev->kobj.sd, NULL, "state");
1819 1872
1820 list_add_rcu(&rdev->same_set, &mddev->disks); 1873 list_add_rcu(&rdev->same_set, &mddev->disks);
1821 bd_claim_by_disk(rdev->bdev, rdev->bdev->bd_holder, mddev->gendisk); 1874 bd_claim_by_disk(rdev->bdev, rdev->bdev->bd_holder, mddev->gendisk);
@@ -2083,16 +2136,6 @@ static void sync_sbs(mddev_t * mddev, int nospares)
2083 * with the rest of the array) 2136 * with the rest of the array)
2084 */ 2137 */
2085 mdk_rdev_t *rdev; 2138 mdk_rdev_t *rdev;
2086
2087 /* First make sure individual recovery_offsets are correct */
2088 list_for_each_entry(rdev, &mddev->disks, same_set) {
2089 if (rdev->raid_disk >= 0 &&
2090 mddev->delta_disks >= 0 &&
2091 !test_bit(In_sync, &rdev->flags) &&
2092 mddev->curr_resync_completed > rdev->recovery_offset)
2093 rdev->recovery_offset = mddev->curr_resync_completed;
2094
2095 }
2096 list_for_each_entry(rdev, &mddev->disks, same_set) { 2139 list_for_each_entry(rdev, &mddev->disks, same_set) {
2097 if (rdev->sb_events == mddev->events || 2140 if (rdev->sb_events == mddev->events ||
2098 (nospares && 2141 (nospares &&
@@ -2114,12 +2157,27 @@ static void md_update_sb(mddev_t * mddev, int force_change)
2114 int sync_req; 2157 int sync_req;
2115 int nospares = 0; 2158 int nospares = 0;
2116 2159
2117 mddev->utime = get_seconds();
2118 if (mddev->external)
2119 return;
2120repeat: 2160repeat:
2161 /* First make sure individual recovery_offsets are correct */
2162 list_for_each_entry(rdev, &mddev->disks, same_set) {
2163 if (rdev->raid_disk >= 0 &&
2164 mddev->delta_disks >= 0 &&
2165 !test_bit(In_sync, &rdev->flags) &&
2166 mddev->curr_resync_completed > rdev->recovery_offset)
2167 rdev->recovery_offset = mddev->curr_resync_completed;
2168
2169 }
2170 if (mddev->external || !mddev->persistent) {
2171 clear_bit(MD_CHANGE_DEVS, &mddev->flags);
2172 clear_bit(MD_CHANGE_CLEAN, &mddev->flags);
2173 wake_up(&mddev->sb_wait);
2174 return;
2175 }
2176
2121 spin_lock_irq(&mddev->write_lock); 2177 spin_lock_irq(&mddev->write_lock);
2122 2178
2179 mddev->utime = get_seconds();
2180
2123 set_bit(MD_CHANGE_PENDING, &mddev->flags); 2181 set_bit(MD_CHANGE_PENDING, &mddev->flags);
2124 if (test_and_clear_bit(MD_CHANGE_DEVS, &mddev->flags)) 2182 if (test_and_clear_bit(MD_CHANGE_DEVS, &mddev->flags))
2125 force_change = 1; 2183 force_change = 1;
@@ -2168,19 +2226,6 @@ repeat:
2168 MD_BUG(); 2226 MD_BUG();
2169 mddev->events --; 2227 mddev->events --;
2170 } 2228 }
2171
2172 /*
2173 * do not write anything to disk if using
2174 * nonpersistent superblocks
2175 */
2176 if (!mddev->persistent) {
2177 if (!mddev->external)
2178 clear_bit(MD_CHANGE_PENDING, &mddev->flags);
2179
2180 spin_unlock_irq(&mddev->write_lock);
2181 wake_up(&mddev->sb_wait);
2182 return;
2183 }
2184 sync_sbs(mddev, nospares); 2229 sync_sbs(mddev, nospares);
2185 spin_unlock_irq(&mddev->write_lock); 2230 spin_unlock_irq(&mddev->write_lock);
2186 2231
@@ -2334,8 +2379,8 @@ state_store(mdk_rdev_t *rdev, const char *buf, size_t len)
2334 set_bit(In_sync, &rdev->flags); 2379 set_bit(In_sync, &rdev->flags);
2335 err = 0; 2380 err = 0;
2336 } 2381 }
2337 if (!err && rdev->sysfs_state) 2382 if (!err)
2338 sysfs_notify_dirent(rdev->sysfs_state); 2383 sysfs_notify_dirent_safe(rdev->sysfs_state);
2339 return err ? err : len; 2384 return err ? err : len;
2340} 2385}
2341static struct rdev_sysfs_entry rdev_state = 2386static struct rdev_sysfs_entry rdev_state =
@@ -2430,14 +2475,10 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
2430 rdev->raid_disk = -1; 2475 rdev->raid_disk = -1;
2431 return err; 2476 return err;
2432 } else 2477 } else
2433 sysfs_notify_dirent(rdev->sysfs_state); 2478 sysfs_notify_dirent_safe(rdev->sysfs_state);
2434 sprintf(nm, "rd%d", rdev->raid_disk); 2479 sprintf(nm, "rd%d", rdev->raid_disk);
2435 if (sysfs_create_link(&rdev->mddev->kobj, &rdev->kobj, nm)) 2480 if (sysfs_create_link(&rdev->mddev->kobj, &rdev->kobj, nm))
2436 printk(KERN_WARNING 2481 /* failure here is OK */;
2437 "md: cannot register "
2438 "%s for %s\n",
2439 nm, mdname(rdev->mddev));
2440
2441 /* don't wakeup anyone, leave that to userspace. */ 2482 /* don't wakeup anyone, leave that to userspace. */
2442 } else { 2483 } else {
2443 if (slot >= rdev->mddev->raid_disks) 2484 if (slot >= rdev->mddev->raid_disks)
@@ -2447,7 +2488,7 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
2447 clear_bit(Faulty, &rdev->flags); 2488 clear_bit(Faulty, &rdev->flags);
2448 clear_bit(WriteMostly, &rdev->flags); 2489 clear_bit(WriteMostly, &rdev->flags);
2449 set_bit(In_sync, &rdev->flags); 2490 set_bit(In_sync, &rdev->flags);
2450 sysfs_notify_dirent(rdev->sysfs_state); 2491 sysfs_notify_dirent_safe(rdev->sysfs_state);
2451 } 2492 }
2452 return len; 2493 return len;
2453} 2494}
@@ -2695,6 +2736,24 @@ static struct kobj_type rdev_ktype = {
2695 .default_attrs = rdev_default_attrs, 2736 .default_attrs = rdev_default_attrs,
2696}; 2737};
2697 2738
2739void md_rdev_init(mdk_rdev_t *rdev)
2740{
2741 rdev->desc_nr = -1;
2742 rdev->saved_raid_disk = -1;
2743 rdev->raid_disk = -1;
2744 rdev->flags = 0;
2745 rdev->data_offset = 0;
2746 rdev->sb_events = 0;
2747 rdev->last_read_error.tv_sec = 0;
2748 rdev->last_read_error.tv_nsec = 0;
2749 atomic_set(&rdev->nr_pending, 0);
2750 atomic_set(&rdev->read_errors, 0);
2751 atomic_set(&rdev->corrected_errors, 0);
2752
2753 INIT_LIST_HEAD(&rdev->same_set);
2754 init_waitqueue_head(&rdev->blocked_wait);
2755}
2756EXPORT_SYMBOL_GPL(md_rdev_init);
2698/* 2757/*
2699 * Import a device. If 'super_format' >= 0, then sanity check the superblock 2758 * Import a device. If 'super_format' >= 0, then sanity check the superblock
2700 * 2759 *
@@ -2718,6 +2777,7 @@ static mdk_rdev_t *md_import_device(dev_t newdev, int super_format, int super_mi
2718 return ERR_PTR(-ENOMEM); 2777 return ERR_PTR(-ENOMEM);
2719 } 2778 }
2720 2779
2780 md_rdev_init(rdev);
2721 if ((err = alloc_disk_sb(rdev))) 2781 if ((err = alloc_disk_sb(rdev)))
2722 goto abort_free; 2782 goto abort_free;
2723 2783
@@ -2727,18 +2787,6 @@ static mdk_rdev_t *md_import_device(dev_t newdev, int super_format, int super_mi
2727 2787
2728 kobject_init(&rdev->kobj, &rdev_ktype); 2788 kobject_init(&rdev->kobj, &rdev_ktype);
2729 2789
2730 rdev->desc_nr = -1;
2731 rdev->saved_raid_disk = -1;
2732 rdev->raid_disk = -1;
2733 rdev->flags = 0;
2734 rdev->data_offset = 0;
2735 rdev->sb_events = 0;
2736 rdev->last_read_error.tv_sec = 0;
2737 rdev->last_read_error.tv_nsec = 0;
2738 atomic_set(&rdev->nr_pending, 0);
2739 atomic_set(&rdev->read_errors, 0);
2740 atomic_set(&rdev->corrected_errors, 0);
2741
2742 size = rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS; 2790 size = rdev->bdev->bd_inode->i_size >> BLOCK_SIZE_BITS;
2743 if (!size) { 2791 if (!size) {
2744 printk(KERN_WARNING 2792 printk(KERN_WARNING
@@ -2767,9 +2815,6 @@ static mdk_rdev_t *md_import_device(dev_t newdev, int super_format, int super_mi
2767 } 2815 }
2768 } 2816 }
2769 2817
2770 INIT_LIST_HEAD(&rdev->same_set);
2771 init_waitqueue_head(&rdev->blocked_wait);
2772
2773 return rdev; 2818 return rdev;
2774 2819
2775abort_free: 2820abort_free:
@@ -2960,7 +3005,9 @@ level_store(mddev_t *mddev, const char *buf, size_t len)
2960 * - new personality will access other array. 3005 * - new personality will access other array.
2961 */ 3006 */
2962 3007
2963 if (mddev->sync_thread || mddev->reshape_position != MaxSector) 3008 if (mddev->sync_thread ||
3009 mddev->reshape_position != MaxSector ||
3010 mddev->sysfs_active)
2964 return -EBUSY; 3011 return -EBUSY;
2965 3012
2966 if (!mddev->pers->quiesce) { 3013 if (!mddev->pers->quiesce) {
@@ -3437,7 +3484,7 @@ array_state_store(mddev_t *mddev, const char *buf, size_t len)
3437 if (err) 3484 if (err)
3438 return err; 3485 return err;
3439 else { 3486 else {
3440 sysfs_notify_dirent(mddev->sysfs_state); 3487 sysfs_notify_dirent_safe(mddev->sysfs_state);
3441 return len; 3488 return len;
3442 } 3489 }
3443} 3490}
@@ -3735,7 +3782,7 @@ action_store(mddev_t *mddev, const char *page, size_t len)
3735 } 3782 }
3736 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 3783 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
3737 md_wakeup_thread(mddev->thread); 3784 md_wakeup_thread(mddev->thread);
3738 sysfs_notify_dirent(mddev->sysfs_action); 3785 sysfs_notify_dirent_safe(mddev->sysfs_action);
3739 return len; 3786 return len;
3740} 3787}
3741 3788
@@ -4281,13 +4328,14 @@ static int md_alloc(dev_t dev, char *name)
4281 disk->disk_name); 4328 disk->disk_name);
4282 error = 0; 4329 error = 0;
4283 } 4330 }
4284 if (sysfs_create_group(&mddev->kobj, &md_bitmap_group)) 4331 if (mddev->kobj.sd &&
4332 sysfs_create_group(&mddev->kobj, &md_bitmap_group))
4285 printk(KERN_DEBUG "pointless warning\n"); 4333 printk(KERN_DEBUG "pointless warning\n");
4286 abort: 4334 abort:
4287 mutex_unlock(&disks_mutex); 4335 mutex_unlock(&disks_mutex);
4288 if (!error) { 4336 if (!error && mddev->kobj.sd) {
4289 kobject_uevent(&mddev->kobj, KOBJ_ADD); 4337 kobject_uevent(&mddev->kobj, KOBJ_ADD);
4290 mddev->sysfs_state = sysfs_get_dirent(mddev->kobj.sd, NULL, "array_state"); 4338 mddev->sysfs_state = sysfs_get_dirent_safe(mddev->kobj.sd, "array_state");
4291 } 4339 }
4292 mddev_put(mddev); 4340 mddev_put(mddev);
4293 return error; 4341 return error;
@@ -4325,14 +4373,14 @@ static void md_safemode_timeout(unsigned long data)
4325 if (!atomic_read(&mddev->writes_pending)) { 4373 if (!atomic_read(&mddev->writes_pending)) {
4326 mddev->safemode = 1; 4374 mddev->safemode = 1;
4327 if (mddev->external) 4375 if (mddev->external)
4328 sysfs_notify_dirent(mddev->sysfs_state); 4376 sysfs_notify_dirent_safe(mddev->sysfs_state);
4329 } 4377 }
4330 md_wakeup_thread(mddev->thread); 4378 md_wakeup_thread(mddev->thread);
4331} 4379}
4332 4380
4333static int start_dirty_degraded; 4381static int start_dirty_degraded;
4334 4382
4335static int md_run(mddev_t *mddev) 4383int md_run(mddev_t *mddev)
4336{ 4384{
4337 int err; 4385 int err;
4338 mdk_rdev_t *rdev; 4386 mdk_rdev_t *rdev;
@@ -4344,13 +4392,9 @@ static int md_run(mddev_t *mddev)
4344 4392
4345 if (mddev->pers) 4393 if (mddev->pers)
4346 return -EBUSY; 4394 return -EBUSY;
4347 4395 /* Cannot run until previous stop completes properly */
4348 /* These two calls synchronise us with the 4396 if (mddev->sysfs_active)
4349 * sysfs_remove_group calls in mddev_unlock, 4397 return -EBUSY;
4350 * so they must have completed.
4351 */
4352 mutex_lock(&mddev->open_mutex);
4353 mutex_unlock(&mddev->open_mutex);
4354 4398
4355 /* 4399 /*
4356 * Analyze all RAID superblock(s) 4400 * Analyze all RAID superblock(s)
@@ -4397,7 +4441,7 @@ static int md_run(mddev_t *mddev)
4397 return -EINVAL; 4441 return -EINVAL;
4398 } 4442 }
4399 } 4443 }
4400 sysfs_notify_dirent(rdev->sysfs_state); 4444 sysfs_notify_dirent_safe(rdev->sysfs_state);
4401 } 4445 }
4402 4446
4403 spin_lock(&pers_lock); 4447 spin_lock(&pers_lock);
@@ -4496,11 +4540,12 @@ static int md_run(mddev_t *mddev)
4496 return err; 4540 return err;
4497 } 4541 }
4498 if (mddev->pers->sync_request) { 4542 if (mddev->pers->sync_request) {
4499 if (sysfs_create_group(&mddev->kobj, &md_redundancy_group)) 4543 if (mddev->kobj.sd &&
4544 sysfs_create_group(&mddev->kobj, &md_redundancy_group))
4500 printk(KERN_WARNING 4545 printk(KERN_WARNING
4501 "md: cannot register extra attributes for %s\n", 4546 "md: cannot register extra attributes for %s\n",
4502 mdname(mddev)); 4547 mdname(mddev));
4503 mddev->sysfs_action = sysfs_get_dirent(mddev->kobj.sd, NULL, "sync_action"); 4548 mddev->sysfs_action = sysfs_get_dirent_safe(mddev->kobj.sd, "sync_action");
4504 } else if (mddev->ro == 2) /* auto-readonly not meaningful */ 4549 } else if (mddev->ro == 2) /* auto-readonly not meaningful */
4505 mddev->ro = 0; 4550 mddev->ro = 0;
4506 4551
@@ -4518,8 +4563,7 @@ static int md_run(mddev_t *mddev)
4518 char nm[20]; 4563 char nm[20];
4519 sprintf(nm, "rd%d", rdev->raid_disk); 4564 sprintf(nm, "rd%d", rdev->raid_disk);
4520 if (sysfs_create_link(&mddev->kobj, &rdev->kobj, nm)) 4565 if (sysfs_create_link(&mddev->kobj, &rdev->kobj, nm))
4521 printk("md: cannot register %s for %s\n", 4566 /* failure here is OK */;
4522 nm, mdname(mddev));
4523 } 4567 }
4524 4568
4525 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 4569 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
@@ -4531,12 +4575,12 @@ static int md_run(mddev_t *mddev)
4531 md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */ 4575 md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */
4532 4576
4533 md_new_event(mddev); 4577 md_new_event(mddev);
4534 sysfs_notify_dirent(mddev->sysfs_state); 4578 sysfs_notify_dirent_safe(mddev->sysfs_state);
4535 if (mddev->sysfs_action) 4579 sysfs_notify_dirent_safe(mddev->sysfs_action);
4536 sysfs_notify_dirent(mddev->sysfs_action);
4537 sysfs_notify(&mddev->kobj, NULL, "degraded"); 4580 sysfs_notify(&mddev->kobj, NULL, "degraded");
4538 return 0; 4581 return 0;
4539} 4582}
4583EXPORT_SYMBOL_GPL(md_run);
4540 4584
4541static int do_md_run(mddev_t *mddev) 4585static int do_md_run(mddev_t *mddev)
4542{ 4586{
@@ -4545,7 +4589,11 @@ static int do_md_run(mddev_t *mddev)
4545 err = md_run(mddev); 4589 err = md_run(mddev);
4546 if (err) 4590 if (err)
4547 goto out; 4591 goto out;
4548 4592 err = bitmap_load(mddev);
4593 if (err) {
4594 bitmap_destroy(mddev);
4595 goto out;
4596 }
4549 set_capacity(mddev->gendisk, mddev->array_sectors); 4597 set_capacity(mddev->gendisk, mddev->array_sectors);
4550 revalidate_disk(mddev->gendisk); 4598 revalidate_disk(mddev->gendisk);
4551 kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE); 4599 kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);
@@ -4573,7 +4621,7 @@ static int restart_array(mddev_t *mddev)
4573 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 4621 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
4574 md_wakeup_thread(mddev->thread); 4622 md_wakeup_thread(mddev->thread);
4575 md_wakeup_thread(mddev->sync_thread); 4623 md_wakeup_thread(mddev->sync_thread);
4576 sysfs_notify_dirent(mddev->sysfs_state); 4624 sysfs_notify_dirent_safe(mddev->sysfs_state);
4577 return 0; 4625 return 0;
4578} 4626}
4579 4627
@@ -4644,9 +4692,10 @@ static void md_clean(mddev_t *mddev)
4644 mddev->bitmap_info.chunksize = 0; 4692 mddev->bitmap_info.chunksize = 0;
4645 mddev->bitmap_info.daemon_sleep = 0; 4693 mddev->bitmap_info.daemon_sleep = 0;
4646 mddev->bitmap_info.max_write_behind = 0; 4694 mddev->bitmap_info.max_write_behind = 0;
4695 mddev->plug = NULL;
4647} 4696}
4648 4697
4649static void md_stop_writes(mddev_t *mddev) 4698void md_stop_writes(mddev_t *mddev)
4650{ 4699{
4651 if (mddev->sync_thread) { 4700 if (mddev->sync_thread) {
4652 set_bit(MD_RECOVERY_FROZEN, &mddev->recovery); 4701 set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
@@ -4666,11 +4715,10 @@ static void md_stop_writes(mddev_t *mddev)
4666 md_update_sb(mddev, 1); 4715 md_update_sb(mddev, 1);
4667 } 4716 }
4668} 4717}
4718EXPORT_SYMBOL_GPL(md_stop_writes);
4669 4719
4670static void md_stop(mddev_t *mddev) 4720void md_stop(mddev_t *mddev)
4671{ 4721{
4672 md_stop_writes(mddev);
4673
4674 mddev->pers->stop(mddev); 4722 mddev->pers->stop(mddev);
4675 if (mddev->pers->sync_request && mddev->to_remove == NULL) 4723 if (mddev->pers->sync_request && mddev->to_remove == NULL)
4676 mddev->to_remove = &md_redundancy_group; 4724 mddev->to_remove = &md_redundancy_group;
@@ -4678,6 +4726,7 @@ static void md_stop(mddev_t *mddev)
4678 mddev->pers = NULL; 4726 mddev->pers = NULL;
4679 clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); 4727 clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
4680} 4728}
4729EXPORT_SYMBOL_GPL(md_stop);
4681 4730
4682static int md_set_readonly(mddev_t *mddev, int is_open) 4731static int md_set_readonly(mddev_t *mddev, int is_open)
4683{ 4732{
@@ -4697,7 +4746,7 @@ static int md_set_readonly(mddev_t *mddev, int is_open)
4697 mddev->ro = 1; 4746 mddev->ro = 1;
4698 set_disk_ro(mddev->gendisk, 1); 4747 set_disk_ro(mddev->gendisk, 1);
4699 clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); 4748 clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
4700 sysfs_notify_dirent(mddev->sysfs_state); 4749 sysfs_notify_dirent_safe(mddev->sysfs_state);
4701 err = 0; 4750 err = 0;
4702 } 4751 }
4703out: 4752out:
@@ -4711,26 +4760,29 @@ out:
4711 */ 4760 */
4712static int do_md_stop(mddev_t * mddev, int mode, int is_open) 4761static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4713{ 4762{
4714 int err = 0;
4715 struct gendisk *disk = mddev->gendisk; 4763 struct gendisk *disk = mddev->gendisk;
4716 mdk_rdev_t *rdev; 4764 mdk_rdev_t *rdev;
4717 4765
4718 mutex_lock(&mddev->open_mutex); 4766 mutex_lock(&mddev->open_mutex);
4719 if (atomic_read(&mddev->openers) > is_open) { 4767 if (atomic_read(&mddev->openers) > is_open ||
4768 mddev->sysfs_active) {
4720 printk("md: %s still in use.\n",mdname(mddev)); 4769 printk("md: %s still in use.\n",mdname(mddev));
4721 err = -EBUSY; 4770 mutex_unlock(&mddev->open_mutex);
4722 } else if (mddev->pers) { 4771 return -EBUSY;
4772 }
4723 4773
4774 if (mddev->pers) {
4724 if (mddev->ro) 4775 if (mddev->ro)
4725 set_disk_ro(disk, 0); 4776 set_disk_ro(disk, 0);
4726 4777
4778 md_stop_writes(mddev);
4727 md_stop(mddev); 4779 md_stop(mddev);
4728 mddev->queue->merge_bvec_fn = NULL; 4780 mddev->queue->merge_bvec_fn = NULL;
4729 mddev->queue->unplug_fn = NULL; 4781 mddev->queue->unplug_fn = NULL;
4730 mddev->queue->backing_dev_info.congested_fn = NULL; 4782 mddev->queue->backing_dev_info.congested_fn = NULL;
4731 4783
4732 /* tell userspace to handle 'inactive' */ 4784 /* tell userspace to handle 'inactive' */
4733 sysfs_notify_dirent(mddev->sysfs_state); 4785 sysfs_notify_dirent_safe(mddev->sysfs_state);
4734 4786
4735 list_for_each_entry(rdev, &mddev->disks, same_set) 4787 list_for_each_entry(rdev, &mddev->disks, same_set)
4736 if (rdev->raid_disk >= 0) { 4788 if (rdev->raid_disk >= 0) {
@@ -4740,21 +4792,17 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4740 } 4792 }
4741 4793
4742 set_capacity(disk, 0); 4794 set_capacity(disk, 0);
4795 mutex_unlock(&mddev->open_mutex);
4743 revalidate_disk(disk); 4796 revalidate_disk(disk);
4744 4797
4745 if (mddev->ro) 4798 if (mddev->ro)
4746 mddev->ro = 0; 4799 mddev->ro = 0;
4747 4800 } else
4748 err = 0; 4801 mutex_unlock(&mddev->open_mutex);
4749 }
4750 mutex_unlock(&mddev->open_mutex);
4751 if (err)
4752 return err;
4753 /* 4802 /*
4754 * Free resources if final stop 4803 * Free resources if final stop
4755 */ 4804 */
4756 if (mode == 0) { 4805 if (mode == 0) {
4757
4758 printk(KERN_INFO "md: %s stopped.\n", mdname(mddev)); 4806 printk(KERN_INFO "md: %s stopped.\n", mdname(mddev));
4759 4807
4760 bitmap_destroy(mddev); 4808 bitmap_destroy(mddev);
@@ -4771,13 +4819,11 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4771 kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE); 4819 kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);
4772 if (mddev->hold_active == UNTIL_STOP) 4820 if (mddev->hold_active == UNTIL_STOP)
4773 mddev->hold_active = 0; 4821 mddev->hold_active = 0;
4774
4775 } 4822 }
4776 err = 0;
4777 blk_integrity_unregister(disk); 4823 blk_integrity_unregister(disk);
4778 md_new_event(mddev); 4824 md_new_event(mddev);
4779 sysfs_notify_dirent(mddev->sysfs_state); 4825 sysfs_notify_dirent_safe(mddev->sysfs_state);
4780 return err; 4826 return 0;
4781} 4827}
4782 4828
4783#ifndef MODULE 4829#ifndef MODULE
@@ -5138,7 +5184,7 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
5138 if (err) 5184 if (err)
5139 export_rdev(rdev); 5185 export_rdev(rdev);
5140 else 5186 else
5141 sysfs_notify_dirent(rdev->sysfs_state); 5187 sysfs_notify_dirent_safe(rdev->sysfs_state);
5142 5188
5143 md_update_sb(mddev, 1); 5189 md_update_sb(mddev, 1);
5144 if (mddev->degraded) 5190 if (mddev->degraded)
@@ -5331,8 +5377,11 @@ static int set_bitmap_file(mddev_t *mddev, int fd)
5331 err = 0; 5377 err = 0;
5332 if (mddev->pers) { 5378 if (mddev->pers) {
5333 mddev->pers->quiesce(mddev, 1); 5379 mddev->pers->quiesce(mddev, 1);
5334 if (fd >= 0) 5380 if (fd >= 0) {
5335 err = bitmap_create(mddev); 5381 err = bitmap_create(mddev);
5382 if (!err)
5383 err = bitmap_load(mddev);
5384 }
5336 if (fd < 0 || err) { 5385 if (fd < 0 || err) {
5337 bitmap_destroy(mddev); 5386 bitmap_destroy(mddev);
5338 fd = -1; /* make sure to put the file */ 5387 fd = -1; /* make sure to put the file */
@@ -5581,6 +5630,8 @@ static int update_array_info(mddev_t *mddev, mdu_array_info_t *info)
5581 mddev->bitmap_info.default_offset; 5630 mddev->bitmap_info.default_offset;
5582 mddev->pers->quiesce(mddev, 1); 5631 mddev->pers->quiesce(mddev, 1);
5583 rv = bitmap_create(mddev); 5632 rv = bitmap_create(mddev);
5633 if (!rv)
5634 rv = bitmap_load(mddev);
5584 if (rv) 5635 if (rv)
5585 bitmap_destroy(mddev); 5636 bitmap_destroy(mddev);
5586 mddev->pers->quiesce(mddev, 0); 5637 mddev->pers->quiesce(mddev, 0);
@@ -5813,7 +5864,7 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
5813 if (_IOC_TYPE(cmd) == MD_MAJOR && mddev->ro && mddev->pers) { 5864 if (_IOC_TYPE(cmd) == MD_MAJOR && mddev->ro && mddev->pers) {
5814 if (mddev->ro == 2) { 5865 if (mddev->ro == 2) {
5815 mddev->ro = 0; 5866 mddev->ro = 0;
5816 sysfs_notify_dirent(mddev->sysfs_state); 5867 sysfs_notify_dirent_safe(mddev->sysfs_state);
5817 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 5868 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
5818 md_wakeup_thread(mddev->thread); 5869 md_wakeup_thread(mddev->thread);
5819 } else { 5870 } else {
@@ -5902,6 +5953,7 @@ static int md_open(struct block_device *bdev, fmode_t mode)
5902 mddev_t *mddev = mddev_find(bdev->bd_dev); 5953 mddev_t *mddev = mddev_find(bdev->bd_dev);
5903 int err; 5954 int err;
5904 5955
5956 lock_kernel();
5905 if (mddev->gendisk != bdev->bd_disk) { 5957 if (mddev->gendisk != bdev->bd_disk) {
5906 /* we are racing with mddev_put which is discarding this 5958 /* we are racing with mddev_put which is discarding this
5907 * bd_disk. 5959 * bd_disk.
@@ -5910,6 +5962,7 @@ static int md_open(struct block_device *bdev, fmode_t mode)
5910 /* Wait until bdev->bd_disk is definitely gone */ 5962 /* Wait until bdev->bd_disk is definitely gone */
5911 flush_scheduled_work(); 5963 flush_scheduled_work();
5912 /* Then retry the open from the top */ 5964 /* Then retry the open from the top */
5965 unlock_kernel();
5913 return -ERESTARTSYS; 5966 return -ERESTARTSYS;
5914 } 5967 }
5915 BUG_ON(mddev != bdev->bd_disk->private_data); 5968 BUG_ON(mddev != bdev->bd_disk->private_data);
@@ -5923,6 +5976,7 @@ static int md_open(struct block_device *bdev, fmode_t mode)
5923 5976
5924 check_disk_size_change(mddev->gendisk, bdev); 5977 check_disk_size_change(mddev->gendisk, bdev);
5925 out: 5978 out:
5979 unlock_kernel();
5926 return err; 5980 return err;
5927} 5981}
5928 5982
@@ -5931,8 +5985,10 @@ static int md_release(struct gendisk *disk, fmode_t mode)
5931 mddev_t *mddev = disk->private_data; 5985 mddev_t *mddev = disk->private_data;
5932 5986
5933 BUG_ON(!mddev); 5987 BUG_ON(!mddev);
5988 lock_kernel();
5934 atomic_dec(&mddev->openers); 5989 atomic_dec(&mddev->openers);
5935 mddev_put(mddev); 5990 mddev_put(mddev);
5991 unlock_kernel();
5936 5992
5937 return 0; 5993 return 0;
5938} 5994}
@@ -6059,10 +6115,12 @@ void md_error(mddev_t *mddev, mdk_rdev_t *rdev)
6059 mddev->pers->error_handler(mddev,rdev); 6115 mddev->pers->error_handler(mddev,rdev);
6060 if (mddev->degraded) 6116 if (mddev->degraded)
6061 set_bit(MD_RECOVERY_RECOVER, &mddev->recovery); 6117 set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
6062 sysfs_notify_dirent(rdev->sysfs_state); 6118 sysfs_notify_dirent_safe(rdev->sysfs_state);
6063 set_bit(MD_RECOVERY_INTR, &mddev->recovery); 6119 set_bit(MD_RECOVERY_INTR, &mddev->recovery);
6064 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 6120 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
6065 md_wakeup_thread(mddev->thread); 6121 md_wakeup_thread(mddev->thread);
6122 if (mddev->event_work.func)
6123 schedule_work(&mddev->event_work);
6066 md_new_event_inintr(mddev); 6124 md_new_event_inintr(mddev);
6067} 6125}
6068 6126
@@ -6520,7 +6578,7 @@ void md_write_start(mddev_t *mddev, struct bio *bi)
6520 spin_unlock_irq(&mddev->write_lock); 6578 spin_unlock_irq(&mddev->write_lock);
6521 } 6579 }
6522 if (did_change) 6580 if (did_change)
6523 sysfs_notify_dirent(mddev->sysfs_state); 6581 sysfs_notify_dirent_safe(mddev->sysfs_state);
6524 wait_event(mddev->sb_wait, 6582 wait_event(mddev->sb_wait,
6525 !test_bit(MD_CHANGE_CLEAN, &mddev->flags) && 6583 !test_bit(MD_CHANGE_CLEAN, &mddev->flags) &&
6526 !test_bit(MD_CHANGE_PENDING, &mddev->flags)); 6584 !test_bit(MD_CHANGE_PENDING, &mddev->flags));
@@ -6563,7 +6621,7 @@ int md_allow_write(mddev_t *mddev)
6563 mddev->safemode = 1; 6621 mddev->safemode = 1;
6564 spin_unlock_irq(&mddev->write_lock); 6622 spin_unlock_irq(&mddev->write_lock);
6565 md_update_sb(mddev, 0); 6623 md_update_sb(mddev, 0);
6566 sysfs_notify_dirent(mddev->sysfs_state); 6624 sysfs_notify_dirent_safe(mddev->sysfs_state);
6567 } else 6625 } else
6568 spin_unlock_irq(&mddev->write_lock); 6626 spin_unlock_irq(&mddev->write_lock);
6569 6627
@@ -6574,6 +6632,14 @@ int md_allow_write(mddev_t *mddev)
6574} 6632}
6575EXPORT_SYMBOL_GPL(md_allow_write); 6633EXPORT_SYMBOL_GPL(md_allow_write);
6576 6634
6635void md_unplug(mddev_t *mddev)
6636{
6637 if (mddev->queue)
6638 blk_unplug(mddev->queue);
6639 if (mddev->plug)
6640 mddev->plug->unplug_fn(mddev->plug);
6641}
6642
6577#define SYNC_MARKS 10 6643#define SYNC_MARKS 10
6578#define SYNC_MARK_STEP (3*HZ) 6644#define SYNC_MARK_STEP (3*HZ)
6579void md_do_sync(mddev_t *mddev) 6645void md_do_sync(mddev_t *mddev)
@@ -6752,12 +6818,13 @@ void md_do_sync(mddev_t *mddev)
6752 >= mddev->resync_max - mddev->curr_resync_completed 6818 >= mddev->resync_max - mddev->curr_resync_completed
6753 )) { 6819 )) {
6754 /* time to update curr_resync_completed */ 6820 /* time to update curr_resync_completed */
6755 blk_unplug(mddev->queue); 6821 md_unplug(mddev);
6756 wait_event(mddev->recovery_wait, 6822 wait_event(mddev->recovery_wait,
6757 atomic_read(&mddev->recovery_active) == 0); 6823 atomic_read(&mddev->recovery_active) == 0);
6758 mddev->curr_resync_completed = 6824 mddev->curr_resync_completed =
6759 mddev->curr_resync; 6825 mddev->curr_resync;
6760 set_bit(MD_CHANGE_CLEAN, &mddev->flags); 6826 if (mddev->persistent)
6827 set_bit(MD_CHANGE_CLEAN, &mddev->flags);
6761 sysfs_notify(&mddev->kobj, NULL, "sync_completed"); 6828 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
6762 } 6829 }
6763 6830
@@ -6829,7 +6896,7 @@ void md_do_sync(mddev_t *mddev)
6829 * about not overloading the IO subsystem. (things like an 6896 * about not overloading the IO subsystem. (things like an
6830 * e2fsck being done on the RAID array should execute fast) 6897 * e2fsck being done on the RAID array should execute fast)
6831 */ 6898 */
6832 blk_unplug(mddev->queue); 6899 md_unplug(mddev);
6833 cond_resched(); 6900 cond_resched();
6834 6901
6835 currspeed = ((unsigned long)(io_sectors-mddev->resync_mark_cnt))/2 6902 currspeed = ((unsigned long)(io_sectors-mddev->resync_mark_cnt))/2
@@ -6848,7 +6915,7 @@ void md_do_sync(mddev_t *mddev)
6848 * this also signals 'finished resyncing' to md_stop 6915 * this also signals 'finished resyncing' to md_stop
6849 */ 6916 */
6850 out: 6917 out:
6851 blk_unplug(mddev->queue); 6918 md_unplug(mddev);
6852 6919
6853 wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active)); 6920 wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active));
6854 6921
@@ -6950,10 +7017,7 @@ static int remove_and_add_spares(mddev_t *mddev)
6950 sprintf(nm, "rd%d", rdev->raid_disk); 7017 sprintf(nm, "rd%d", rdev->raid_disk);
6951 if (sysfs_create_link(&mddev->kobj, 7018 if (sysfs_create_link(&mddev->kobj,
6952 &rdev->kobj, nm)) 7019 &rdev->kobj, nm))
6953 printk(KERN_WARNING 7020 /* failure here is OK */;
6954 "md: cannot register "
6955 "%s for %s\n",
6956 nm, mdname(mddev));
6957 spares++; 7021 spares++;
6958 md_new_event(mddev); 7022 md_new_event(mddev);
6959 set_bit(MD_CHANGE_DEVS, &mddev->flags); 7023 set_bit(MD_CHANGE_DEVS, &mddev->flags);
@@ -7046,7 +7110,7 @@ void md_check_recovery(mddev_t *mddev)
7046 mddev->safemode = 0; 7110 mddev->safemode = 0;
7047 spin_unlock_irq(&mddev->write_lock); 7111 spin_unlock_irq(&mddev->write_lock);
7048 if (did_change) 7112 if (did_change)
7049 sysfs_notify_dirent(mddev->sysfs_state); 7113 sysfs_notify_dirent_safe(mddev->sysfs_state);
7050 } 7114 }
7051 7115
7052 if (mddev->flags) 7116 if (mddev->flags)
@@ -7085,7 +7149,7 @@ void md_check_recovery(mddev_t *mddev)
7085 mddev->recovery = 0; 7149 mddev->recovery = 0;
7086 /* flag recovery needed just to double check */ 7150 /* flag recovery needed just to double check */
7087 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 7151 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
7088 sysfs_notify_dirent(mddev->sysfs_action); 7152 sysfs_notify_dirent_safe(mddev->sysfs_action);
7089 md_new_event(mddev); 7153 md_new_event(mddev);
7090 goto unlock; 7154 goto unlock;
7091 } 7155 }
@@ -7147,7 +7211,7 @@ void md_check_recovery(mddev_t *mddev)
7147 mddev->recovery = 0; 7211 mddev->recovery = 0;
7148 } else 7212 } else
7149 md_wakeup_thread(mddev->sync_thread); 7213 md_wakeup_thread(mddev->sync_thread);
7150 sysfs_notify_dirent(mddev->sysfs_action); 7214 sysfs_notify_dirent_safe(mddev->sysfs_action);
7151 md_new_event(mddev); 7215 md_new_event(mddev);
7152 } 7216 }
7153 unlock: 7217 unlock:
@@ -7156,7 +7220,7 @@ void md_check_recovery(mddev_t *mddev)
7156 if (test_and_clear_bit(MD_RECOVERY_RECOVER, 7220 if (test_and_clear_bit(MD_RECOVERY_RECOVER,
7157 &mddev->recovery)) 7221 &mddev->recovery))
7158 if (mddev->sysfs_action) 7222 if (mddev->sysfs_action)
7159 sysfs_notify_dirent(mddev->sysfs_action); 7223 sysfs_notify_dirent_safe(mddev->sysfs_action);
7160 } 7224 }
7161 mddev_unlock(mddev); 7225 mddev_unlock(mddev);
7162 } 7226 }
@@ -7164,7 +7228,7 @@ void md_check_recovery(mddev_t *mddev)
7164 7228
7165void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev) 7229void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev)
7166{ 7230{
7167 sysfs_notify_dirent(rdev->sysfs_state); 7231 sysfs_notify_dirent_safe(rdev->sysfs_state);
7168 wait_event_timeout(rdev->blocked_wait, 7232 wait_event_timeout(rdev->blocked_wait,
7169 !test_bit(Blocked, &rdev->flags), 7233 !test_bit(Blocked, &rdev->flags),
7170 msecs_to_jiffies(5000)); 7234 msecs_to_jiffies(5000));