Lines Matching refs:mddev

190 		md_wakeup_thread(conf->mddev->thread);  in raid5_wakeup_stripe_thread()
262 md_wakeup_thread(conf->mddev->thread); in do_release_stripe()
268 md_wakeup_thread(conf->mddev->thread); in do_release_stripe()
349 md_wakeup_thread(conf->mddev->thread); in release_inactive_stripe_list()
395 if (unlikely(!conf->mddev->thread) || in raid5_release_stripe()
400 md_wakeup_thread(conf->mddev->thread); in raid5_release_stripe()
693 if (conf->mddev->reshape_position == MaxSector) in has_failed()
694 return conf->mddev->degraded > conf->max_degraded; in has_failed()
909 md_wakeup_thread(conf->mddev->thread); in stripe_add_to_batch_list()
1145 if (!conf->mddev->external && in ops_run_io()
1146 conf->mddev->sb_flags) { in ops_run_io()
1151 md_check_recovery(conf->mddev); in ops_run_io()
1159 md_wait_for_blocked_rdev(rdev, conf->mddev); in ops_run_io()
1162 rdev_dec_pending(rdev, conf->mddev); in ops_run_io()
1225 if (conf->mddev->gendisk) in ops_run_io()
1227 disk_devt(conf->mddev->gendisk), in ops_run_io()
1275 if (conf->mddev->gendisk) in ops_run_io()
1277 disk_devt(conf->mddev->gendisk), in ops_run_io()
2362 if (conf->mddev->gendisk) in grow_stripes()
2364 "raid%d-%s", conf->level, mdname(conf->mddev)); in grow_stripes()
2367 "raid%d-%p", conf->level, conf->mddev); in grow_stripes()
2439 mddev_suspend(conf->mddev); in resize_chunks()
2453 mddev_resume(conf->mddev); in resize_chunks()
2494 md_allow_write(conf->mddev); in resize_stripes()
2707 mdname(conf->mddev), RAID5_STRIPE_SECTORS(conf), in raid5_end_read_request()
2736 mdname(conf->mddev), in raid5_end_read_request()
2739 else if (conf->mddev->degraded >= conf->max_degraded) { in raid5_end_read_request()
2743 mdname(conf->mddev), in raid5_end_read_request()
2751 mdname(conf->mddev), in raid5_end_read_request()
2758 mdname(conf->mddev), in raid5_end_read_request()
2762 mdname(conf->mddev), bdn); in raid5_end_read_request()
2784 md_error(conf->mddev, rdev); in raid5_end_read_request()
2787 rdev_dec_pending(rdev, conf->mddev); in raid5_end_read_request()
2833 md_error(conf->mddev, rdev); in raid5_end_write_request()
2845 &rdev->mddev->recovery); in raid5_end_write_request()
2858 rdev_dec_pending(rdev, conf->mddev); in raid5_end_write_request()
2873 static void raid5_error(struct mddev *mddev, struct md_rdev *rdev) in raid5_error() argument
2876 struct r5conf *conf = mddev->private; in raid5_error()
2883 mddev->degraded == conf->max_degraded) { in raid5_error()
2888 conf->recovery_disabled = mddev->recovery_disabled; in raid5_error()
2895 mddev->degraded = raid5_calc_degraded(conf); in raid5_error()
2897 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in raid5_error()
2900 set_mask_bits(&mddev->sb_flags, 0, in raid5_error()
2904 mdname(mddev), in raid5_error()
2906 mdname(mddev), in raid5_error()
2907 conf->raid_disks - mddev->degraded); in raid5_error()
2908 r5c_update_on_rdev_error(mddev, rdev); in raid5_error()
3231 mdname(conf->mddev)); in raid5_compute_blocknr()
3475 md_write_inc(conf->mddev, bi); in add_stripe_bio()
3496 if (conf->mddev->bitmap && firstwrite) { in add_stripe_bio()
3511 md_bitmap_startwrite(conf->mddev->bitmap, sh->sector, in add_stripe_bio()
3575 md_error(conf->mddev, rdev); in handle_failed_stripe()
3576 rdev_dec_pending(rdev, conf->mddev); in handle_failed_stripe()
3597 md_write_end(conf->mddev); in handle_failed_stripe()
3602 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_failed_stripe()
3618 md_write_end(conf->mddev); in handle_failed_stripe()
3648 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_failed_stripe()
3660 md_wakeup_thread(conf->mddev->thread); in handle_failed_stripe()
3683 if (test_bit(MD_RECOVERY_RECOVER, &conf->mddev->recovery)) { in handle_failed_sync()
3707 conf->mddev->recovery_disabled; in handle_failed_sync()
3709 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), !abort); in handle_failed_sync()
3723 || rdev->mddev->recovery_cp <= sh->sector)) in want_replace()
3816 sh->sector < sh->raid_conf->mddev->recovery_cp) in need_this_block()
3996 md_write_end(conf->mddev); in handle_stripe_clean_event()
4000 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_stripe_clean_event()
4057 md_wakeup_thread(conf->mddev->thread); in handle_stripe_clean_event()
4084 sector_t recovery_cp = conf->mddev->recovery_cp; in handle_stripe_dirtying()
4135 if (conf->mddev->queue) in handle_stripe_dirtying()
4136 blk_add_trace_msg(conf->mddev->queue, in handle_stripe_dirtying()
4215 if (rcw && conf->mddev->queue) in handle_stripe_dirtying()
4216 blk_add_trace_msg(conf->mddev->queue, "raid5 rcw %llu %d %d %d", in handle_stripe_dirtying()
4304 atomic64_add(RAID5_STRIPE_SECTORS(conf), &conf->mddev->resync_mismatches); in handle_parity_checks5()
4305 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) { in handle_parity_checks5()
4309 "%llu-%llu\n", mdname(conf->mddev), in handle_parity_checks5()
4431 mdname(conf->mddev), in handle_parity_checks6()
4469 atomic64_add(RAID5_STRIPE_SECTORS(conf), &conf->mddev->resync_mismatches); in handle_parity_checks6()
4470 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) { in handle_parity_checks6()
4474 "%llu-%llu\n", mdname(conf->mddev), in handle_parity_checks6()
4770 sh->sector >= conf->mddev->recovery_cp || in analyse_stripe()
4771 test_bit(MD_RECOVERY_REQUESTED, &(conf->mddev->recovery))) in analyse_stripe()
4938 test_bit(MD_SB_CHANGE_PENDING, &conf->mddev->sb_flags)) { in handle_stripe()
4950 rdev_dec_pending(s.blocked_rdev, conf->mddev); in handle_stripe()
5138 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), 1); in handle_stripe()
5147 if (s.failed <= conf->max_degraded && !conf->mddev->ro) in handle_stripe()
5203 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), 1); in handle_stripe()
5213 if (conf->mddev->external) in handle_stripe()
5215 conf->mddev); in handle_stripe()
5222 conf->mddev); in handle_stripe()
5234 md_error(conf->mddev, rdev); in handle_stripe()
5235 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5241 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5250 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5267 md_wakeup_thread(conf->mddev->thread); in handle_stripe()
5307 static int in_chunk_boundary(struct mddev *mddev, struct bio *bio) in in_chunk_boundary() argument
5309 struct r5conf *conf = mddev->private; in in_chunk_boundary()
5333 md_wakeup_thread(conf->mddev->thread); in add_bio_to_retry()
5367 struct mddev *mddev; in raid5_align_endio() local
5377 mddev = rdev->mddev; in raid5_align_endio()
5378 conf = mddev->private; in raid5_align_endio()
5380 rdev_dec_pending(rdev, conf->mddev); in raid5_align_endio()
5396 static int raid5_read_one_chunk(struct mddev *mddev, struct bio *raid_bio) in raid5_read_one_chunk() argument
5398 struct r5conf *conf = mddev->private; in raid5_read_one_chunk()
5406 if (!in_chunk_boundary(mddev, raid_bio)) { in raid5_read_one_chunk()
5437 rdev_dec_pending(rdev, mddev); in raid5_read_one_chunk()
5441 align_bio = bio_clone_fast(raid_bio, GFP_NOIO, &mddev->io_acct_set); in raid5_read_one_chunk()
5475 if (mddev->gendisk) in raid5_read_one_chunk()
5476 trace_block_bio_remap(align_bio, disk_devt(mddev->gendisk), in raid5_read_one_chunk()
5486 static struct bio *chunk_aligned_read(struct mddev *mddev, struct bio *raid_bio) in chunk_aligned_read() argument
5490 unsigned chunk_sects = mddev->chunk_sectors; in chunk_aligned_read()
5494 struct r5conf *conf = mddev->private; in chunk_aligned_read()
5501 if (!raid5_read_one_chunk(mddev, raid_bio)) in chunk_aligned_read()
5620 struct mddev *mddev = cb->cb.data; in raid5_unplug() local
5621 struct r5conf *conf = mddev->private; in raid5_unplug()
5649 if (mddev->queue) in raid5_unplug()
5650 trace_block_unplug(mddev->queue, cnt, !from_schedule); in raid5_unplug()
5654 static void release_stripe_plug(struct mddev *mddev, in release_stripe_plug() argument
5658 raid5_unplug, mddev, in release_stripe_plug()
5682 static void make_discard_request(struct mddev *mddev, struct bio *bi) in make_discard_request() argument
5684 struct r5conf *conf = mddev->private; in make_discard_request()
5689 if (mddev->reshape_position != MaxSector) in make_discard_request()
5743 md_write_inc(mddev, bi); in make_discard_request()
5747 if (conf->mddev->bitmap) { in make_discard_request()
5751 md_bitmap_startwrite(mddev->bitmap, in make_discard_request()
5763 release_stripe_plug(mddev, sh); in make_discard_request()
5769 static bool raid5_make_request(struct mddev *mddev, struct bio * bi) in raid5_make_request() argument
5771 struct r5conf *conf = mddev->private; in raid5_make_request()
5787 if (md_flush_request(mddev, bi)) in raid5_make_request()
5798 if (!md_write_start(mddev, bi)) in raid5_make_request()
5805 if (rw == READ && mddev->degraded == 0 && in raid5_make_request()
5806 mddev->reshape_position == MaxSector) { in raid5_make_request()
5807 bi = chunk_aligned_read(mddev, bi); in raid5_make_request()
5813 make_discard_request(mddev, bi); in raid5_make_request()
5814 md_write_end(mddev); in raid5_make_request()
5822 md_account_bio(mddev, &bi); in raid5_make_request()
5845 if (mddev->reshape_backwards in raid5_make_request()
5850 if (mddev->reshape_backwards in raid5_make_request()
5883 if (mddev->reshape_backwards in raid5_make_request()
5910 md_wakeup_thread(mddev->thread); in raid5_make_request()
5928 release_stripe_plug(mddev, sh); in raid5_make_request()
5938 md_write_end(mddev); in raid5_make_request()
5943 static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);
5945 static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr, int *skipped) in reshape_request() argument
5956 struct r5conf *conf = mddev->private; in reshape_request()
5973 if (mddev->reshape_backwards && in reshape_request()
5974 conf->reshape_progress < raid5_size(mddev, 0, 0)) { in reshape_request()
5975 sector_nr = raid5_size(mddev, 0, 0) in reshape_request()
5977 } else if (mddev->reshape_backwards && in reshape_request()
5981 } else if (!mddev->reshape_backwards && in reshape_request()
5986 mddev->curr_resync_completed = sector_nr; in reshape_request()
5987 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6013 if (mddev->reshape_backwards) { in reshape_request()
6031 if (mddev->reshape_backwards) { in reshape_request()
6034 BUG_ON((mddev->dev_sectors & in reshape_request()
6069 if ((mddev->reshape_backwards in reshape_request()
6076 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6079 mddev->reshape_position = conf->reshape_progress; in reshape_request()
6080 mddev->curr_resync_completed = sector_nr; in reshape_request()
6081 if (!mddev->reshape_backwards) in reshape_request()
6083 rdev_for_each(rdev, mddev) in reshape_request()
6091 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in reshape_request()
6092 md_wakeup_thread(mddev->thread); in reshape_request()
6093 wait_event(mddev->sb_wait, mddev->sb_flags == 0 || in reshape_request()
6094 test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6095 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) in reshape_request()
6098 conf->reshape_safe = mddev->reshape_position; in reshape_request()
6101 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6122 if (s < raid5_size(mddev, 0, 0)) { in reshape_request()
6137 if (mddev->reshape_backwards) in reshape_request()
6154 if (last_sector >= mddev->dev_sectors) in reshape_request()
6155 last_sector = mddev->dev_sectors - 1; in reshape_request()
6177 if (mddev->curr_resync_completed > mddev->resync_max || in reshape_request()
6178 (sector_nr - mddev->curr_resync_completed) * 2 in reshape_request()
6179 >= mddev->resync_max - mddev->curr_resync_completed) { in reshape_request()
6183 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6186 mddev->reshape_position = conf->reshape_progress; in reshape_request()
6187 mddev->curr_resync_completed = sector_nr; in reshape_request()
6188 if (!mddev->reshape_backwards) in reshape_request()
6190 rdev_for_each(rdev, mddev) in reshape_request()
6197 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in reshape_request()
6198 md_wakeup_thread(mddev->thread); in reshape_request()
6199 wait_event(mddev->sb_wait, in reshape_request()
6200 !test_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags) in reshape_request()
6201 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6202 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) in reshape_request()
6205 conf->reshape_safe = mddev->reshape_position; in reshape_request()
6208 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6214 static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_nr, in raid5_sync_request() argument
6217 struct r5conf *conf = mddev->private; in raid5_sync_request()
6219 sector_t max_sector = mddev->dev_sectors; in raid5_sync_request()
6227 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) { in raid5_sync_request()
6232 if (mddev->curr_resync < max_sector) /* aborted */ in raid5_sync_request()
6233 md_bitmap_end_sync(mddev->bitmap, mddev->curr_resync, in raid5_sync_request()
6237 md_bitmap_close_sync(mddev->bitmap); in raid5_sync_request()
6245 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) in raid5_sync_request()
6246 return reshape_request(mddev, sector_nr, skipped); in raid5_sync_request()
6258 if (mddev->degraded >= conf->max_degraded && in raid5_sync_request()
6259 test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { in raid5_sync_request()
6260 sector_t rv = mddev->dev_sectors - sector_nr; in raid5_sync_request()
6264 if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) && in raid5_sync_request()
6266 !md_bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, 1) && in raid5_sync_request()
6275 md_bitmap_cond_end_sync(mddev->bitmap, sector_nr, false); in raid5_sync_request()
6298 md_bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, still_degraded); in raid5_sync_request()
6427 struct mddev *mddev = conf->mddev; in raid5_do_work() local
6448 wait_event_lock_irq(mddev->sb_wait, in raid5_do_work()
6449 !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags), in raid5_do_work()
6475 struct mddev *mddev = thread->mddev; in raid5d() local
6476 struct r5conf *conf = mddev->private; in raid5d()
6482 md_check_recovery(mddev); in raid5d()
6501 md_bitmap_unplug(mddev->bitmap); in raid5d()
6524 if (mddev->sb_flags & ~(1 << MD_SB_CHANGE_PENDING)) { in raid5d()
6526 md_check_recovery(mddev); in raid5d()
6554 raid5_show_stripe_cache_size(struct mddev *mddev, char *page) in raid5_show_stripe_cache_size() argument
6558 spin_lock(&mddev->lock); in raid5_show_stripe_cache_size()
6559 conf = mddev->private; in raid5_show_stripe_cache_size()
6562 spin_unlock(&mddev->lock); in raid5_show_stripe_cache_size()
6567 raid5_set_cache_size(struct mddev *mddev, int size) in raid5_set_cache_size() argument
6570 struct r5conf *conf = mddev->private; in raid5_set_cache_size()
6582 md_allow_write(mddev); in raid5_set_cache_size()
6598 raid5_store_stripe_cache_size(struct mddev *mddev, const char *page, size_t len) in raid5_store_stripe_cache_size() argument
6608 err = mddev_lock(mddev); in raid5_store_stripe_cache_size()
6611 conf = mddev->private; in raid5_store_stripe_cache_size()
6615 err = raid5_set_cache_size(mddev, new); in raid5_store_stripe_cache_size()
6616 mddev_unlock(mddev); in raid5_store_stripe_cache_size()
6627 raid5_show_rmw_level(struct mddev *mddev, char *page) in raid5_show_rmw_level() argument
6629 struct r5conf *conf = mddev->private; in raid5_show_rmw_level()
6637 raid5_store_rmw_level(struct mddev *mddev, const char *page, size_t len) in raid5_store_rmw_level() argument
6639 struct r5conf *conf = mddev->private; in raid5_store_rmw_level()
6669 raid5_show_stripe_size(struct mddev *mddev, char *page) in raid5_show_stripe_size() argument
6674 spin_lock(&mddev->lock); in raid5_show_stripe_size()
6675 conf = mddev->private; in raid5_show_stripe_size()
6678 spin_unlock(&mddev->lock); in raid5_show_stripe_size()
6684 raid5_store_stripe_size(struct mddev *mddev, const char *page, size_t len) in raid5_store_stripe_size() argument
6706 err = mddev_lock(mddev); in raid5_store_stripe_size()
6710 conf = mddev->private; in raid5_store_stripe_size()
6722 if (mddev->sync_thread || in raid5_store_stripe_size()
6723 test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) || in raid5_store_stripe_size()
6724 mddev->reshape_position != MaxSector || in raid5_store_stripe_size()
6725 mddev->sysfs_active) { in raid5_store_stripe_size()
6730 mddev_suspend(mddev); in raid5_store_stripe_size()
6741 mdname(mddev)); in raid5_store_stripe_size()
6745 mddev_resume(mddev); in raid5_store_stripe_size()
6748 mddev_unlock(mddev); in raid5_store_stripe_size()
6764 raid5_show_preread_threshold(struct mddev *mddev, char *page) in raid5_show_preread_threshold() argument
6768 spin_lock(&mddev->lock); in raid5_show_preread_threshold()
6769 conf = mddev->private; in raid5_show_preread_threshold()
6772 spin_unlock(&mddev->lock); in raid5_show_preread_threshold()
6777 raid5_store_preread_threshold(struct mddev *mddev, const char *page, size_t len) in raid5_store_preread_threshold() argument
6788 err = mddev_lock(mddev); in raid5_store_preread_threshold()
6791 conf = mddev->private; in raid5_store_preread_threshold()
6798 mddev_unlock(mddev); in raid5_store_preread_threshold()
6809 raid5_show_skip_copy(struct mddev *mddev, char *page) in raid5_show_skip_copy() argument
6813 spin_lock(&mddev->lock); in raid5_show_skip_copy()
6814 conf = mddev->private; in raid5_show_skip_copy()
6817 spin_unlock(&mddev->lock); in raid5_show_skip_copy()
6822 raid5_store_skip_copy(struct mddev *mddev, const char *page, size_t len) in raid5_store_skip_copy() argument
6834 err = mddev_lock(mddev); in raid5_store_skip_copy()
6837 conf = mddev->private; in raid5_store_skip_copy()
6841 struct request_queue *q = mddev->queue; in raid5_store_skip_copy()
6843 mddev_suspend(mddev); in raid5_store_skip_copy()
6849 mddev_resume(mddev); in raid5_store_skip_copy()
6851 mddev_unlock(mddev); in raid5_store_skip_copy()
6861 stripe_cache_active_show(struct mddev *mddev, char *page) in stripe_cache_active_show() argument
6863 struct r5conf *conf = mddev->private; in stripe_cache_active_show()
6874 raid5_show_group_thread_cnt(struct mddev *mddev, char *page) in raid5_show_group_thread_cnt() argument
6878 spin_lock(&mddev->lock); in raid5_show_group_thread_cnt()
6879 conf = mddev->private; in raid5_show_group_thread_cnt()
6882 spin_unlock(&mddev->lock); in raid5_show_group_thread_cnt()
6890 raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len) in raid5_store_group_thread_cnt() argument
6906 err = mddev_lock(mddev); in raid5_store_group_thread_cnt()
6909 conf = mddev->private; in raid5_store_group_thread_cnt()
6913 mddev_suspend(mddev); in raid5_store_group_thread_cnt()
6931 mddev_resume(mddev); in raid5_store_group_thread_cnt()
6933 mddev_unlock(mddev); in raid5_store_group_thread_cnt()
7014 raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks) in raid5_size() argument
7016 struct r5conf *conf = mddev->private; in raid5_size()
7019 sectors = mddev->dev_sectors; in raid5_size()
7158 static struct r5conf *setup_conf(struct mddev *mddev) in setup_conf() argument
7170 if (mddev->new_level != 5 in setup_conf()
7171 && mddev->new_level != 4 in setup_conf()
7172 && mddev->new_level != 6) { in setup_conf()
7174 mdname(mddev), mddev->new_level); in setup_conf()
7177 if ((mddev->new_level == 5 in setup_conf()
7178 && !algorithm_valid_raid5(mddev->new_layout)) || in setup_conf()
7179 (mddev->new_level == 6 in setup_conf()
7180 && !algorithm_valid_raid6(mddev->new_layout))) { in setup_conf()
7182 mdname(mddev), mddev->new_layout); in setup_conf()
7185 if (mddev->new_level == 6 && mddev->raid_disks < 4) { in setup_conf()
7187 mdname(mddev), mddev->raid_disks); in setup_conf()
7191 if (!mddev->new_chunk_sectors || in setup_conf()
7192 (mddev->new_chunk_sectors << 9) % PAGE_SIZE || in setup_conf()
7193 !is_power_of_2(mddev->new_chunk_sectors)) { in setup_conf()
7195 mdname(mddev), mddev->new_chunk_sectors << 9); in setup_conf()
7241 rdev_for_each(rdev, mddev) { in setup_conf()
7251 conf->recovery_disabled = mddev->recovery_disabled - 1; in setup_conf()
7253 conf->raid_disks = mddev->raid_disks; in setup_conf()
7254 if (mddev->reshape_position == MaxSector) in setup_conf()
7255 conf->previous_raid_disks = mddev->raid_disks; in setup_conf()
7257 conf->previous_raid_disks = mddev->raid_disks - mddev->delta_disks; in setup_conf()
7275 conf->mddev = mddev; in setup_conf()
7302 conf->level = mddev->new_level; in setup_conf()
7303 conf->chunk_sectors = mddev->new_chunk_sectors; in setup_conf()
7307 pr_debug("raid456: run(%s) called.\n", mdname(mddev)); in setup_conf()
7309 rdev_for_each(rdev, mddev) { in setup_conf()
7329 mdname(mddev), bdevname(rdev->bdev, b), raid_disk); in setup_conf()
7335 conf->level = mddev->new_level; in setup_conf()
7346 conf->algorithm = mddev->new_layout; in setup_conf()
7347 conf->reshape_progress = mddev->reshape_position; in setup_conf()
7349 conf->prev_chunk_sectors = mddev->chunk_sectors; in setup_conf()
7350 conf->prev_algo = mddev->layout; in setup_conf()
7357 if (mddev->reshape_position != MaxSector) { in setup_conf()
7359 ((mddev->chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4, in setup_conf()
7360 ((mddev->new_chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4); in setup_conf()
7364 mdname(mddev), conf->min_nr_stripes); in setup_conf()
7371 mdname(mddev), memory); in setup_conf()
7374 pr_debug("md/raid:%s: allocated %dkB\n", mdname(mddev), memory); in setup_conf()
7387 mdname(mddev)); in setup_conf()
7391 sprintf(pers_name, "raid%d", mddev->new_level); in setup_conf()
7392 conf->thread = md_register_thread(raid5d, mddev, pers_name); in setup_conf()
7395 mdname(mddev)); in setup_conf()
7437 blk_queue_io_opt(conf->mddev->queue, (conf->chunk_sectors << 9) * in raid5_set_io_opt()
7441 static int raid5_run(struct mddev *mddev) in raid5_run() argument
7453 if (mddev_init_writes_pending(mddev) < 0) in raid5_run()
7456 if (mddev->recovery_cp != MaxSector) in raid5_run()
7458 mdname(mddev)); in raid5_run()
7460 rdev_for_each(rdev, mddev) { in raid5_run()
7473 } else if (mddev->reshape_backwards && in raid5_run()
7476 else if (!mddev->reshape_backwards && in raid5_run()
7481 if ((test_bit(MD_HAS_JOURNAL, &mddev->flags) || journal_dev) && in raid5_run()
7482 (mddev->bitmap_info.offset || mddev->bitmap_info.file)) { in raid5_run()
7484 mdname(mddev)); in raid5_run()
7488 if (mddev->reshape_position != MaxSector) { in raid5_run()
7503 int max_degraded = (mddev->level == 6 ? 2 : 1); in raid5_run()
7509 mdname(mddev)); in raid5_run()
7513 if (mddev->new_level != mddev->level) { in raid5_run()
7515 mdname(mddev)); in raid5_run()
7518 old_disks = mddev->raid_disks - mddev->delta_disks; in raid5_run()
7526 here_new = mddev->reshape_position; in raid5_run()
7527 chunk_sectors = max(mddev->chunk_sectors, mddev->new_chunk_sectors); in raid5_run()
7528 new_data_disks = mddev->raid_disks - max_degraded; in raid5_run()
7531 mdname(mddev)); in raid5_run()
7536 here_old = mddev->reshape_position; in raid5_run()
7540 if (mddev->delta_disks == 0) { in raid5_run()
7548 if (abs(min_offset_diff) >= mddev->chunk_sectors && in raid5_run()
7549 abs(min_offset_diff) >= mddev->new_chunk_sectors) in raid5_run()
7551 else if (mddev->ro == 0) { in raid5_run()
7553 mdname(mddev)); in raid5_run()
7556 } else if (mddev->reshape_backwards in raid5_run()
7563 mdname(mddev)); in raid5_run()
7566 pr_debug("md/raid:%s: reshape will continue\n", mdname(mddev)); in raid5_run()
7569 BUG_ON(mddev->level != mddev->new_level); in raid5_run()
7570 BUG_ON(mddev->layout != mddev->new_layout); in raid5_run()
7571 BUG_ON(mddev->chunk_sectors != mddev->new_chunk_sectors); in raid5_run()
7572 BUG_ON(mddev->delta_disks != 0); in raid5_run()
7575 if (test_bit(MD_HAS_JOURNAL, &mddev->flags) && in raid5_run()
7576 test_bit(MD_HAS_PPL, &mddev->flags)) { in raid5_run()
7578 mdname(mddev)); in raid5_run()
7579 clear_bit(MD_HAS_PPL, &mddev->flags); in raid5_run()
7580 clear_bit(MD_HAS_MULTIPLE_PPLS, &mddev->flags); in raid5_run()
7583 if (mddev->private == NULL) in raid5_run()
7584 conf = setup_conf(mddev); in raid5_run()
7586 conf = mddev->private; in raid5_run()
7591 if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) { in raid5_run()
7594 mdname(mddev)); in raid5_run()
7595 mddev->ro = 1; in raid5_run()
7596 set_disk_ro(mddev->gendisk, 1); in raid5_run()
7597 } else if (mddev->recovery_cp == MaxSector) in raid5_run()
7598 set_bit(MD_JOURNAL_CLEAN, &mddev->flags); in raid5_run()
7602 mddev->thread = conf->thread; in raid5_run()
7604 mddev->private = conf; in raid5_run()
7637 if (mddev->major_version == 0 && in raid5_run()
7638 mddev->minor_version > 90) in raid5_run()
7660 mddev->degraded = raid5_calc_degraded(conf); in raid5_run()
7664 mdname(mddev), mddev->degraded, conf->raid_disks); in raid5_run()
7669 mddev->dev_sectors &= ~((sector_t)mddev->chunk_sectors - 1); in raid5_run()
7670 mddev->resync_max_sectors = mddev->dev_sectors; in raid5_run()
7672 if (mddev->degraded > dirty_parity_disks && in raid5_run()
7673 mddev->recovery_cp != MaxSector) { in raid5_run()
7674 if (test_bit(MD_HAS_PPL, &mddev->flags)) in raid5_run()
7676 mdname(mddev)); in raid5_run()
7677 else if (mddev->ok_start_degraded) in raid5_run()
7679 mdname(mddev)); in raid5_run()
7682 mdname(mddev)); in raid5_run()
7688 mdname(mddev), conf->level, in raid5_run()
7689 mddev->raid_disks-mddev->degraded, mddev->raid_disks, in raid5_run()
7690 mddev->new_layout); in raid5_run()
7697 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); in raid5_run()
7698 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); in raid5_run()
7699 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); in raid5_run()
7700 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); in raid5_run()
7701 mddev->sync_thread = md_register_thread(md_do_sync, mddev, in raid5_run()
7703 if (!mddev->sync_thread) in raid5_run()
7708 if (mddev->to_remove == &raid5_attrs_group) in raid5_run()
7709 mddev->to_remove = NULL; in raid5_run()
7710 else if (mddev->kobj.sd && in raid5_run()
7711 sysfs_create_group(&mddev->kobj, &raid5_attrs_group)) in raid5_run()
7713 mdname(mddev)); in raid5_run()
7714 md_set_array_sectors(mddev, raid5_size(mddev, 0, 0)); in raid5_run()
7716 if (mddev->queue) { in raid5_run()
7724 ((mddev->chunk_sectors << 9) / PAGE_SIZE); in raid5_run()
7726 chunk_size = mddev->chunk_sectors << 9; in raid5_run()
7727 blk_queue_io_min(mddev->queue, chunk_size); in raid5_run()
7729 mddev->queue->limits.raid_partial_stripes_expensive = 1; in raid5_run()
7739 mddev->queue->limits.discard_alignment = stripe; in raid5_run()
7740 mddev->queue->limits.discard_granularity = stripe; in raid5_run()
7742 blk_queue_max_write_same_sectors(mddev->queue, 0); in raid5_run()
7743 blk_queue_max_write_zeroes_sectors(mddev->queue, 0); in raid5_run()
7745 rdev_for_each(rdev, mddev) { in raid5_run()
7746 disk_stack_limits(mddev->gendisk, rdev->bdev, in raid5_run()
7748 disk_stack_limits(mddev->gendisk, rdev->bdev, in raid5_run()
7768 mddev->queue->limits.max_discard_sectors >= (stripe >> 9) && in raid5_run()
7769 mddev->queue->limits.discard_granularity >= stripe) in raid5_run()
7771 mddev->queue); in raid5_run()
7774 mddev->queue); in raid5_run()
7776 blk_queue_max_hw_sectors(mddev->queue, UINT_MAX); in raid5_run()
7784 md_unregister_thread(&mddev->thread); in raid5_run()
7787 mddev->private = NULL; in raid5_run()
7788 pr_warn("md/raid:%s: failed to run raid set.\n", mdname(mddev)); in raid5_run()
7792 static void raid5_free(struct mddev *mddev, void *priv) in raid5_free() argument
7797 mddev->to_remove = &raid5_attrs_group; in raid5_free()
7800 static void raid5_status(struct seq_file *seq, struct mddev *mddev) in raid5_status() argument
7802 struct r5conf *conf = mddev->private; in raid5_status()
7805 seq_printf(seq, " level %d, %dk chunk, algorithm %d", mddev->level, in raid5_status()
7806 conf->chunk_sectors / 2, mddev->layout); in raid5_status()
7807 seq_printf (seq, " [%d/%d] [", conf->raid_disks, conf->raid_disks - mddev->degraded); in raid5_status()
7829 conf->raid_disks - conf->mddev->degraded); in print_raid5_conf()
7841 static int raid5_spare_active(struct mddev *mddev) in raid5_spare_active() argument
7844 struct r5conf *conf = mddev->private; in raid5_spare_active()
7878 mddev->degraded = raid5_calc_degraded(conf); in raid5_spare_active()
7884 static int raid5_remove_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_remove_disk() argument
7886 struct r5conf *conf = mddev->private; in raid5_remove_disk()
7928 mddev->recovery_disabled != conf->recovery_disabled && in raid5_remove_disk()
7969 static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_add_disk() argument
7971 struct r5conf *conf = mddev->private; in raid5_add_disk()
7997 if (mddev->recovery_disabled == conf->recovery_disabled) in raid5_add_disk()
8048 static int raid5_resize(struct mddev *mddev, sector_t sectors) in raid5_resize() argument
8058 struct r5conf *conf = mddev->private; in raid5_resize()
8063 newsize = raid5_size(mddev, sectors, mddev->raid_disks); in raid5_resize()
8064 if (mddev->external_size && in raid5_resize()
8065 mddev->array_sectors > newsize) in raid5_resize()
8067 if (mddev->bitmap) { in raid5_resize()
8068 int ret = md_bitmap_resize(mddev->bitmap, sectors, 0, 0); in raid5_resize()
8072 md_set_array_sectors(mddev, newsize); in raid5_resize()
8073 if (sectors > mddev->dev_sectors && in raid5_resize()
8074 mddev->recovery_cp > mddev->dev_sectors) { in raid5_resize()
8075 mddev->recovery_cp = mddev->dev_sectors; in raid5_resize()
8076 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid5_resize()
8078 mddev->dev_sectors = sectors; in raid5_resize()
8079 mddev->resync_max_sectors = sectors; in raid5_resize()
8083 static int check_stripe_cache(struct mddev *mddev) in check_stripe_cache() argument
8093 struct r5conf *conf = mddev->private; in check_stripe_cache()
8094 if (((mddev->chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4 in check_stripe_cache()
8096 ((mddev->new_chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4 in check_stripe_cache()
8099 mdname(mddev), in check_stripe_cache()
8100 ((max(mddev->chunk_sectors, mddev->new_chunk_sectors) << 9) in check_stripe_cache()
8107 static int check_reshape(struct mddev *mddev) in check_reshape() argument
8109 struct r5conf *conf = mddev->private; in check_reshape()
8113 if (mddev->delta_disks == 0 && in check_reshape()
8114 mddev->new_layout == mddev->layout && in check_reshape()
8115 mddev->new_chunk_sectors == mddev->chunk_sectors) in check_reshape()
8119 if (mddev->delta_disks < 0 && mddev->reshape_position == MaxSector) { in check_reshape()
8126 if (mddev->level == 6) in check_reshape()
8128 if (mddev->raid_disks + mddev->delta_disks < min) in check_reshape()
8132 if (!check_stripe_cache(mddev)) in check_reshape()
8135 if (mddev->new_chunk_sectors > mddev->chunk_sectors || in check_reshape()
8136 mddev->delta_disks > 0) in check_reshape()
8139 + max(0, mddev->delta_disks), in check_reshape()
8140 max(mddev->new_chunk_sectors, in check_reshape()
8141 mddev->chunk_sectors) in check_reshape()
8145 if (conf->previous_raid_disks + mddev->delta_disks <= conf->pool_size) in check_reshape()
8148 + mddev->delta_disks)); in check_reshape()
8151 static int raid5_start_reshape(struct mddev *mddev) in raid5_start_reshape() argument
8153 struct r5conf *conf = mddev->private; in raid5_start_reshape()
8158 if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) in raid5_start_reshape()
8161 if (!check_stripe_cache(mddev)) in raid5_start_reshape()
8167 rdev_for_each(rdev, mddev) { in raid5_start_reshape()
8173 if (spares - mddev->degraded < mddev->delta_disks - conf->max_degraded) in raid5_start_reshape()
8183 if (raid5_size(mddev, 0, conf->raid_disks + mddev->delta_disks) in raid5_start_reshape()
8184 < mddev->array_sectors) { in raid5_start_reshape()
8186 mdname(mddev)); in raid5_start_reshape()
8194 conf->raid_disks += mddev->delta_disks; in raid5_start_reshape()
8196 conf->chunk_sectors = mddev->new_chunk_sectors; in raid5_start_reshape()
8198 conf->algorithm = mddev->new_layout; in raid5_start_reshape()
8204 if (mddev->reshape_backwards) in raid5_start_reshape()
8205 conf->reshape_progress = raid5_size(mddev, 0, 0); in raid5_start_reshape()
8216 mddev_suspend(mddev); in raid5_start_reshape()
8217 mddev_resume(mddev); in raid5_start_reshape()
8226 if (mddev->delta_disks >= 0) { in raid5_start_reshape()
8227 rdev_for_each(rdev, mddev) in raid5_start_reshape()
8230 if (raid5_add_disk(mddev, rdev) == 0) { in raid5_start_reshape()
8238 sysfs_link_rdev(mddev, rdev); in raid5_start_reshape()
8251 mddev->degraded = raid5_calc_degraded(conf); in raid5_start_reshape()
8254 mddev->raid_disks = conf->raid_disks; in raid5_start_reshape()
8255 mddev->reshape_position = conf->reshape_progress; in raid5_start_reshape()
8256 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in raid5_start_reshape()
8258 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); in raid5_start_reshape()
8259 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); in raid5_start_reshape()
8260 clear_bit(MD_RECOVERY_DONE, &mddev->recovery); in raid5_start_reshape()
8261 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); in raid5_start_reshape()
8262 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); in raid5_start_reshape()
8263 mddev->sync_thread = md_register_thread(md_do_sync, mddev, in raid5_start_reshape()
8265 if (!mddev->sync_thread) { in raid5_start_reshape()
8266 mddev->recovery = 0; in raid5_start_reshape()
8269 mddev->raid_disks = conf->raid_disks = conf->previous_raid_disks; in raid5_start_reshape()
8270 mddev->new_chunk_sectors = in raid5_start_reshape()
8272 mddev->new_layout = conf->algorithm = conf->prev_algo; in raid5_start_reshape()
8273 rdev_for_each(rdev, mddev) in raid5_start_reshape()
8278 mddev->reshape_position = MaxSector; in raid5_start_reshape()
8284 md_wakeup_thread(mddev->sync_thread); in raid5_start_reshape()
8285 md_new_event(mddev); in raid5_start_reshape()
8295 if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) { in end_reshape()
8300 md_finish_reshape(conf->mddev); in end_reshape()
8303 conf->mddev->reshape_position = MaxSector; in end_reshape()
8304 rdev_for_each(rdev, conf->mddev) in end_reshape()
8312 if (conf->mddev->queue) in end_reshape()
8320 static void raid5_finish_reshape(struct mddev *mddev) in raid5_finish_reshape() argument
8322 struct r5conf *conf = mddev->private; in raid5_finish_reshape()
8324 if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) { in raid5_finish_reshape()
8326 if (mddev->delta_disks <= 0) { in raid5_finish_reshape()
8329 mddev->degraded = raid5_calc_degraded(conf); in raid5_finish_reshape()
8332 d < conf->raid_disks - mddev->delta_disks; in raid5_finish_reshape()
8342 mddev->layout = conf->algorithm; in raid5_finish_reshape()
8343 mddev->chunk_sectors = conf->chunk_sectors; in raid5_finish_reshape()
8344 mddev->reshape_position = MaxSector; in raid5_finish_reshape()
8345 mddev->delta_disks = 0; in raid5_finish_reshape()
8346 mddev->reshape_backwards = 0; in raid5_finish_reshape()
8350 static void raid5_quiesce(struct mddev *mddev, int quiesce) in raid5_quiesce() argument
8352 struct r5conf *conf = mddev->private; in raid5_quiesce()
8385 static void *raid45_takeover_raid0(struct mddev *mddev, int level) in raid45_takeover_raid0() argument
8387 struct r0conf *raid0_conf = mddev->private; in raid45_takeover_raid0()
8393 mdname(mddev)); in raid45_takeover_raid0()
8399 mddev->dev_sectors = sectors; in raid45_takeover_raid0()
8400 mddev->new_level = level; in raid45_takeover_raid0()
8401 mddev->new_layout = ALGORITHM_PARITY_N; in raid45_takeover_raid0()
8402 mddev->new_chunk_sectors = mddev->chunk_sectors; in raid45_takeover_raid0()
8403 mddev->raid_disks += 1; in raid45_takeover_raid0()
8404 mddev->delta_disks = 1; in raid45_takeover_raid0()
8406 mddev->recovery_cp = MaxSector; in raid45_takeover_raid0()
8408 return setup_conf(mddev); in raid45_takeover_raid0()
8411 static void *raid5_takeover_raid1(struct mddev *mddev) in raid5_takeover_raid1() argument
8416 if (mddev->raid_disks != 2 || in raid5_takeover_raid1()
8417 mddev->degraded > 1) in raid5_takeover_raid1()
8425 while (chunksect && (mddev->array_sectors & (chunksect-1))) in raid5_takeover_raid1()
8428 if ((chunksect<<9) < RAID5_STRIPE_SIZE((struct r5conf *)mddev->private)) in raid5_takeover_raid1()
8432 mddev->new_level = 5; in raid5_takeover_raid1()
8433 mddev->new_layout = ALGORITHM_LEFT_SYMMETRIC; in raid5_takeover_raid1()
8434 mddev->new_chunk_sectors = chunksect; in raid5_takeover_raid1()
8436 ret = setup_conf(mddev); in raid5_takeover_raid1()
8438 mddev_clear_unsupported_flags(mddev, in raid5_takeover_raid1()
8443 static void *raid5_takeover_raid6(struct mddev *mddev) in raid5_takeover_raid6() argument
8447 switch (mddev->layout) { in raid5_takeover_raid6()
8469 mddev->new_level = 5; in raid5_takeover_raid6()
8470 mddev->new_layout = new_layout; in raid5_takeover_raid6()
8471 mddev->delta_disks = -1; in raid5_takeover_raid6()
8472 mddev->raid_disks -= 1; in raid5_takeover_raid6()
8473 return setup_conf(mddev); in raid5_takeover_raid6()
8476 static int raid5_check_reshape(struct mddev *mddev) in raid5_check_reshape() argument
8483 struct r5conf *conf = mddev->private; in raid5_check_reshape()
8484 int new_chunk = mddev->new_chunk_sectors; in raid5_check_reshape()
8486 if (mddev->new_layout >= 0 && !algorithm_valid_raid5(mddev->new_layout)) in raid5_check_reshape()
8493 if (mddev->array_sectors & (new_chunk-1)) in raid5_check_reshape()
8500 if (mddev->raid_disks == 2) { in raid5_check_reshape()
8502 if (mddev->new_layout >= 0) { in raid5_check_reshape()
8503 conf->algorithm = mddev->new_layout; in raid5_check_reshape()
8504 mddev->layout = mddev->new_layout; in raid5_check_reshape()
8508 mddev->chunk_sectors = new_chunk; in raid5_check_reshape()
8510 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in raid5_check_reshape()
8511 md_wakeup_thread(mddev->thread); in raid5_check_reshape()
8513 return check_reshape(mddev); in raid5_check_reshape()
8516 static int raid6_check_reshape(struct mddev *mddev) in raid6_check_reshape() argument
8518 int new_chunk = mddev->new_chunk_sectors; in raid6_check_reshape()
8520 if (mddev->new_layout >= 0 && !algorithm_valid_raid6(mddev->new_layout)) in raid6_check_reshape()
8527 if (mddev->array_sectors & (new_chunk-1)) in raid6_check_reshape()
8533 return check_reshape(mddev); in raid6_check_reshape()
8536 static void *raid5_takeover(struct mddev *mddev) in raid5_takeover() argument
8544 if (mddev->level == 0) in raid5_takeover()
8545 return raid45_takeover_raid0(mddev, 5); in raid5_takeover()
8546 if (mddev->level == 1) in raid5_takeover()
8547 return raid5_takeover_raid1(mddev); in raid5_takeover()
8548 if (mddev->level == 4) { in raid5_takeover()
8549 mddev->new_layout = ALGORITHM_PARITY_N; in raid5_takeover()
8550 mddev->new_level = 5; in raid5_takeover()
8551 return setup_conf(mddev); in raid5_takeover()
8553 if (mddev->level == 6) in raid5_takeover()
8554 return raid5_takeover_raid6(mddev); in raid5_takeover()
8559 static void *raid4_takeover(struct mddev *mddev) in raid4_takeover() argument
8565 if (mddev->level == 0) in raid4_takeover()
8566 return raid45_takeover_raid0(mddev, 4); in raid4_takeover()
8567 if (mddev->level == 5 && in raid4_takeover()
8568 mddev->layout == ALGORITHM_PARITY_N) { in raid4_takeover()
8569 mddev->new_layout = 0; in raid4_takeover()
8570 mddev->new_level = 4; in raid4_takeover()
8571 return setup_conf(mddev); in raid4_takeover()
8578 static void *raid6_takeover(struct mddev *mddev) in raid6_takeover() argument
8586 if (mddev->pers != &raid5_personality) in raid6_takeover()
8588 if (mddev->degraded > 1) in raid6_takeover()
8590 if (mddev->raid_disks > 253) in raid6_takeover()
8592 if (mddev->raid_disks < 3) in raid6_takeover()
8595 switch (mddev->layout) { in raid6_takeover()
8617 mddev->new_level = 6; in raid6_takeover()
8618 mddev->new_layout = new_layout; in raid6_takeover()
8619 mddev->delta_disks = 1; in raid6_takeover()
8620 mddev->raid_disks += 1; in raid6_takeover()
8621 return setup_conf(mddev); in raid6_takeover()
8624 static int raid5_change_consistency_policy(struct mddev *mddev, const char *buf) in raid5_change_consistency_policy() argument
8629 err = mddev_lock(mddev); in raid5_change_consistency_policy()
8632 conf = mddev->private; in raid5_change_consistency_policy()
8634 mddev_unlock(mddev); in raid5_change_consistency_policy()
8651 mddev_suspend(mddev); in raid5_change_consistency_policy()
8653 mddev_resume(mddev); in raid5_change_consistency_policy()
8655 } else if (test_bit(MD_HAS_JOURNAL, &conf->mddev->flags) && in raid5_change_consistency_policy()
8660 rdev_for_each(rdev, mddev) in raid5_change_consistency_policy()
8667 mddev_suspend(mddev); in raid5_change_consistency_policy()
8668 clear_bit(MD_HAS_JOURNAL, &mddev->flags); in raid5_change_consistency_policy()
8669 mddev_resume(mddev); in raid5_change_consistency_policy()
8679 md_update_sb(mddev, 1); in raid5_change_consistency_policy()
8681 mddev_unlock(mddev); in raid5_change_consistency_policy()
8686 static int raid5_start(struct mddev *mddev) in raid5_start() argument
8688 struct r5conf *conf = mddev->private; in raid5_start()