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()
1144 if (!conf->mddev->external && in ops_run_io()
1145 conf->mddev->sb_flags) { in ops_run_io()
1150 md_check_recovery(conf->mddev); in ops_run_io()
1158 md_wait_for_blocked_rdev(rdev, conf->mddev); in ops_run_io()
1161 rdev_dec_pending(rdev, conf->mddev); in ops_run_io()
1224 if (conf->mddev->gendisk) in ops_run_io()
1226 bi, disk_devt(conf->mddev->gendisk), in ops_run_io()
1274 if (conf->mddev->gendisk) in ops_run_io()
1276 rbi, disk_devt(conf->mddev->gendisk), in ops_run_io()
2361 if (conf->mddev->gendisk) in grow_stripes()
2363 "raid%d-%s", conf->level, mdname(conf->mddev)); in grow_stripes()
2366 "raid%d-%p", conf->level, conf->mddev); in grow_stripes()
2438 mddev_suspend(conf->mddev); in resize_chunks()
2452 mddev_resume(conf->mddev); in resize_chunks()
2493 md_allow_write(conf->mddev); in resize_stripes()
2706 mdname(conf->mddev), RAID5_STRIPE_SECTORS(conf), in raid5_end_read_request()
2735 mdname(conf->mddev), in raid5_end_read_request()
2738 else if (conf->mddev->degraded >= conf->max_degraded) { in raid5_end_read_request()
2742 mdname(conf->mddev), in raid5_end_read_request()
2750 mdname(conf->mddev), in raid5_end_read_request()
2757 mdname(conf->mddev), in raid5_end_read_request()
2761 mdname(conf->mddev), bdn); in raid5_end_read_request()
2783 md_error(conf->mddev, rdev); in raid5_end_read_request()
2786 rdev_dec_pending(rdev, conf->mddev); in raid5_end_read_request()
2832 md_error(conf->mddev, rdev); in raid5_end_write_request()
2844 &rdev->mddev->recovery); in raid5_end_write_request()
2857 rdev_dec_pending(rdev, conf->mddev); in raid5_end_write_request()
2872 static void raid5_error(struct mddev *mddev, struct md_rdev *rdev) in raid5_error() argument
2875 struct r5conf *conf = mddev->private; in raid5_error()
2882 mddev->degraded == conf->max_degraded) { in raid5_error()
2887 conf->recovery_disabled = mddev->recovery_disabled; in raid5_error()
2894 mddev->degraded = raid5_calc_degraded(conf); in raid5_error()
2896 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in raid5_error()
2899 set_mask_bits(&mddev->sb_flags, 0, in raid5_error()
2903 mdname(mddev), in raid5_error()
2905 mdname(mddev), in raid5_error()
2906 conf->raid_disks - mddev->degraded); in raid5_error()
2907 r5c_update_on_rdev_error(mddev, rdev); in raid5_error()
3230 mdname(conf->mddev)); in raid5_compute_blocknr()
3474 md_write_inc(conf->mddev, bi); in add_stripe_bio()
3495 if (conf->mddev->bitmap && firstwrite) { in add_stripe_bio()
3510 md_bitmap_startwrite(conf->mddev->bitmap, sh->sector, in add_stripe_bio()
3574 md_error(conf->mddev, rdev); in handle_failed_stripe()
3575 rdev_dec_pending(rdev, conf->mddev); in handle_failed_stripe()
3596 md_write_end(conf->mddev); in handle_failed_stripe()
3601 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_failed_stripe()
3617 md_write_end(conf->mddev); in handle_failed_stripe()
3647 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_failed_stripe()
3659 md_wakeup_thread(conf->mddev->thread); in handle_failed_stripe()
3682 if (test_bit(MD_RECOVERY_RECOVER, &conf->mddev->recovery)) { in handle_failed_sync()
3706 conf->mddev->recovery_disabled; in handle_failed_sync()
3708 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), !abort); in handle_failed_sync()
3722 || rdev->mddev->recovery_cp <= sh->sector)) in want_replace()
3815 sh->sector < sh->raid_conf->mddev->recovery_cp) in need_this_block()
3995 md_write_end(conf->mddev); in handle_stripe_clean_event()
3999 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_stripe_clean_event()
4056 md_wakeup_thread(conf->mddev->thread); in handle_stripe_clean_event()
4083 sector_t recovery_cp = conf->mddev->recovery_cp; in handle_stripe_dirtying()
4134 if (conf->mddev->queue) in handle_stripe_dirtying()
4135 blk_add_trace_msg(conf->mddev->queue, in handle_stripe_dirtying()
4214 if (rcw && conf->mddev->queue) in handle_stripe_dirtying()
4215 blk_add_trace_msg(conf->mddev->queue, "raid5 rcw %llu %d %d %d", in handle_stripe_dirtying()
4303 atomic64_add(RAID5_STRIPE_SECTORS(conf), &conf->mddev->resync_mismatches); in handle_parity_checks5()
4304 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) { in handle_parity_checks5()
4308 "%llu-%llu\n", mdname(conf->mddev), in handle_parity_checks5()
4430 mdname(conf->mddev), in handle_parity_checks6()
4468 atomic64_add(RAID5_STRIPE_SECTORS(conf), &conf->mddev->resync_mismatches); in handle_parity_checks6()
4469 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) { in handle_parity_checks6()
4473 "%llu-%llu\n", mdname(conf->mddev), in handle_parity_checks6()
4769 sh->sector >= conf->mddev->recovery_cp || in analyse_stripe()
4770 test_bit(MD_RECOVERY_REQUESTED, &(conf->mddev->recovery))) in analyse_stripe()
4937 test_bit(MD_SB_CHANGE_PENDING, &conf->mddev->sb_flags)) { in handle_stripe()
4949 rdev_dec_pending(s.blocked_rdev, conf->mddev); in handle_stripe()
5137 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), 1); in handle_stripe()
5146 if (s.failed <= conf->max_degraded && !conf->mddev->ro) in handle_stripe()
5202 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), 1); in handle_stripe()
5212 if (conf->mddev->external) in handle_stripe()
5214 conf->mddev); in handle_stripe()
5221 conf->mddev); in handle_stripe()
5233 md_error(conf->mddev, rdev); in handle_stripe()
5234 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5240 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5249 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5266 md_wakeup_thread(conf->mddev->thread); in handle_stripe()
5306 static int in_chunk_boundary(struct mddev *mddev, struct bio *bio) in in_chunk_boundary() argument
5308 struct r5conf *conf = mddev->private; in in_chunk_boundary()
5334 md_wakeup_thread(conf->mddev->thread); in add_bio_to_retry()
5367 struct mddev *mddev; in raid5_align_endio() local
5376 mddev = rdev->mddev; in raid5_align_endio()
5377 conf = mddev->private; in raid5_align_endio()
5379 rdev_dec_pending(rdev, conf->mddev); in raid5_align_endio()
5393 static int raid5_read_one_chunk(struct mddev *mddev, struct bio *raid_bio) in raid5_read_one_chunk() argument
5395 struct r5conf *conf = mddev->private; in raid5_read_one_chunk()
5401 if (!in_chunk_boundary(mddev, raid_bio)) { in raid5_read_one_chunk()
5408 align_bi = bio_clone_fast(raid_bio, GFP_NOIO, &mddev->bio_set); in raid5_read_one_chunk()
5456 rdev_dec_pending(rdev, mddev); in raid5_read_one_chunk()
5470 if (mddev->gendisk) in raid5_read_one_chunk()
5472 align_bi, disk_devt(mddev->gendisk), in raid5_read_one_chunk()
5483 static struct bio *chunk_aligned_read(struct mddev *mddev, struct bio *raid_bio) in chunk_aligned_read() argument
5487 unsigned chunk_sects = mddev->chunk_sectors; in chunk_aligned_read()
5491 struct r5conf *conf = mddev->private; in chunk_aligned_read()
5498 if (!raid5_read_one_chunk(mddev, raid_bio)) in chunk_aligned_read()
5617 struct mddev *mddev = cb->cb.data; in raid5_unplug() local
5618 struct r5conf *conf = mddev->private; in raid5_unplug()
5646 if (mddev->queue) in raid5_unplug()
5647 trace_block_unplug(mddev->queue, cnt, !from_schedule); in raid5_unplug()
5651 static void release_stripe_plug(struct mddev *mddev, in release_stripe_plug() argument
5655 raid5_unplug, mddev, in release_stripe_plug()
5679 static void make_discard_request(struct mddev *mddev, struct bio *bi) in make_discard_request() argument
5681 struct r5conf *conf = mddev->private; in make_discard_request()
5686 if (mddev->reshape_position != MaxSector) in make_discard_request()
5740 md_write_inc(mddev, bi); in make_discard_request()
5744 if (conf->mddev->bitmap) { in make_discard_request()
5748 md_bitmap_startwrite(mddev->bitmap, in make_discard_request()
5760 release_stripe_plug(mddev, sh); in make_discard_request()
5766 static bool raid5_make_request(struct mddev *mddev, struct bio * bi) in raid5_make_request() argument
5768 struct r5conf *conf = mddev->private; in raid5_make_request()
5784 if (md_flush_request(mddev, bi)) in raid5_make_request()
5795 if (!md_write_start(mddev, bi)) in raid5_make_request()
5802 if (rw == READ && mddev->degraded == 0 && in raid5_make_request()
5803 mddev->reshape_position == MaxSector) { in raid5_make_request()
5804 bi = chunk_aligned_read(mddev, bi); in raid5_make_request()
5810 make_discard_request(mddev, bi); in raid5_make_request()
5811 md_write_end(mddev); in raid5_make_request()
5841 if (mddev->reshape_backwards in raid5_make_request()
5846 if (mddev->reshape_backwards in raid5_make_request()
5879 if (mddev->reshape_backwards in raid5_make_request()
5906 md_wakeup_thread(mddev->thread); in raid5_make_request()
5924 release_stripe_plug(mddev, sh); in raid5_make_request()
5934 md_write_end(mddev); in raid5_make_request()
5939 static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);
5941 static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr, int *skipped) in reshape_request() argument
5952 struct r5conf *conf = mddev->private; in reshape_request()
5969 if (mddev->reshape_backwards && in reshape_request()
5970 conf->reshape_progress < raid5_size(mddev, 0, 0)) { in reshape_request()
5971 sector_nr = raid5_size(mddev, 0, 0) in reshape_request()
5973 } else if (mddev->reshape_backwards && in reshape_request()
5977 } else if (!mddev->reshape_backwards && in reshape_request()
5982 mddev->curr_resync_completed = sector_nr; in reshape_request()
5983 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6009 if (mddev->reshape_backwards) { in reshape_request()
6027 if (mddev->reshape_backwards) { in reshape_request()
6030 BUG_ON((mddev->dev_sectors & in reshape_request()
6065 if ((mddev->reshape_backwards in reshape_request()
6072 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6075 mddev->reshape_position = conf->reshape_progress; in reshape_request()
6076 mddev->curr_resync_completed = sector_nr; in reshape_request()
6077 if (!mddev->reshape_backwards) in reshape_request()
6079 rdev_for_each(rdev, mddev) in reshape_request()
6087 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in reshape_request()
6088 md_wakeup_thread(mddev->thread); in reshape_request()
6089 wait_event(mddev->sb_wait, mddev->sb_flags == 0 || in reshape_request()
6090 test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6091 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) in reshape_request()
6094 conf->reshape_safe = mddev->reshape_position; in reshape_request()
6097 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6118 if (s < raid5_size(mddev, 0, 0)) { in reshape_request()
6133 if (mddev->reshape_backwards) in reshape_request()
6150 if (last_sector >= mddev->dev_sectors) in reshape_request()
6151 last_sector = mddev->dev_sectors - 1; in reshape_request()
6173 if (mddev->curr_resync_completed > mddev->resync_max || in reshape_request()
6174 (sector_nr - mddev->curr_resync_completed) * 2 in reshape_request()
6175 >= mddev->resync_max - mddev->curr_resync_completed) { in reshape_request()
6179 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6182 mddev->reshape_position = conf->reshape_progress; in reshape_request()
6183 mddev->curr_resync_completed = sector_nr; in reshape_request()
6184 if (!mddev->reshape_backwards) in reshape_request()
6186 rdev_for_each(rdev, mddev) in reshape_request()
6193 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in reshape_request()
6194 md_wakeup_thread(mddev->thread); in reshape_request()
6195 wait_event(mddev->sb_wait, in reshape_request()
6196 !test_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags) in reshape_request()
6197 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6198 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) in reshape_request()
6201 conf->reshape_safe = mddev->reshape_position; in reshape_request()
6204 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6210 static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_nr, in raid5_sync_request() argument
6213 struct r5conf *conf = mddev->private; in raid5_sync_request()
6215 sector_t max_sector = mddev->dev_sectors; in raid5_sync_request()
6223 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) { in raid5_sync_request()
6228 if (mddev->curr_resync < max_sector) /* aborted */ in raid5_sync_request()
6229 md_bitmap_end_sync(mddev->bitmap, mddev->curr_resync, in raid5_sync_request()
6233 md_bitmap_close_sync(mddev->bitmap); in raid5_sync_request()
6241 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) in raid5_sync_request()
6242 return reshape_request(mddev, sector_nr, skipped); in raid5_sync_request()
6254 if (mddev->degraded >= conf->max_degraded && in raid5_sync_request()
6255 test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { in raid5_sync_request()
6256 sector_t rv = mddev->dev_sectors - sector_nr; in raid5_sync_request()
6260 if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) && in raid5_sync_request()
6262 !md_bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, 1) && in raid5_sync_request()
6271 md_bitmap_cond_end_sync(mddev->bitmap, sector_nr, false); in raid5_sync_request()
6294 md_bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, still_degraded); in raid5_sync_request()
6423 struct mddev *mddev = conf->mddev; in raid5_do_work() local
6444 wait_event_lock_irq(mddev->sb_wait, in raid5_do_work()
6445 !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags), in raid5_do_work()
6471 struct mddev *mddev = thread->mddev; in raid5d() local
6472 struct r5conf *conf = mddev->private; in raid5d()
6478 md_check_recovery(mddev); in raid5d()
6497 md_bitmap_unplug(mddev->bitmap); in raid5d()
6520 if (mddev->sb_flags & ~(1 << MD_SB_CHANGE_PENDING)) { in raid5d()
6522 md_check_recovery(mddev); in raid5d()
6550 raid5_show_stripe_cache_size(struct mddev *mddev, char *page) in raid5_show_stripe_cache_size() argument
6554 spin_lock(&mddev->lock); in raid5_show_stripe_cache_size()
6555 conf = mddev->private; in raid5_show_stripe_cache_size()
6558 spin_unlock(&mddev->lock); in raid5_show_stripe_cache_size()
6563 raid5_set_cache_size(struct mddev *mddev, int size) in raid5_set_cache_size() argument
6566 struct r5conf *conf = mddev->private; in raid5_set_cache_size()
6578 md_allow_write(mddev); in raid5_set_cache_size()
6594 raid5_store_stripe_cache_size(struct mddev *mddev, const char *page, size_t len) in raid5_store_stripe_cache_size() argument
6604 err = mddev_lock(mddev); in raid5_store_stripe_cache_size()
6607 conf = mddev->private; in raid5_store_stripe_cache_size()
6611 err = raid5_set_cache_size(mddev, new); in raid5_store_stripe_cache_size()
6612 mddev_unlock(mddev); in raid5_store_stripe_cache_size()
6623 raid5_show_rmw_level(struct mddev *mddev, char *page) in raid5_show_rmw_level() argument
6625 struct r5conf *conf = mddev->private; in raid5_show_rmw_level()
6633 raid5_store_rmw_level(struct mddev *mddev, const char *page, size_t len) in raid5_store_rmw_level() argument
6635 struct r5conf *conf = mddev->private; in raid5_store_rmw_level()
6665 raid5_show_stripe_size(struct mddev *mddev, char *page) in raid5_show_stripe_size() argument
6670 spin_lock(&mddev->lock); in raid5_show_stripe_size()
6671 conf = mddev->private; in raid5_show_stripe_size()
6674 spin_unlock(&mddev->lock); in raid5_show_stripe_size()
6680 raid5_store_stripe_size(struct mddev *mddev, const char *page, size_t len) in raid5_store_stripe_size() argument
6702 err = mddev_lock(mddev); in raid5_store_stripe_size()
6706 conf = mddev->private; in raid5_store_stripe_size()
6718 if (mddev->sync_thread || in raid5_store_stripe_size()
6719 test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) || in raid5_store_stripe_size()
6720 mddev->reshape_position != MaxSector || in raid5_store_stripe_size()
6721 mddev->sysfs_active) { in raid5_store_stripe_size()
6726 mddev_suspend(mddev); in raid5_store_stripe_size()
6737 mdname(mddev)); in raid5_store_stripe_size()
6741 mddev_resume(mddev); in raid5_store_stripe_size()
6744 mddev_unlock(mddev); in raid5_store_stripe_size()
6760 raid5_show_preread_threshold(struct mddev *mddev, char *page) in raid5_show_preread_threshold() argument
6764 spin_lock(&mddev->lock); in raid5_show_preread_threshold()
6765 conf = mddev->private; in raid5_show_preread_threshold()
6768 spin_unlock(&mddev->lock); in raid5_show_preread_threshold()
6773 raid5_store_preread_threshold(struct mddev *mddev, const char *page, size_t len) in raid5_store_preread_threshold() argument
6784 err = mddev_lock(mddev); in raid5_store_preread_threshold()
6787 conf = mddev->private; in raid5_store_preread_threshold()
6794 mddev_unlock(mddev); in raid5_store_preread_threshold()
6805 raid5_show_skip_copy(struct mddev *mddev, char *page) in raid5_show_skip_copy() argument
6809 spin_lock(&mddev->lock); in raid5_show_skip_copy()
6810 conf = mddev->private; in raid5_show_skip_copy()
6813 spin_unlock(&mddev->lock); in raid5_show_skip_copy()
6818 raid5_store_skip_copy(struct mddev *mddev, const char *page, size_t len) in raid5_store_skip_copy() argument
6830 err = mddev_lock(mddev); in raid5_store_skip_copy()
6833 conf = mddev->private; in raid5_store_skip_copy()
6837 struct request_queue *q = mddev->queue; in raid5_store_skip_copy()
6839 mddev_suspend(mddev); in raid5_store_skip_copy()
6845 mddev_resume(mddev); in raid5_store_skip_copy()
6847 mddev_unlock(mddev); in raid5_store_skip_copy()
6857 stripe_cache_active_show(struct mddev *mddev, char *page) in stripe_cache_active_show() argument
6859 struct r5conf *conf = mddev->private; in stripe_cache_active_show()
6870 raid5_show_group_thread_cnt(struct mddev *mddev, char *page) in raid5_show_group_thread_cnt() argument
6874 spin_lock(&mddev->lock); in raid5_show_group_thread_cnt()
6875 conf = mddev->private; in raid5_show_group_thread_cnt()
6878 spin_unlock(&mddev->lock); in raid5_show_group_thread_cnt()
6886 raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len) in raid5_store_group_thread_cnt() argument
6902 err = mddev_lock(mddev); in raid5_store_group_thread_cnt()
6905 conf = mddev->private; in raid5_store_group_thread_cnt()
6909 mddev_suspend(mddev); in raid5_store_group_thread_cnt()
6927 mddev_resume(mddev); in raid5_store_group_thread_cnt()
6929 mddev_unlock(mddev); in raid5_store_group_thread_cnt()
7010 raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks) in raid5_size() argument
7012 struct r5conf *conf = mddev->private; in raid5_size()
7015 sectors = mddev->dev_sectors; in raid5_size()
7154 static struct r5conf *setup_conf(struct mddev *mddev) in setup_conf() argument
7166 if (mddev->new_level != 5 in setup_conf()
7167 && mddev->new_level != 4 in setup_conf()
7168 && mddev->new_level != 6) { in setup_conf()
7170 mdname(mddev), mddev->new_level); in setup_conf()
7173 if ((mddev->new_level == 5 in setup_conf()
7174 && !algorithm_valid_raid5(mddev->new_layout)) || in setup_conf()
7175 (mddev->new_level == 6 in setup_conf()
7176 && !algorithm_valid_raid6(mddev->new_layout))) { in setup_conf()
7178 mdname(mddev), mddev->new_layout); in setup_conf()
7181 if (mddev->new_level == 6 && mddev->raid_disks < 4) { in setup_conf()
7183 mdname(mddev), mddev->raid_disks); in setup_conf()
7187 if (!mddev->new_chunk_sectors || in setup_conf()
7188 (mddev->new_chunk_sectors << 9) % PAGE_SIZE || in setup_conf()
7189 !is_power_of_2(mddev->new_chunk_sectors)) { in setup_conf()
7191 mdname(mddev), mddev->new_chunk_sectors << 9); in setup_conf()
7237 rdev_for_each(rdev, mddev) { in setup_conf()
7247 conf->recovery_disabled = mddev->recovery_disabled - 1; in setup_conf()
7249 conf->raid_disks = mddev->raid_disks; in setup_conf()
7250 if (mddev->reshape_position == MaxSector) in setup_conf()
7251 conf->previous_raid_disks = mddev->raid_disks; in setup_conf()
7253 conf->previous_raid_disks = mddev->raid_disks - mddev->delta_disks; in setup_conf()
7271 conf->mddev = mddev; in setup_conf()
7298 conf->level = mddev->new_level; in setup_conf()
7299 conf->chunk_sectors = mddev->new_chunk_sectors; in setup_conf()
7303 pr_debug("raid456: run(%s) called.\n", mdname(mddev)); in setup_conf()
7305 rdev_for_each(rdev, mddev) { in setup_conf()
7325 mdname(mddev), bdevname(rdev->bdev, b), raid_disk); in setup_conf()
7331 conf->level = mddev->new_level; in setup_conf()
7342 conf->algorithm = mddev->new_layout; in setup_conf()
7343 conf->reshape_progress = mddev->reshape_position; in setup_conf()
7345 conf->prev_chunk_sectors = mddev->chunk_sectors; in setup_conf()
7346 conf->prev_algo = mddev->layout; in setup_conf()
7353 if (mddev->reshape_position != MaxSector) { in setup_conf()
7355 ((mddev->chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4, in setup_conf()
7356 ((mddev->new_chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4); in setup_conf()
7360 mdname(mddev), conf->min_nr_stripes); in setup_conf()
7367 mdname(mddev), memory); in setup_conf()
7370 pr_debug("md/raid:%s: allocated %dkB\n", mdname(mddev), memory); in setup_conf()
7383 mdname(mddev)); in setup_conf()
7387 sprintf(pers_name, "raid%d", mddev->new_level); in setup_conf()
7388 conf->thread = md_register_thread(raid5d, mddev, pers_name); in setup_conf()
7391 mdname(mddev)); in setup_conf()
7433 blk_queue_io_opt(conf->mddev->queue, (conf->chunk_sectors << 9) * in raid5_set_io_opt()
7437 static int raid5_run(struct mddev *mddev) in raid5_run() argument
7449 if (mddev_init_writes_pending(mddev) < 0) in raid5_run()
7452 if (mddev->recovery_cp != MaxSector) in raid5_run()
7454 mdname(mddev)); in raid5_run()
7456 rdev_for_each(rdev, mddev) { in raid5_run()
7469 } else if (mddev->reshape_backwards && in raid5_run()
7472 else if (!mddev->reshape_backwards && in raid5_run()
7477 if ((test_bit(MD_HAS_JOURNAL, &mddev->flags) || journal_dev) && in raid5_run()
7478 (mddev->bitmap_info.offset || mddev->bitmap_info.file)) { in raid5_run()
7480 mdname(mddev)); in raid5_run()
7484 if (mddev->reshape_position != MaxSector) { in raid5_run()
7499 int max_degraded = (mddev->level == 6 ? 2 : 1); in raid5_run()
7505 mdname(mddev)); in raid5_run()
7509 if (mddev->new_level != mddev->level) { in raid5_run()
7511 mdname(mddev)); in raid5_run()
7514 old_disks = mddev->raid_disks - mddev->delta_disks; in raid5_run()
7522 here_new = mddev->reshape_position; in raid5_run()
7523 chunk_sectors = max(mddev->chunk_sectors, mddev->new_chunk_sectors); in raid5_run()
7524 new_data_disks = mddev->raid_disks - max_degraded; in raid5_run()
7527 mdname(mddev)); in raid5_run()
7532 here_old = mddev->reshape_position; in raid5_run()
7536 if (mddev->delta_disks == 0) { in raid5_run()
7544 if (abs(min_offset_diff) >= mddev->chunk_sectors && in raid5_run()
7545 abs(min_offset_diff) >= mddev->new_chunk_sectors) in raid5_run()
7547 else if (mddev->ro == 0) { in raid5_run()
7549 mdname(mddev)); in raid5_run()
7552 } else if (mddev->reshape_backwards in raid5_run()
7559 mdname(mddev)); in raid5_run()
7562 pr_debug("md/raid:%s: reshape will continue\n", mdname(mddev)); in raid5_run()
7565 BUG_ON(mddev->level != mddev->new_level); in raid5_run()
7566 BUG_ON(mddev->layout != mddev->new_layout); in raid5_run()
7567 BUG_ON(mddev->chunk_sectors != mddev->new_chunk_sectors); in raid5_run()
7568 BUG_ON(mddev->delta_disks != 0); in raid5_run()
7571 if (test_bit(MD_HAS_JOURNAL, &mddev->flags) && in raid5_run()
7572 test_bit(MD_HAS_PPL, &mddev->flags)) { in raid5_run()
7574 mdname(mddev)); in raid5_run()
7575 clear_bit(MD_HAS_PPL, &mddev->flags); in raid5_run()
7576 clear_bit(MD_HAS_MULTIPLE_PPLS, &mddev->flags); in raid5_run()
7579 if (mddev->private == NULL) in raid5_run()
7580 conf = setup_conf(mddev); in raid5_run()
7582 conf = mddev->private; in raid5_run()
7587 if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) { in raid5_run()
7590 mdname(mddev)); in raid5_run()
7591 mddev->ro = 1; in raid5_run()
7592 set_disk_ro(mddev->gendisk, 1); in raid5_run()
7593 } else if (mddev->recovery_cp == MaxSector) in raid5_run()
7594 set_bit(MD_JOURNAL_CLEAN, &mddev->flags); in raid5_run()
7598 mddev->thread = conf->thread; in raid5_run()
7600 mddev->private = conf; in raid5_run()
7633 if (mddev->major_version == 0 && in raid5_run()
7634 mddev->minor_version > 90) in raid5_run()
7656 mddev->degraded = raid5_calc_degraded(conf); in raid5_run()
7660 mdname(mddev), mddev->degraded, conf->raid_disks); in raid5_run()
7665 mddev->dev_sectors &= ~(mddev->chunk_sectors - 1); in raid5_run()
7666 mddev->resync_max_sectors = mddev->dev_sectors; in raid5_run()
7668 if (mddev->degraded > dirty_parity_disks && in raid5_run()
7669 mddev->recovery_cp != MaxSector) { in raid5_run()
7670 if (test_bit(MD_HAS_PPL, &mddev->flags)) in raid5_run()
7672 mdname(mddev)); in raid5_run()
7673 else if (mddev->ok_start_degraded) in raid5_run()
7675 mdname(mddev)); in raid5_run()
7678 mdname(mddev)); in raid5_run()
7684 mdname(mddev), conf->level, in raid5_run()
7685 mddev->raid_disks-mddev->degraded, mddev->raid_disks, in raid5_run()
7686 mddev->new_layout); in raid5_run()
7693 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); in raid5_run()
7694 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); in raid5_run()
7695 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); in raid5_run()
7696 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); in raid5_run()
7697 mddev->sync_thread = md_register_thread(md_do_sync, mddev, in raid5_run()
7699 if (!mddev->sync_thread) in raid5_run()
7704 if (mddev->to_remove == &raid5_attrs_group) in raid5_run()
7705 mddev->to_remove = NULL; in raid5_run()
7706 else if (mddev->kobj.sd && in raid5_run()
7707 sysfs_create_group(&mddev->kobj, &raid5_attrs_group)) in raid5_run()
7709 mdname(mddev)); in raid5_run()
7710 md_set_array_sectors(mddev, raid5_size(mddev, 0, 0)); in raid5_run()
7712 if (mddev->queue) { in raid5_run()
7720 ((mddev->chunk_sectors << 9) / PAGE_SIZE); in raid5_run()
7722 chunk_size = mddev->chunk_sectors << 9; in raid5_run()
7723 blk_queue_io_min(mddev->queue, chunk_size); in raid5_run()
7725 mddev->queue->limits.raid_partial_stripes_expensive = 1; in raid5_run()
7735 mddev->queue->limits.discard_alignment = stripe; in raid5_run()
7736 mddev->queue->limits.discard_granularity = stripe; in raid5_run()
7738 blk_queue_max_write_same_sectors(mddev->queue, 0); in raid5_run()
7739 blk_queue_max_write_zeroes_sectors(mddev->queue, 0); in raid5_run()
7741 rdev_for_each(rdev, mddev) { in raid5_run()
7742 disk_stack_limits(mddev->gendisk, rdev->bdev, in raid5_run()
7744 disk_stack_limits(mddev->gendisk, rdev->bdev, in raid5_run()
7764 mddev->queue->limits.max_discard_sectors >= (stripe >> 9) && in raid5_run()
7765 mddev->queue->limits.discard_granularity >= stripe) in raid5_run()
7767 mddev->queue); in raid5_run()
7770 mddev->queue); in raid5_run()
7772 blk_queue_max_hw_sectors(mddev->queue, UINT_MAX); in raid5_run()
7780 md_unregister_thread(&mddev->thread); in raid5_run()
7783 mddev->private = NULL; in raid5_run()
7784 pr_warn("md/raid:%s: failed to run raid set.\n", mdname(mddev)); in raid5_run()
7788 static void raid5_free(struct mddev *mddev, void *priv) in raid5_free() argument
7793 mddev->to_remove = &raid5_attrs_group; in raid5_free()
7796 static void raid5_status(struct seq_file *seq, struct mddev *mddev) in raid5_status() argument
7798 struct r5conf *conf = mddev->private; in raid5_status()
7801 seq_printf(seq, " level %d, %dk chunk, algorithm %d", mddev->level, in raid5_status()
7802 conf->chunk_sectors / 2, mddev->layout); in raid5_status()
7803 seq_printf (seq, " [%d/%d] [", conf->raid_disks, conf->raid_disks - mddev->degraded); in raid5_status()
7825 conf->raid_disks - conf->mddev->degraded); in print_raid5_conf()
7837 static int raid5_spare_active(struct mddev *mddev) in raid5_spare_active() argument
7840 struct r5conf *conf = mddev->private; in raid5_spare_active()
7874 mddev->degraded = raid5_calc_degraded(conf); in raid5_spare_active()
7880 static int raid5_remove_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_remove_disk() argument
7882 struct r5conf *conf = mddev->private; in raid5_remove_disk()
7924 mddev->recovery_disabled != conf->recovery_disabled && in raid5_remove_disk()
7965 static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_add_disk() argument
7967 struct r5conf *conf = mddev->private; in raid5_add_disk()
7993 if (mddev->recovery_disabled == conf->recovery_disabled) in raid5_add_disk()
8044 static int raid5_resize(struct mddev *mddev, sector_t sectors) in raid5_resize() argument
8054 struct r5conf *conf = mddev->private; in raid5_resize()
8059 newsize = raid5_size(mddev, sectors, mddev->raid_disks); in raid5_resize()
8060 if (mddev->external_size && in raid5_resize()
8061 mddev->array_sectors > newsize) in raid5_resize()
8063 if (mddev->bitmap) { in raid5_resize()
8064 int ret = md_bitmap_resize(mddev->bitmap, sectors, 0, 0); in raid5_resize()
8068 md_set_array_sectors(mddev, newsize); in raid5_resize()
8069 if (sectors > mddev->dev_sectors && in raid5_resize()
8070 mddev->recovery_cp > mddev->dev_sectors) { in raid5_resize()
8071 mddev->recovery_cp = mddev->dev_sectors; in raid5_resize()
8072 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid5_resize()
8074 mddev->dev_sectors = sectors; in raid5_resize()
8075 mddev->resync_max_sectors = sectors; in raid5_resize()
8079 static int check_stripe_cache(struct mddev *mddev) in check_stripe_cache() argument
8089 struct r5conf *conf = mddev->private; in check_stripe_cache()
8090 if (((mddev->chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4 in check_stripe_cache()
8092 ((mddev->new_chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4 in check_stripe_cache()
8095 mdname(mddev), in check_stripe_cache()
8096 ((max(mddev->chunk_sectors, mddev->new_chunk_sectors) << 9) in check_stripe_cache()
8103 static int check_reshape(struct mddev *mddev) in check_reshape() argument
8105 struct r5conf *conf = mddev->private; in check_reshape()
8109 if (mddev->delta_disks == 0 && in check_reshape()
8110 mddev->new_layout == mddev->layout && in check_reshape()
8111 mddev->new_chunk_sectors == mddev->chunk_sectors) in check_reshape()
8115 if (mddev->delta_disks < 0 && mddev->reshape_position == MaxSector) { in check_reshape()
8122 if (mddev->level == 6) in check_reshape()
8124 if (mddev->raid_disks + mddev->delta_disks < min) in check_reshape()
8128 if (!check_stripe_cache(mddev)) in check_reshape()
8131 if (mddev->new_chunk_sectors > mddev->chunk_sectors || in check_reshape()
8132 mddev->delta_disks > 0) in check_reshape()
8135 + max(0, mddev->delta_disks), in check_reshape()
8136 max(mddev->new_chunk_sectors, in check_reshape()
8137 mddev->chunk_sectors) in check_reshape()
8141 if (conf->previous_raid_disks + mddev->delta_disks <= conf->pool_size) in check_reshape()
8144 + mddev->delta_disks)); in check_reshape()
8147 static int raid5_start_reshape(struct mddev *mddev) in raid5_start_reshape() argument
8149 struct r5conf *conf = mddev->private; in raid5_start_reshape()
8154 if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) in raid5_start_reshape()
8157 if (!check_stripe_cache(mddev)) in raid5_start_reshape()
8163 rdev_for_each(rdev, mddev) { in raid5_start_reshape()
8169 if (spares - mddev->degraded < mddev->delta_disks - conf->max_degraded) in raid5_start_reshape()
8179 if (raid5_size(mddev, 0, conf->raid_disks + mddev->delta_disks) in raid5_start_reshape()
8180 < mddev->array_sectors) { in raid5_start_reshape()
8182 mdname(mddev)); in raid5_start_reshape()
8190 conf->raid_disks += mddev->delta_disks; in raid5_start_reshape()
8192 conf->chunk_sectors = mddev->new_chunk_sectors; in raid5_start_reshape()
8194 conf->algorithm = mddev->new_layout; in raid5_start_reshape()
8200 if (mddev->reshape_backwards) in raid5_start_reshape()
8201 conf->reshape_progress = raid5_size(mddev, 0, 0); in raid5_start_reshape()
8212 mddev_suspend(mddev); in raid5_start_reshape()
8213 mddev_resume(mddev); in raid5_start_reshape()
8222 if (mddev->delta_disks >= 0) { in raid5_start_reshape()
8223 rdev_for_each(rdev, mddev) in raid5_start_reshape()
8226 if (raid5_add_disk(mddev, rdev) == 0) { in raid5_start_reshape()
8234 sysfs_link_rdev(mddev, rdev); in raid5_start_reshape()
8247 mddev->degraded = raid5_calc_degraded(conf); in raid5_start_reshape()
8250 mddev->raid_disks = conf->raid_disks; in raid5_start_reshape()
8251 mddev->reshape_position = conf->reshape_progress; in raid5_start_reshape()
8252 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in raid5_start_reshape()
8254 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); in raid5_start_reshape()
8255 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); in raid5_start_reshape()
8256 clear_bit(MD_RECOVERY_DONE, &mddev->recovery); in raid5_start_reshape()
8257 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); in raid5_start_reshape()
8258 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); in raid5_start_reshape()
8259 mddev->sync_thread = md_register_thread(md_do_sync, mddev, in raid5_start_reshape()
8261 if (!mddev->sync_thread) { in raid5_start_reshape()
8262 mddev->recovery = 0; in raid5_start_reshape()
8265 mddev->raid_disks = conf->raid_disks = conf->previous_raid_disks; in raid5_start_reshape()
8266 mddev->new_chunk_sectors = in raid5_start_reshape()
8268 mddev->new_layout = conf->algorithm = conf->prev_algo; in raid5_start_reshape()
8269 rdev_for_each(rdev, mddev) in raid5_start_reshape()
8274 mddev->reshape_position = MaxSector; in raid5_start_reshape()
8280 md_wakeup_thread(mddev->sync_thread); in raid5_start_reshape()
8281 md_new_event(mddev); in raid5_start_reshape()
8291 if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) { in end_reshape()
8296 md_finish_reshape(conf->mddev); in end_reshape()
8299 conf->mddev->reshape_position = MaxSector; in end_reshape()
8300 rdev_for_each(rdev, conf->mddev) in end_reshape()
8308 if (conf->mddev->queue) in end_reshape()
8316 static void raid5_finish_reshape(struct mddev *mddev) in raid5_finish_reshape() argument
8318 struct r5conf *conf = mddev->private; in raid5_finish_reshape()
8320 if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) { in raid5_finish_reshape()
8322 if (mddev->delta_disks <= 0) { in raid5_finish_reshape()
8325 mddev->degraded = raid5_calc_degraded(conf); in raid5_finish_reshape()
8328 d < conf->raid_disks - mddev->delta_disks; in raid5_finish_reshape()
8338 mddev->layout = conf->algorithm; in raid5_finish_reshape()
8339 mddev->chunk_sectors = conf->chunk_sectors; in raid5_finish_reshape()
8340 mddev->reshape_position = MaxSector; in raid5_finish_reshape()
8341 mddev->delta_disks = 0; in raid5_finish_reshape()
8342 mddev->reshape_backwards = 0; in raid5_finish_reshape()
8346 static void raid5_quiesce(struct mddev *mddev, int quiesce) in raid5_quiesce() argument
8348 struct r5conf *conf = mddev->private; in raid5_quiesce()
8378 static void *raid45_takeover_raid0(struct mddev *mddev, int level) in raid45_takeover_raid0() argument
8380 struct r0conf *raid0_conf = mddev->private; in raid45_takeover_raid0()
8386 mdname(mddev)); in raid45_takeover_raid0()
8392 mddev->dev_sectors = sectors; in raid45_takeover_raid0()
8393 mddev->new_level = level; in raid45_takeover_raid0()
8394 mddev->new_layout = ALGORITHM_PARITY_N; in raid45_takeover_raid0()
8395 mddev->new_chunk_sectors = mddev->chunk_sectors; in raid45_takeover_raid0()
8396 mddev->raid_disks += 1; in raid45_takeover_raid0()
8397 mddev->delta_disks = 1; in raid45_takeover_raid0()
8399 mddev->recovery_cp = MaxSector; in raid45_takeover_raid0()
8401 return setup_conf(mddev); in raid45_takeover_raid0()
8404 static void *raid5_takeover_raid1(struct mddev *mddev) in raid5_takeover_raid1() argument
8409 if (mddev->raid_disks != 2 || in raid5_takeover_raid1()
8410 mddev->degraded > 1) in raid5_takeover_raid1()
8418 while (chunksect && (mddev->array_sectors & (chunksect-1))) in raid5_takeover_raid1()
8421 if ((chunksect<<9) < RAID5_STRIPE_SIZE((struct r5conf *)mddev->private)) in raid5_takeover_raid1()
8425 mddev->new_level = 5; in raid5_takeover_raid1()
8426 mddev->new_layout = ALGORITHM_LEFT_SYMMETRIC; in raid5_takeover_raid1()
8427 mddev->new_chunk_sectors = chunksect; in raid5_takeover_raid1()
8429 ret = setup_conf(mddev); in raid5_takeover_raid1()
8431 mddev_clear_unsupported_flags(mddev, in raid5_takeover_raid1()
8436 static void *raid5_takeover_raid6(struct mddev *mddev) in raid5_takeover_raid6() argument
8440 switch (mddev->layout) { in raid5_takeover_raid6()
8462 mddev->new_level = 5; in raid5_takeover_raid6()
8463 mddev->new_layout = new_layout; in raid5_takeover_raid6()
8464 mddev->delta_disks = -1; in raid5_takeover_raid6()
8465 mddev->raid_disks -= 1; in raid5_takeover_raid6()
8466 return setup_conf(mddev); in raid5_takeover_raid6()
8469 static int raid5_check_reshape(struct mddev *mddev) in raid5_check_reshape() argument
8476 struct r5conf *conf = mddev->private; in raid5_check_reshape()
8477 int new_chunk = mddev->new_chunk_sectors; in raid5_check_reshape()
8479 if (mddev->new_layout >= 0 && !algorithm_valid_raid5(mddev->new_layout)) in raid5_check_reshape()
8486 if (mddev->array_sectors & (new_chunk-1)) in raid5_check_reshape()
8493 if (mddev->raid_disks == 2) { in raid5_check_reshape()
8495 if (mddev->new_layout >= 0) { in raid5_check_reshape()
8496 conf->algorithm = mddev->new_layout; in raid5_check_reshape()
8497 mddev->layout = mddev->new_layout; in raid5_check_reshape()
8501 mddev->chunk_sectors = new_chunk; in raid5_check_reshape()
8503 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in raid5_check_reshape()
8504 md_wakeup_thread(mddev->thread); in raid5_check_reshape()
8506 return check_reshape(mddev); in raid5_check_reshape()
8509 static int raid6_check_reshape(struct mddev *mddev) in raid6_check_reshape() argument
8511 int new_chunk = mddev->new_chunk_sectors; in raid6_check_reshape()
8513 if (mddev->new_layout >= 0 && !algorithm_valid_raid6(mddev->new_layout)) in raid6_check_reshape()
8520 if (mddev->array_sectors & (new_chunk-1)) in raid6_check_reshape()
8526 return check_reshape(mddev); in raid6_check_reshape()
8529 static void *raid5_takeover(struct mddev *mddev) in raid5_takeover() argument
8537 if (mddev->level == 0) in raid5_takeover()
8538 return raid45_takeover_raid0(mddev, 5); in raid5_takeover()
8539 if (mddev->level == 1) in raid5_takeover()
8540 return raid5_takeover_raid1(mddev); in raid5_takeover()
8541 if (mddev->level == 4) { in raid5_takeover()
8542 mddev->new_layout = ALGORITHM_PARITY_N; in raid5_takeover()
8543 mddev->new_level = 5; in raid5_takeover()
8544 return setup_conf(mddev); in raid5_takeover()
8546 if (mddev->level == 6) in raid5_takeover()
8547 return raid5_takeover_raid6(mddev); in raid5_takeover()
8552 static void *raid4_takeover(struct mddev *mddev) in raid4_takeover() argument
8558 if (mddev->level == 0) in raid4_takeover()
8559 return raid45_takeover_raid0(mddev, 4); in raid4_takeover()
8560 if (mddev->level == 5 && in raid4_takeover()
8561 mddev->layout == ALGORITHM_PARITY_N) { in raid4_takeover()
8562 mddev->new_layout = 0; in raid4_takeover()
8563 mddev->new_level = 4; in raid4_takeover()
8564 return setup_conf(mddev); in raid4_takeover()
8571 static void *raid6_takeover(struct mddev *mddev) in raid6_takeover() argument
8579 if (mddev->pers != &raid5_personality) in raid6_takeover()
8581 if (mddev->degraded > 1) in raid6_takeover()
8583 if (mddev->raid_disks > 253) in raid6_takeover()
8585 if (mddev->raid_disks < 3) in raid6_takeover()
8588 switch (mddev->layout) { in raid6_takeover()
8610 mddev->new_level = 6; in raid6_takeover()
8611 mddev->new_layout = new_layout; in raid6_takeover()
8612 mddev->delta_disks = 1; in raid6_takeover()
8613 mddev->raid_disks += 1; in raid6_takeover()
8614 return setup_conf(mddev); in raid6_takeover()
8617 static int raid5_change_consistency_policy(struct mddev *mddev, const char *buf) in raid5_change_consistency_policy() argument
8622 err = mddev_lock(mddev); in raid5_change_consistency_policy()
8625 conf = mddev->private; in raid5_change_consistency_policy()
8627 mddev_unlock(mddev); in raid5_change_consistency_policy()
8644 mddev_suspend(mddev); in raid5_change_consistency_policy()
8646 mddev_resume(mddev); in raid5_change_consistency_policy()
8648 } else if (test_bit(MD_HAS_JOURNAL, &conf->mddev->flags) && in raid5_change_consistency_policy()
8653 rdev_for_each(rdev, mddev) in raid5_change_consistency_policy()
8660 mddev_suspend(mddev); in raid5_change_consistency_policy()
8661 clear_bit(MD_HAS_JOURNAL, &mddev->flags); in raid5_change_consistency_policy()
8662 mddev_resume(mddev); in raid5_change_consistency_policy()
8672 md_update_sb(mddev, 1); in raid5_change_consistency_policy()
8674 mddev_unlock(mddev); in raid5_change_consistency_policy()
8679 static int raid5_start(struct mddev *mddev) in raid5_start() argument
8681 struct r5conf *conf = mddev->private; in raid5_start()