Lines Matching refs:mddev
191 md_wakeup_thread(conf->mddev->thread); in raid5_wakeup_stripe_thread()
263 md_wakeup_thread(conf->mddev->thread); in do_release_stripe()
269 md_wakeup_thread(conf->mddev->thread); in do_release_stripe()
350 md_wakeup_thread(conf->mddev->thread); in release_inactive_stripe_list()
396 if (unlikely(!conf->mddev->thread) || in raid5_release_stripe()
401 md_wakeup_thread(conf->mddev->thread); in raid5_release_stripe()
692 int degraded = conf->mddev->degraded; in has_failed()
694 if (test_bit(MD_BROKEN, &conf->mddev->flags)) in has_failed()
697 if (conf->mddev->reshape_position != MaxSector) in has_failed()
910 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 bi, disk_devt(conf->mddev->gendisk), in ops_run_io()
1275 if (conf->mddev->gendisk) in ops_run_io()
1277 rbi, 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()
2881 mdname(mddev), bdevname(rdev->bdev, b)); in raid5_error()
2886 mddev->degraded = raid5_calc_degraded(conf); in raid5_error()
2889 set_bit(MD_BROKEN, &conf->mddev->flags); in raid5_error()
2890 conf->recovery_disabled = mddev->recovery_disabled; in raid5_error()
2893 mdname(mddev), mddev->degraded, conf->raid_disks); in raid5_error()
2896 mdname(mddev), conf->raid_disks - mddev->degraded); in raid5_error()
2900 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in raid5_error()
2903 set_mask_bits(&mddev->sb_flags, 0, in raid5_error()
2905 r5c_update_on_rdev_error(mddev, rdev); in raid5_error()
3228 mdname(conf->mddev)); in raid5_compute_blocknr()
3472 md_write_inc(conf->mddev, bi); in add_stripe_bio()
3493 if (conf->mddev->bitmap && firstwrite) { in add_stripe_bio()
3508 md_bitmap_startwrite(conf->mddev->bitmap, sh->sector, in add_stripe_bio()
3572 md_error(conf->mddev, rdev); in handle_failed_stripe()
3573 rdev_dec_pending(rdev, conf->mddev); in handle_failed_stripe()
3594 md_write_end(conf->mddev); in handle_failed_stripe()
3599 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_failed_stripe()
3615 md_write_end(conf->mddev); in handle_failed_stripe()
3645 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_failed_stripe()
3657 md_wakeup_thread(conf->mddev->thread); in handle_failed_stripe()
3680 if (test_bit(MD_RECOVERY_RECOVER, &conf->mddev->recovery)) { in handle_failed_sync()
3704 conf->mddev->recovery_disabled; in handle_failed_sync()
3706 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), !abort); in handle_failed_sync()
3720 || rdev->mddev->recovery_cp <= sh->sector)) in want_replace()
3813 sh->sector < sh->raid_conf->mddev->recovery_cp) in need_this_block()
3993 md_write_end(conf->mddev); in handle_stripe_clean_event()
3997 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in handle_stripe_clean_event()
4054 md_wakeup_thread(conf->mddev->thread); in handle_stripe_clean_event()
4081 sector_t recovery_cp = conf->mddev->recovery_cp; in handle_stripe_dirtying()
4132 if (conf->mddev->queue) in handle_stripe_dirtying()
4133 blk_add_trace_msg(conf->mddev->queue, in handle_stripe_dirtying()
4212 if (rcw && conf->mddev->queue) in handle_stripe_dirtying()
4213 blk_add_trace_msg(conf->mddev->queue, "raid5 rcw %llu %d %d %d", in handle_stripe_dirtying()
4301 atomic64_add(RAID5_STRIPE_SECTORS(conf), &conf->mddev->resync_mismatches); in handle_parity_checks5()
4302 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) { in handle_parity_checks5()
4306 "%llu-%llu\n", mdname(conf->mddev), in handle_parity_checks5()
4428 mdname(conf->mddev), in handle_parity_checks6()
4466 atomic64_add(RAID5_STRIPE_SECTORS(conf), &conf->mddev->resync_mismatches); in handle_parity_checks6()
4467 if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) { in handle_parity_checks6()
4471 "%llu-%llu\n", mdname(conf->mddev), in handle_parity_checks6()
4767 sh->sector >= conf->mddev->recovery_cp || in analyse_stripe()
4768 test_bit(MD_RECOVERY_REQUESTED, &(conf->mddev->recovery))) in analyse_stripe()
4935 test_bit(MD_SB_CHANGE_PENDING, &conf->mddev->sb_flags)) { in handle_stripe()
4947 rdev_dec_pending(s.blocked_rdev, conf->mddev); in handle_stripe()
5135 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), 1); in handle_stripe()
5144 if (s.failed <= conf->max_degraded && !conf->mddev->ro) in handle_stripe()
5200 md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), 1); in handle_stripe()
5210 if (conf->mddev->external) in handle_stripe()
5212 conf->mddev); in handle_stripe()
5219 conf->mddev); in handle_stripe()
5231 md_error(conf->mddev, rdev); in handle_stripe()
5232 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5238 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5247 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
5264 md_wakeup_thread(conf->mddev->thread); in handle_stripe()
5304 static int in_chunk_boundary(struct mddev *mddev, struct bio *bio) in in_chunk_boundary() argument
5306 struct r5conf *conf = mddev->private; in in_chunk_boundary()
5332 md_wakeup_thread(conf->mddev->thread); in add_bio_to_retry()
5365 struct mddev *mddev; in raid5_align_endio() local
5374 mddev = rdev->mddev; in raid5_align_endio()
5375 conf = mddev->private; in raid5_align_endio()
5377 rdev_dec_pending(rdev, conf->mddev); in raid5_align_endio()
5391 static int raid5_read_one_chunk(struct mddev *mddev, struct bio *raid_bio) in raid5_read_one_chunk() argument
5393 struct r5conf *conf = mddev->private; in raid5_read_one_chunk()
5399 if (!in_chunk_boundary(mddev, raid_bio)) { in raid5_read_one_chunk()
5406 align_bi = bio_clone_fast(raid_bio, GFP_NOIO, &mddev->bio_set); in raid5_read_one_chunk()
5454 rdev_dec_pending(rdev, mddev); in raid5_read_one_chunk()
5468 if (mddev->gendisk) in raid5_read_one_chunk()
5470 align_bi, disk_devt(mddev->gendisk), in raid5_read_one_chunk()
5481 static struct bio *chunk_aligned_read(struct mddev *mddev, struct bio *raid_bio) in chunk_aligned_read() argument
5485 unsigned chunk_sects = mddev->chunk_sectors; in chunk_aligned_read()
5489 struct r5conf *conf = mddev->private; in chunk_aligned_read()
5496 if (!raid5_read_one_chunk(mddev, raid_bio)) in chunk_aligned_read()
5615 struct mddev *mddev = cb->cb.data; in raid5_unplug() local
5616 struct r5conf *conf = mddev->private; in raid5_unplug()
5644 if (mddev->queue) in raid5_unplug()
5645 trace_block_unplug(mddev->queue, cnt, !from_schedule); in raid5_unplug()
5649 static void release_stripe_plug(struct mddev *mddev, in release_stripe_plug() argument
5653 raid5_unplug, mddev, in release_stripe_plug()
5677 static void make_discard_request(struct mddev *mddev, struct bio *bi) in make_discard_request() argument
5679 struct r5conf *conf = mddev->private; in make_discard_request()
5684 if (mddev->reshape_position != MaxSector) in make_discard_request()
5738 md_write_inc(mddev, bi); in make_discard_request()
5742 if (conf->mddev->bitmap) { in make_discard_request()
5746 md_bitmap_startwrite(mddev->bitmap, in make_discard_request()
5758 release_stripe_plug(mddev, sh); in make_discard_request()
5764 static bool raid5_make_request(struct mddev *mddev, struct bio * bi) in raid5_make_request() argument
5766 struct r5conf *conf = mddev->private; in raid5_make_request()
5782 if (md_flush_request(mddev, bi)) in raid5_make_request()
5793 if (!md_write_start(mddev, bi)) in raid5_make_request()
5800 if (rw == READ && mddev->degraded == 0 && in raid5_make_request()
5801 mddev->reshape_position == MaxSector) { in raid5_make_request()
5802 bi = chunk_aligned_read(mddev, bi); in raid5_make_request()
5808 make_discard_request(mddev, bi); in raid5_make_request()
5809 md_write_end(mddev); in raid5_make_request()
5839 if (mddev->reshape_backwards in raid5_make_request()
5844 if (mddev->reshape_backwards in raid5_make_request()
5877 if (mddev->reshape_backwards in raid5_make_request()
5904 md_wakeup_thread(mddev->thread); in raid5_make_request()
5922 release_stripe_plug(mddev, sh); in raid5_make_request()
5932 md_write_end(mddev); in raid5_make_request()
5937 static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);
5939 static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr, int *skipped) in reshape_request() argument
5950 struct r5conf *conf = mddev->private; in reshape_request()
5967 if (mddev->reshape_backwards && in reshape_request()
5968 conf->reshape_progress < raid5_size(mddev, 0, 0)) { in reshape_request()
5969 sector_nr = raid5_size(mddev, 0, 0) in reshape_request()
5971 } else if (mddev->reshape_backwards && in reshape_request()
5975 } else if (!mddev->reshape_backwards && in reshape_request()
5980 mddev->curr_resync_completed = sector_nr; in reshape_request()
5981 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6007 if (mddev->reshape_backwards) { in reshape_request()
6025 if (mddev->reshape_backwards) { in reshape_request()
6028 BUG_ON((mddev->dev_sectors & in reshape_request()
6063 if ((mddev->reshape_backwards in reshape_request()
6070 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6073 mddev->reshape_position = conf->reshape_progress; in reshape_request()
6074 mddev->curr_resync_completed = sector_nr; in reshape_request()
6075 if (!mddev->reshape_backwards) in reshape_request()
6077 rdev_for_each(rdev, mddev) in reshape_request()
6085 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in reshape_request()
6086 md_wakeup_thread(mddev->thread); in reshape_request()
6087 wait_event(mddev->sb_wait, mddev->sb_flags == 0 || in reshape_request()
6088 test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6089 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) in reshape_request()
6092 conf->reshape_safe = mddev->reshape_position; in reshape_request()
6095 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6116 if (s < raid5_size(mddev, 0, 0)) { in reshape_request()
6131 if (mddev->reshape_backwards) in reshape_request()
6148 if (last_sector >= mddev->dev_sectors) in reshape_request()
6149 last_sector = mddev->dev_sectors - 1; in reshape_request()
6171 if (mddev->curr_resync_completed > mddev->resync_max || in reshape_request()
6172 (sector_nr - mddev->curr_resync_completed) * 2 in reshape_request()
6173 >= mddev->resync_max - mddev->curr_resync_completed) { in reshape_request()
6177 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6180 mddev->reshape_position = conf->reshape_progress; in reshape_request()
6181 mddev->curr_resync_completed = sector_nr; in reshape_request()
6182 if (!mddev->reshape_backwards) in reshape_request()
6184 rdev_for_each(rdev, mddev) in reshape_request()
6191 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in reshape_request()
6192 md_wakeup_thread(mddev->thread); in reshape_request()
6193 wait_event(mddev->sb_wait, in reshape_request()
6194 !test_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags) in reshape_request()
6195 || test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
6196 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) in reshape_request()
6199 conf->reshape_safe = mddev->reshape_position; in reshape_request()
6202 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
6208 static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_nr, in raid5_sync_request() argument
6211 struct r5conf *conf = mddev->private; in raid5_sync_request()
6213 sector_t max_sector = mddev->dev_sectors; in raid5_sync_request()
6221 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) { in raid5_sync_request()
6226 if (mddev->curr_resync < max_sector) /* aborted */ in raid5_sync_request()
6227 md_bitmap_end_sync(mddev->bitmap, mddev->curr_resync, in raid5_sync_request()
6231 md_bitmap_close_sync(mddev->bitmap); in raid5_sync_request()
6239 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) in raid5_sync_request()
6240 return reshape_request(mddev, sector_nr, skipped); in raid5_sync_request()
6252 if (mddev->degraded >= conf->max_degraded && in raid5_sync_request()
6253 test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { in raid5_sync_request()
6254 sector_t rv = mddev->dev_sectors - sector_nr; in raid5_sync_request()
6258 if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) && in raid5_sync_request()
6260 !md_bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, 1) && in raid5_sync_request()
6269 md_bitmap_cond_end_sync(mddev->bitmap, sector_nr, false); in raid5_sync_request()
6292 md_bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, still_degraded); in raid5_sync_request()
6421 struct mddev *mddev = conf->mddev; in raid5_do_work() local
6442 wait_event_lock_irq(mddev->sb_wait, in raid5_do_work()
6443 !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags), in raid5_do_work()
6469 struct mddev *mddev = thread->mddev; in raid5d() local
6470 struct r5conf *conf = mddev->private; in raid5d()
6476 md_check_recovery(mddev); in raid5d()
6495 md_bitmap_unplug(mddev->bitmap); in raid5d()
6518 if (mddev->sb_flags & ~(1 << MD_SB_CHANGE_PENDING)) { in raid5d()
6520 md_check_recovery(mddev); in raid5d()
6531 wait_event_lock_irq(mddev->sb_wait, in raid5d()
6532 !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags), in raid5d()
6559 raid5_show_stripe_cache_size(struct mddev *mddev, char *page) in raid5_show_stripe_cache_size() argument
6563 spin_lock(&mddev->lock); in raid5_show_stripe_cache_size()
6564 conf = mddev->private; in raid5_show_stripe_cache_size()
6567 spin_unlock(&mddev->lock); in raid5_show_stripe_cache_size()
6572 raid5_set_cache_size(struct mddev *mddev, int size) in raid5_set_cache_size() argument
6575 struct r5conf *conf = mddev->private; in raid5_set_cache_size()
6587 md_allow_write(mddev); in raid5_set_cache_size()
6603 raid5_store_stripe_cache_size(struct mddev *mddev, const char *page, size_t len) in raid5_store_stripe_cache_size() argument
6613 err = mddev_lock(mddev); in raid5_store_stripe_cache_size()
6616 conf = mddev->private; in raid5_store_stripe_cache_size()
6620 err = raid5_set_cache_size(mddev, new); in raid5_store_stripe_cache_size()
6621 mddev_unlock(mddev); in raid5_store_stripe_cache_size()
6632 raid5_show_rmw_level(struct mddev *mddev, char *page) in raid5_show_rmw_level() argument
6634 struct r5conf *conf = mddev->private; in raid5_show_rmw_level()
6642 raid5_store_rmw_level(struct mddev *mddev, const char *page, size_t len) in raid5_store_rmw_level() argument
6644 struct r5conf *conf = mddev->private; in raid5_store_rmw_level()
6674 raid5_show_stripe_size(struct mddev *mddev, char *page) in raid5_show_stripe_size() argument
6679 spin_lock(&mddev->lock); in raid5_show_stripe_size()
6680 conf = mddev->private; in raid5_show_stripe_size()
6683 spin_unlock(&mddev->lock); in raid5_show_stripe_size()
6689 raid5_store_stripe_size(struct mddev *mddev, const char *page, size_t len) in raid5_store_stripe_size() argument
6711 err = mddev_lock(mddev); in raid5_store_stripe_size()
6715 conf = mddev->private; in raid5_store_stripe_size()
6727 if (mddev->sync_thread || in raid5_store_stripe_size()
6728 test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) || in raid5_store_stripe_size()
6729 mddev->reshape_position != MaxSector || in raid5_store_stripe_size()
6730 mddev->sysfs_active) { in raid5_store_stripe_size()
6735 mddev_suspend(mddev); in raid5_store_stripe_size()
6746 mdname(mddev)); in raid5_store_stripe_size()
6750 mddev_resume(mddev); in raid5_store_stripe_size()
6753 mddev_unlock(mddev); in raid5_store_stripe_size()
6769 raid5_show_preread_threshold(struct mddev *mddev, char *page) in raid5_show_preread_threshold() argument
6773 spin_lock(&mddev->lock); in raid5_show_preread_threshold()
6774 conf = mddev->private; in raid5_show_preread_threshold()
6777 spin_unlock(&mddev->lock); in raid5_show_preread_threshold()
6782 raid5_store_preread_threshold(struct mddev *mddev, const char *page, size_t len) in raid5_store_preread_threshold() argument
6793 err = mddev_lock(mddev); in raid5_store_preread_threshold()
6796 conf = mddev->private; in raid5_store_preread_threshold()
6803 mddev_unlock(mddev); in raid5_store_preread_threshold()
6814 raid5_show_skip_copy(struct mddev *mddev, char *page) in raid5_show_skip_copy() argument
6818 spin_lock(&mddev->lock); in raid5_show_skip_copy()
6819 conf = mddev->private; in raid5_show_skip_copy()
6822 spin_unlock(&mddev->lock); in raid5_show_skip_copy()
6827 raid5_store_skip_copy(struct mddev *mddev, const char *page, size_t len) in raid5_store_skip_copy() argument
6839 err = mddev_lock(mddev); in raid5_store_skip_copy()
6842 conf = mddev->private; in raid5_store_skip_copy()
6846 struct request_queue *q = mddev->queue; in raid5_store_skip_copy()
6848 mddev_suspend(mddev); in raid5_store_skip_copy()
6854 mddev_resume(mddev); in raid5_store_skip_copy()
6856 mddev_unlock(mddev); in raid5_store_skip_copy()
6866 stripe_cache_active_show(struct mddev *mddev, char *page) in stripe_cache_active_show() argument
6868 struct r5conf *conf = mddev->private; in stripe_cache_active_show()
6879 raid5_show_group_thread_cnt(struct mddev *mddev, char *page) in raid5_show_group_thread_cnt() argument
6883 spin_lock(&mddev->lock); in raid5_show_group_thread_cnt()
6884 conf = mddev->private; in raid5_show_group_thread_cnt()
6887 spin_unlock(&mddev->lock); in raid5_show_group_thread_cnt()
6895 raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len) in raid5_store_group_thread_cnt() argument
6911 err = mddev_lock(mddev); in raid5_store_group_thread_cnt()
6914 conf = mddev->private; in raid5_store_group_thread_cnt()
6918 mddev_suspend(mddev); in raid5_store_group_thread_cnt()
6936 mddev_resume(mddev); in raid5_store_group_thread_cnt()
6938 mddev_unlock(mddev); in raid5_store_group_thread_cnt()
7019 raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks) in raid5_size() argument
7021 struct r5conf *conf = mddev->private; in raid5_size()
7024 sectors = mddev->dev_sectors; in raid5_size()
7163 static struct r5conf *setup_conf(struct mddev *mddev) in setup_conf() argument
7175 if (mddev->new_level != 5 in setup_conf()
7176 && mddev->new_level != 4 in setup_conf()
7177 && mddev->new_level != 6) { in setup_conf()
7179 mdname(mddev), mddev->new_level); in setup_conf()
7182 if ((mddev->new_level == 5 in setup_conf()
7183 && !algorithm_valid_raid5(mddev->new_layout)) || in setup_conf()
7184 (mddev->new_level == 6 in setup_conf()
7185 && !algorithm_valid_raid6(mddev->new_layout))) { in setup_conf()
7187 mdname(mddev), mddev->new_layout); in setup_conf()
7190 if (mddev->new_level == 6 && mddev->raid_disks < 4) { in setup_conf()
7192 mdname(mddev), mddev->raid_disks); in setup_conf()
7196 if (!mddev->new_chunk_sectors || in setup_conf()
7197 (mddev->new_chunk_sectors << 9) % PAGE_SIZE || in setup_conf()
7198 !is_power_of_2(mddev->new_chunk_sectors)) { in setup_conf()
7200 mdname(mddev), mddev->new_chunk_sectors << 9); in setup_conf()
7246 rdev_for_each(rdev, mddev) { in setup_conf()
7256 conf->recovery_disabled = mddev->recovery_disabled - 1; in setup_conf()
7258 conf->raid_disks = mddev->raid_disks; in setup_conf()
7259 if (mddev->reshape_position == MaxSector) in setup_conf()
7260 conf->previous_raid_disks = mddev->raid_disks; in setup_conf()
7262 conf->previous_raid_disks = mddev->raid_disks - mddev->delta_disks; in setup_conf()
7280 conf->mddev = mddev; in setup_conf()
7307 conf->level = mddev->new_level; in setup_conf()
7308 conf->chunk_sectors = mddev->new_chunk_sectors; in setup_conf()
7312 pr_debug("raid456: run(%s) called.\n", mdname(mddev)); in setup_conf()
7314 rdev_for_each(rdev, mddev) { in setup_conf()
7334 mdname(mddev), bdevname(rdev->bdev, b), raid_disk); in setup_conf()
7340 conf->level = mddev->new_level; in setup_conf()
7351 conf->algorithm = mddev->new_layout; in setup_conf()
7352 conf->reshape_progress = mddev->reshape_position; in setup_conf()
7354 conf->prev_chunk_sectors = mddev->chunk_sectors; in setup_conf()
7355 conf->prev_algo = mddev->layout; in setup_conf()
7362 if (mddev->reshape_position != MaxSector) { in setup_conf()
7364 ((mddev->chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4, in setup_conf()
7365 ((mddev->new_chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4); in setup_conf()
7369 mdname(mddev), conf->min_nr_stripes); in setup_conf()
7376 mdname(mddev), memory); in setup_conf()
7379 pr_debug("md/raid:%s: allocated %dkB\n", mdname(mddev), memory); in setup_conf()
7392 mdname(mddev)); in setup_conf()
7396 sprintf(pers_name, "raid%d", mddev->new_level); in setup_conf()
7397 conf->thread = md_register_thread(raid5d, mddev, pers_name); in setup_conf()
7400 mdname(mddev)); in setup_conf()
7442 blk_queue_io_opt(conf->mddev->queue, (conf->chunk_sectors << 9) * in raid5_set_io_opt()
7446 static int raid5_run(struct mddev *mddev) in raid5_run() argument
7458 if (mddev_init_writes_pending(mddev) < 0) in raid5_run()
7461 if (mddev->recovery_cp != MaxSector) in raid5_run()
7463 mdname(mddev)); in raid5_run()
7465 rdev_for_each(rdev, mddev) { in raid5_run()
7478 } else if (mddev->reshape_backwards && in raid5_run()
7481 else if (!mddev->reshape_backwards && in raid5_run()
7486 if ((test_bit(MD_HAS_JOURNAL, &mddev->flags) || journal_dev) && in raid5_run()
7487 (mddev->bitmap_info.offset || mddev->bitmap_info.file)) { in raid5_run()
7489 mdname(mddev)); in raid5_run()
7493 if (mddev->reshape_position != MaxSector) { in raid5_run()
7508 int max_degraded = (mddev->level == 6 ? 2 : 1); in raid5_run()
7514 mdname(mddev)); in raid5_run()
7518 if (mddev->new_level != mddev->level) { in raid5_run()
7520 mdname(mddev)); in raid5_run()
7523 old_disks = mddev->raid_disks - mddev->delta_disks; in raid5_run()
7531 here_new = mddev->reshape_position; in raid5_run()
7532 chunk_sectors = max(mddev->chunk_sectors, mddev->new_chunk_sectors); in raid5_run()
7533 new_data_disks = mddev->raid_disks - max_degraded; in raid5_run()
7536 mdname(mddev)); in raid5_run()
7541 here_old = mddev->reshape_position; in raid5_run()
7545 if (mddev->delta_disks == 0) { in raid5_run()
7553 if (abs(min_offset_diff) >= mddev->chunk_sectors && in raid5_run()
7554 abs(min_offset_diff) >= mddev->new_chunk_sectors) in raid5_run()
7556 else if (mddev->ro == 0) { in raid5_run()
7558 mdname(mddev)); in raid5_run()
7561 } else if (mddev->reshape_backwards in raid5_run()
7568 mdname(mddev)); in raid5_run()
7571 pr_debug("md/raid:%s: reshape will continue\n", mdname(mddev)); in raid5_run()
7574 BUG_ON(mddev->level != mddev->new_level); in raid5_run()
7575 BUG_ON(mddev->layout != mddev->new_layout); in raid5_run()
7576 BUG_ON(mddev->chunk_sectors != mddev->new_chunk_sectors); in raid5_run()
7577 BUG_ON(mddev->delta_disks != 0); in raid5_run()
7580 if (test_bit(MD_HAS_JOURNAL, &mddev->flags) && in raid5_run()
7581 test_bit(MD_HAS_PPL, &mddev->flags)) { in raid5_run()
7583 mdname(mddev)); in raid5_run()
7584 clear_bit(MD_HAS_PPL, &mddev->flags); in raid5_run()
7585 clear_bit(MD_HAS_MULTIPLE_PPLS, &mddev->flags); in raid5_run()
7588 if (mddev->private == NULL) in raid5_run()
7589 conf = setup_conf(mddev); in raid5_run()
7591 conf = mddev->private; in raid5_run()
7596 if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) { in raid5_run()
7599 mdname(mddev)); in raid5_run()
7600 mddev->ro = 1; in raid5_run()
7601 set_disk_ro(mddev->gendisk, 1); in raid5_run()
7602 } else if (mddev->recovery_cp == MaxSector) in raid5_run()
7603 set_bit(MD_JOURNAL_CLEAN, &mddev->flags); in raid5_run()
7607 mddev->thread = conf->thread; in raid5_run()
7609 mddev->private = conf; in raid5_run()
7642 if (mddev->major_version == 0 && in raid5_run()
7643 mddev->minor_version > 90) in raid5_run()
7665 mddev->degraded = raid5_calc_degraded(conf); in raid5_run()
7669 mdname(mddev), mddev->degraded, conf->raid_disks); in raid5_run()
7674 mddev->dev_sectors &= ~(mddev->chunk_sectors - 1); in raid5_run()
7675 mddev->resync_max_sectors = mddev->dev_sectors; in raid5_run()
7677 if (mddev->degraded > dirty_parity_disks && in raid5_run()
7678 mddev->recovery_cp != MaxSector) { in raid5_run()
7679 if (test_bit(MD_HAS_PPL, &mddev->flags)) in raid5_run()
7681 mdname(mddev)); in raid5_run()
7682 else if (mddev->ok_start_degraded) in raid5_run()
7684 mdname(mddev)); in raid5_run()
7687 mdname(mddev)); in raid5_run()
7693 mdname(mddev), conf->level, in raid5_run()
7694 mddev->raid_disks-mddev->degraded, mddev->raid_disks, in raid5_run()
7695 mddev->new_layout); in raid5_run()
7702 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); in raid5_run()
7703 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); in raid5_run()
7704 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); in raid5_run()
7705 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); in raid5_run()
7706 mddev->sync_thread = md_register_thread(md_do_sync, mddev, in raid5_run()
7708 if (!mddev->sync_thread) in raid5_run()
7713 if (mddev->to_remove == &raid5_attrs_group) in raid5_run()
7714 mddev->to_remove = NULL; in raid5_run()
7715 else if (mddev->kobj.sd && in raid5_run()
7716 sysfs_create_group(&mddev->kobj, &raid5_attrs_group)) in raid5_run()
7718 mdname(mddev)); in raid5_run()
7719 md_set_array_sectors(mddev, raid5_size(mddev, 0, 0)); in raid5_run()
7721 if (mddev->queue) { in raid5_run()
7729 ((mddev->chunk_sectors << 9) / PAGE_SIZE); in raid5_run()
7731 chunk_size = mddev->chunk_sectors << 9; in raid5_run()
7732 blk_queue_io_min(mddev->queue, chunk_size); in raid5_run()
7734 mddev->queue->limits.raid_partial_stripes_expensive = 1; in raid5_run()
7744 mddev->queue->limits.discard_alignment = stripe; in raid5_run()
7745 mddev->queue->limits.discard_granularity = stripe; in raid5_run()
7747 blk_queue_max_write_same_sectors(mddev->queue, 0); in raid5_run()
7748 blk_queue_max_write_zeroes_sectors(mddev->queue, 0); in raid5_run()
7750 rdev_for_each(rdev, mddev) { in raid5_run()
7751 disk_stack_limits(mddev->gendisk, rdev->bdev, in raid5_run()
7753 disk_stack_limits(mddev->gendisk, rdev->bdev, in raid5_run()
7773 mddev->queue->limits.max_discard_sectors >= (stripe >> 9) && in raid5_run()
7774 mddev->queue->limits.discard_granularity >= stripe) in raid5_run()
7776 mddev->queue); in raid5_run()
7779 mddev->queue); in raid5_run()
7781 blk_queue_max_hw_sectors(mddev->queue, UINT_MAX); in raid5_run()
7789 md_unregister_thread(&mddev->thread); in raid5_run()
7792 mddev->private = NULL; in raid5_run()
7793 pr_warn("md/raid:%s: failed to run raid set.\n", mdname(mddev)); in raid5_run()
7797 static void raid5_free(struct mddev *mddev, void *priv) in raid5_free() argument
7802 mddev->to_remove = &raid5_attrs_group; in raid5_free()
7805 static void raid5_status(struct seq_file *seq, struct mddev *mddev) in raid5_status() argument
7807 struct r5conf *conf = mddev->private; in raid5_status()
7810 seq_printf(seq, " level %d, %dk chunk, algorithm %d", mddev->level, in raid5_status()
7811 conf->chunk_sectors / 2, mddev->layout); in raid5_status()
7812 seq_printf (seq, " [%d/%d] [", conf->raid_disks, conf->raid_disks - mddev->degraded); in raid5_status()
7834 conf->raid_disks - conf->mddev->degraded); in print_raid5_conf()
7846 static int raid5_spare_active(struct mddev *mddev) in raid5_spare_active() argument
7849 struct r5conf *conf = mddev->private; in raid5_spare_active()
7883 mddev->degraded = raid5_calc_degraded(conf); in raid5_spare_active()
7889 static int raid5_remove_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_remove_disk() argument
7891 struct r5conf *conf = mddev->private; in raid5_remove_disk()
7933 mddev->recovery_disabled != conf->recovery_disabled && in raid5_remove_disk()
7974 static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_add_disk() argument
7976 struct r5conf *conf = mddev->private; in raid5_add_disk()
8002 if (mddev->recovery_disabled == conf->recovery_disabled) in raid5_add_disk()
8054 static int raid5_resize(struct mddev *mddev, sector_t sectors) in raid5_resize() argument
8064 struct r5conf *conf = mddev->private; in raid5_resize()
8069 newsize = raid5_size(mddev, sectors, mddev->raid_disks); in raid5_resize()
8070 if (mddev->external_size && in raid5_resize()
8071 mddev->array_sectors > newsize) in raid5_resize()
8073 if (mddev->bitmap) { in raid5_resize()
8074 int ret = md_bitmap_resize(mddev->bitmap, sectors, 0, 0); in raid5_resize()
8078 md_set_array_sectors(mddev, newsize); in raid5_resize()
8079 if (sectors > mddev->dev_sectors && in raid5_resize()
8080 mddev->recovery_cp > mddev->dev_sectors) { in raid5_resize()
8081 mddev->recovery_cp = mddev->dev_sectors; in raid5_resize()
8082 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid5_resize()
8084 mddev->dev_sectors = sectors; in raid5_resize()
8085 mddev->resync_max_sectors = sectors; in raid5_resize()
8089 static int check_stripe_cache(struct mddev *mddev) in check_stripe_cache() argument
8099 struct r5conf *conf = mddev->private; in check_stripe_cache()
8100 if (((mddev->chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4 in check_stripe_cache()
8102 ((mddev->new_chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4 in check_stripe_cache()
8105 mdname(mddev), in check_stripe_cache()
8106 ((max(mddev->chunk_sectors, mddev->new_chunk_sectors) << 9) in check_stripe_cache()
8113 static int check_reshape(struct mddev *mddev) in check_reshape() argument
8115 struct r5conf *conf = mddev->private; in check_reshape()
8119 if (mddev->delta_disks == 0 && in check_reshape()
8120 mddev->new_layout == mddev->layout && in check_reshape()
8121 mddev->new_chunk_sectors == mddev->chunk_sectors) in check_reshape()
8125 if (mddev->delta_disks < 0 && mddev->reshape_position == MaxSector) { in check_reshape()
8132 if (mddev->level == 6) in check_reshape()
8134 if (mddev->raid_disks + mddev->delta_disks < min) in check_reshape()
8138 if (!check_stripe_cache(mddev)) in check_reshape()
8141 if (mddev->new_chunk_sectors > mddev->chunk_sectors || in check_reshape()
8142 mddev->delta_disks > 0) in check_reshape()
8145 + max(0, mddev->delta_disks), in check_reshape()
8146 max(mddev->new_chunk_sectors, in check_reshape()
8147 mddev->chunk_sectors) in check_reshape()
8151 if (conf->previous_raid_disks + mddev->delta_disks <= conf->pool_size) in check_reshape()
8154 + mddev->delta_disks)); in check_reshape()
8157 static int raid5_start_reshape(struct mddev *mddev) in raid5_start_reshape() argument
8159 struct r5conf *conf = mddev->private; in raid5_start_reshape()
8164 if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) in raid5_start_reshape()
8167 if (!check_stripe_cache(mddev)) in raid5_start_reshape()
8173 rdev_for_each(rdev, mddev) { in raid5_start_reshape()
8179 if (spares - mddev->degraded < mddev->delta_disks - conf->max_degraded) in raid5_start_reshape()
8189 if (raid5_size(mddev, 0, conf->raid_disks + mddev->delta_disks) in raid5_start_reshape()
8190 < mddev->array_sectors) { in raid5_start_reshape()
8192 mdname(mddev)); in raid5_start_reshape()
8200 conf->raid_disks += mddev->delta_disks; in raid5_start_reshape()
8202 conf->chunk_sectors = mddev->new_chunk_sectors; in raid5_start_reshape()
8204 conf->algorithm = mddev->new_layout; in raid5_start_reshape()
8210 if (mddev->reshape_backwards) in raid5_start_reshape()
8211 conf->reshape_progress = raid5_size(mddev, 0, 0); in raid5_start_reshape()
8222 mddev_suspend(mddev); in raid5_start_reshape()
8223 mddev_resume(mddev); in raid5_start_reshape()
8232 if (mddev->delta_disks >= 0) { in raid5_start_reshape()
8233 rdev_for_each(rdev, mddev) in raid5_start_reshape()
8236 if (raid5_add_disk(mddev, rdev) == 0) { in raid5_start_reshape()
8244 sysfs_link_rdev(mddev, rdev); in raid5_start_reshape()
8257 mddev->degraded = raid5_calc_degraded(conf); in raid5_start_reshape()
8260 mddev->raid_disks = conf->raid_disks; in raid5_start_reshape()
8261 mddev->reshape_position = conf->reshape_progress; in raid5_start_reshape()
8262 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in raid5_start_reshape()
8264 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); in raid5_start_reshape()
8265 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); in raid5_start_reshape()
8266 clear_bit(MD_RECOVERY_DONE, &mddev->recovery); in raid5_start_reshape()
8267 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); in raid5_start_reshape()
8268 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); in raid5_start_reshape()
8269 mddev->sync_thread = md_register_thread(md_do_sync, mddev, in raid5_start_reshape()
8271 if (!mddev->sync_thread) { in raid5_start_reshape()
8272 mddev->recovery = 0; in raid5_start_reshape()
8275 mddev->raid_disks = conf->raid_disks = conf->previous_raid_disks; in raid5_start_reshape()
8276 mddev->new_chunk_sectors = in raid5_start_reshape()
8278 mddev->new_layout = conf->algorithm = conf->prev_algo; in raid5_start_reshape()
8279 rdev_for_each(rdev, mddev) in raid5_start_reshape()
8284 mddev->reshape_position = MaxSector; in raid5_start_reshape()
8290 md_wakeup_thread(mddev->sync_thread); in raid5_start_reshape()
8291 md_new_event(mddev); in raid5_start_reshape()
8301 if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) { in end_reshape()
8306 md_finish_reshape(conf->mddev); in end_reshape()
8309 conf->mddev->reshape_position = MaxSector; in end_reshape()
8310 rdev_for_each(rdev, conf->mddev) in end_reshape()
8318 if (conf->mddev->queue) in end_reshape()
8326 static void raid5_finish_reshape(struct mddev *mddev) in raid5_finish_reshape() argument
8328 struct r5conf *conf = mddev->private; in raid5_finish_reshape()
8330 if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) { in raid5_finish_reshape()
8332 if (mddev->delta_disks <= 0) { in raid5_finish_reshape()
8335 mddev->degraded = raid5_calc_degraded(conf); in raid5_finish_reshape()
8338 d < conf->raid_disks - mddev->delta_disks; in raid5_finish_reshape()
8348 mddev->layout = conf->algorithm; in raid5_finish_reshape()
8349 mddev->chunk_sectors = conf->chunk_sectors; in raid5_finish_reshape()
8350 mddev->reshape_position = MaxSector; in raid5_finish_reshape()
8351 mddev->delta_disks = 0; in raid5_finish_reshape()
8352 mddev->reshape_backwards = 0; in raid5_finish_reshape()
8356 static void raid5_quiesce(struct mddev *mddev, int quiesce) in raid5_quiesce() argument
8358 struct r5conf *conf = mddev->private; in raid5_quiesce()
8388 static void *raid45_takeover_raid0(struct mddev *mddev, int level) in raid45_takeover_raid0() argument
8390 struct r0conf *raid0_conf = mddev->private; in raid45_takeover_raid0()
8396 mdname(mddev)); in raid45_takeover_raid0()
8402 mddev->dev_sectors = sectors; in raid45_takeover_raid0()
8403 mddev->new_level = level; in raid45_takeover_raid0()
8404 mddev->new_layout = ALGORITHM_PARITY_N; in raid45_takeover_raid0()
8405 mddev->new_chunk_sectors = mddev->chunk_sectors; in raid45_takeover_raid0()
8406 mddev->raid_disks += 1; in raid45_takeover_raid0()
8407 mddev->delta_disks = 1; in raid45_takeover_raid0()
8409 mddev->recovery_cp = MaxSector; in raid45_takeover_raid0()
8411 return setup_conf(mddev); in raid45_takeover_raid0()
8414 static void *raid5_takeover_raid1(struct mddev *mddev) in raid5_takeover_raid1() argument
8419 if (mddev->raid_disks != 2 || in raid5_takeover_raid1()
8420 mddev->degraded > 1) in raid5_takeover_raid1()
8428 while (chunksect && (mddev->array_sectors & (chunksect-1))) in raid5_takeover_raid1()
8431 if ((chunksect<<9) < RAID5_STRIPE_SIZE((struct r5conf *)mddev->private)) in raid5_takeover_raid1()
8435 mddev->new_level = 5; in raid5_takeover_raid1()
8436 mddev->new_layout = ALGORITHM_LEFT_SYMMETRIC; in raid5_takeover_raid1()
8437 mddev->new_chunk_sectors = chunksect; in raid5_takeover_raid1()
8439 ret = setup_conf(mddev); in raid5_takeover_raid1()
8441 mddev_clear_unsupported_flags(mddev, in raid5_takeover_raid1()
8446 static void *raid5_takeover_raid6(struct mddev *mddev) in raid5_takeover_raid6() argument
8450 switch (mddev->layout) { in raid5_takeover_raid6()
8472 mddev->new_level = 5; in raid5_takeover_raid6()
8473 mddev->new_layout = new_layout; in raid5_takeover_raid6()
8474 mddev->delta_disks = -1; in raid5_takeover_raid6()
8475 mddev->raid_disks -= 1; in raid5_takeover_raid6()
8476 return setup_conf(mddev); in raid5_takeover_raid6()
8479 static int raid5_check_reshape(struct mddev *mddev) in raid5_check_reshape() argument
8486 struct r5conf *conf = mddev->private; in raid5_check_reshape()
8487 int new_chunk = mddev->new_chunk_sectors; in raid5_check_reshape()
8489 if (mddev->new_layout >= 0 && !algorithm_valid_raid5(mddev->new_layout)) in raid5_check_reshape()
8496 if (mddev->array_sectors & (new_chunk-1)) in raid5_check_reshape()
8503 if (mddev->raid_disks == 2) { in raid5_check_reshape()
8505 if (mddev->new_layout >= 0) { in raid5_check_reshape()
8506 conf->algorithm = mddev->new_layout; in raid5_check_reshape()
8507 mddev->layout = mddev->new_layout; in raid5_check_reshape()
8511 mddev->chunk_sectors = new_chunk; in raid5_check_reshape()
8513 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in raid5_check_reshape()
8514 md_wakeup_thread(mddev->thread); in raid5_check_reshape()
8516 return check_reshape(mddev); in raid5_check_reshape()
8519 static int raid6_check_reshape(struct mddev *mddev) in raid6_check_reshape() argument
8521 int new_chunk = mddev->new_chunk_sectors; in raid6_check_reshape()
8523 if (mddev->new_layout >= 0 && !algorithm_valid_raid6(mddev->new_layout)) in raid6_check_reshape()
8530 if (mddev->array_sectors & (new_chunk-1)) in raid6_check_reshape()
8536 return check_reshape(mddev); in raid6_check_reshape()
8539 static void *raid5_takeover(struct mddev *mddev) in raid5_takeover() argument
8547 if (mddev->level == 0) in raid5_takeover()
8548 return raid45_takeover_raid0(mddev, 5); in raid5_takeover()
8549 if (mddev->level == 1) in raid5_takeover()
8550 return raid5_takeover_raid1(mddev); in raid5_takeover()
8551 if (mddev->level == 4) { in raid5_takeover()
8552 mddev->new_layout = ALGORITHM_PARITY_N; in raid5_takeover()
8553 mddev->new_level = 5; in raid5_takeover()
8554 return setup_conf(mddev); in raid5_takeover()
8556 if (mddev->level == 6) in raid5_takeover()
8557 return raid5_takeover_raid6(mddev); in raid5_takeover()
8562 static void *raid4_takeover(struct mddev *mddev) in raid4_takeover() argument
8568 if (mddev->level == 0) in raid4_takeover()
8569 return raid45_takeover_raid0(mddev, 4); in raid4_takeover()
8570 if (mddev->level == 5 && in raid4_takeover()
8571 mddev->layout == ALGORITHM_PARITY_N) { in raid4_takeover()
8572 mddev->new_layout = 0; in raid4_takeover()
8573 mddev->new_level = 4; in raid4_takeover()
8574 return setup_conf(mddev); in raid4_takeover()
8581 static void *raid6_takeover(struct mddev *mddev) in raid6_takeover() argument
8589 if (mddev->pers != &raid5_personality) in raid6_takeover()
8591 if (mddev->degraded > 1) in raid6_takeover()
8593 if (mddev->raid_disks > 253) in raid6_takeover()
8595 if (mddev->raid_disks < 3) in raid6_takeover()
8598 switch (mddev->layout) { in raid6_takeover()
8620 mddev->new_level = 6; in raid6_takeover()
8621 mddev->new_layout = new_layout; in raid6_takeover()
8622 mddev->delta_disks = 1; in raid6_takeover()
8623 mddev->raid_disks += 1; in raid6_takeover()
8624 return setup_conf(mddev); in raid6_takeover()
8627 static int raid5_change_consistency_policy(struct mddev *mddev, const char *buf) in raid5_change_consistency_policy() argument
8632 err = mddev_lock(mddev); in raid5_change_consistency_policy()
8635 conf = mddev->private; in raid5_change_consistency_policy()
8637 mddev_unlock(mddev); in raid5_change_consistency_policy()
8654 mddev_suspend(mddev); in raid5_change_consistency_policy()
8656 mddev_resume(mddev); in raid5_change_consistency_policy()
8658 } else if (test_bit(MD_HAS_JOURNAL, &conf->mddev->flags) && in raid5_change_consistency_policy()
8663 rdev_for_each(rdev, mddev) in raid5_change_consistency_policy()
8670 mddev_suspend(mddev); in raid5_change_consistency_policy()
8671 clear_bit(MD_HAS_JOURNAL, &mddev->flags); in raid5_change_consistency_policy()
8672 mddev_resume(mddev); in raid5_change_consistency_policy()
8682 md_update_sb(mddev, 1); in raid5_change_consistency_policy()
8684 mddev_unlock(mddev); in raid5_change_consistency_policy()
8689 static int raid5_start(struct mddev *mddev) in raid5_start() argument
8691 struct r5conf *conf = mddev->private; in raid5_start()