Lines Matching refs:mddev
74 static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr,
76 static void reshape_request_write(struct mddev *mddev, struct r10bio *r10_bio);
144 if (test_bit(MD_RECOVERY_SYNC, &conf->mddev->recovery) || in r10buf_pool_alloc()
145 test_bit(MD_RECOVERY_RESHAPE, &conf->mddev->recovery)) in r10buf_pool_alloc()
191 &conf->mddev->recovery)) { in r10buf_pool_alloc()
277 struct r10conf *conf = r10_bio->mddev->private; in free_r10bio()
285 struct r10conf *conf = r10_bio->mddev->private; in put_buf()
301 struct mddev *mddev = r10_bio->mddev; in reschedule_retry() local
302 struct r10conf *conf = mddev->private; in reschedule_retry()
312 md_wakeup_thread(mddev->thread); in reschedule_retry()
323 struct r10conf *conf = r10_bio->mddev->private; in raid_end_bio_io()
343 struct r10conf *conf = r10_bio->mddev->private; in update_head_pos()
382 struct r10conf *conf = r10_bio->mddev->private; in raid10_end_read_request()
414 rdev_dec_pending(rdev, conf->mddev); in raid10_end_read_request()
420 mdname(conf->mddev), in raid10_end_read_request()
430 struct mddev *mddev = r10_bio->mddev; in close_write() local
432 md_write_end(mddev); in close_write()
455 struct r10conf *conf = r10_bio->mddev->private; in raid10_end_write_request()
480 md_error(rdev->mddev, rdev); in raid10_end_write_request()
485 &rdev->mddev->recovery); in raid10_end_write_request()
490 md_error(rdev->mddev, rdev); in raid10_end_write_request()
548 rdev_dec_pending(rdev, conf->mddev); in raid10_end_write_request()
647 conf->mddev->reshape_backwards)) { in raid10_find_phys()
746 if (raid1_should_read_first(conf->mddev, this_sector, sectors)) in read_balance()
884 raid1_prepare_flush_writes(conf->mddev); in flush_pending_writes()
971 thread = rcu_dereference_protected(conf->mddev->thread, true); in stop_waiting_barrier()
1016 mddev_add_trace_msg(conf->mddev, "raid10 wait barrier"); in wait_barrier()
1074 if (!test_bit(MD_RECOVERY_RESHAPE, &rdev->mddev->recovery) || in choose_data_offset()
1084 struct mddev *mddev = plug->cb.data; in raid10_unplug() local
1085 struct r10conf *conf = mddev->private; in raid10_unplug()
1093 md_wakeup_thread(mddev->thread); in raid10_unplug()
1100 raid1_prepare_flush_writes(mddev); in raid10_unplug()
1119 static bool regular_request_wait(struct mddev *mddev, struct r10conf *conf, in regular_request_wait() argument
1127 while (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) && in regular_request_wait()
1135 mddev_add_trace_msg(conf->mddev, "raid10 wait reshape"); in regular_request_wait()
1145 static void raid10_read_request(struct mddev *mddev, struct bio *bio, in raid10_read_request() argument
1148 struct r10conf *conf = mddev->private; in raid10_read_request()
1184 if (!regular_request_wait(mddev, conf, bio, r10_bio->sectors)) in raid10_read_request()
1190 mdname(mddev), b, in raid10_read_request()
1198 mdname(mddev), in raid10_read_request()
1219 md_account_bio(mddev, &bio); in raid10_read_request()
1222 read_bio = bio_alloc_clone(rdev->bdev, bio, gfp, &mddev->bio_set); in raid10_read_request()
1234 mddev_trace_remap(mddev, read_bio, r10_bio->sector); in raid10_read_request()
1244 static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio, in raid10_write_one_disk() argument
1249 struct r10conf *conf = mddev->private; in raid10_write_one_disk()
1257 mbio = bio_alloc_clone(rdev->bdev, bio, GFP_NOIO, &mddev->bio_set); in raid10_write_one_disk()
1271 mddev_trace_remap(mddev, mbio, r10_bio->sector); in raid10_write_one_disk()
1277 if (!raid1_add_bio_to_plug(mddev, mbio, raid10_unplug, conf->copies)) { in raid10_write_one_disk()
1281 md_wakeup_thread(mddev->thread); in raid10_write_one_disk()
1285 static void wait_blocked_dev(struct mddev *mddev, struct r10bio *r10_bio) in wait_blocked_dev() argument
1287 struct r10conf *conf = mddev->private; in wait_blocked_dev()
1332 mddev_add_trace_msg(conf->mddev, in wait_blocked_dev()
1335 md_wait_for_blocked_rdev(blocked_rdev, mddev); in wait_blocked_dev()
1341 static void raid10_write_request(struct mddev *mddev, struct bio *bio, in raid10_write_request() argument
1344 struct r10conf *conf = mddev->private; in raid10_write_request()
1350 if ((mddev_is_clustered(mddev) && in raid10_write_request()
1351 mddev->cluster_ops->area_resyncing(mddev, WRITE, in raid10_write_request()
1363 if (!mddev->cluster_ops->area_resyncing(mddev, WRITE, in raid10_write_request()
1372 if (!regular_request_wait(mddev, conf, bio, sectors)) in raid10_write_request()
1374 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) && in raid10_write_request()
1375 (mddev->reshape_backwards in raid10_write_request()
1381 mddev->reshape_position = conf->reshape_progress; in raid10_write_request()
1382 set_mask_bits(&mddev->sb_flags, 0, in raid10_write_request()
1384 md_wakeup_thread(mddev->thread); in raid10_write_request()
1390 mddev_add_trace_msg(conf->mddev, in raid10_write_request()
1392 wait_event(mddev->sb_wait, in raid10_write_request()
1393 !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags)); in raid10_write_request()
1395 conf->reshape_safe = mddev->reshape_position; in raid10_write_request()
1411 wait_blocked_dev(mddev, r10_bio); in raid10_write_request()
1497 md_account_bio(mddev, &bio); in raid10_write_request()
1503 raid10_write_one_disk(mddev, r10_bio, bio, false, i); in raid10_write_request()
1505 raid10_write_one_disk(mddev, r10_bio, bio, true, i); in raid10_write_request()
1516 rdev_dec_pending(rdev, mddev); in raid10_write_request()
1520 rdev_dec_pending(rrdev, mddev); in raid10_write_request()
1530 static void __make_request(struct mddev *mddev, struct bio *bio, int sectors) in __make_request() argument
1532 struct r10conf *conf = mddev->private; in __make_request()
1540 r10_bio->mddev = mddev; in __make_request()
1548 raid10_read_request(mddev, bio, r10_bio, true); in __make_request()
1550 raid10_write_request(mddev, bio, r10_bio); in __make_request()
1555 struct r10conf *conf = r10bio->mddev->private; in raid_end_discard_bio()
1567 md_write_end(r10bio->mddev); in raid_end_discard_bio()
1578 struct r10conf *conf = r10_bio->mddev->private; in raid10_end_discard_request()
1594 rdev_dec_pending(rdev, conf->mddev); in raid10_end_discard_request()
1603 static int raid10_handle_discard(struct mddev *mddev, struct bio *bio) in raid10_handle_discard() argument
1605 struct r10conf *conf = mddev->private; in raid10_handle_discard()
1624 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) in raid10_handle_discard()
1636 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) in raid10_handle_discard()
1724 r10_bio->mddev = mddev; in raid10_handle_discard()
1728 wait_blocked_dev(mddev, r10_bio); in raid10_handle_discard()
1738 md_account_bio(mddev, &bio); in raid10_handle_discard()
1794 dev_start = (first_stripe_index + 1) * mddev->chunk_sectors; in raid10_handle_discard()
1796 dev_start = first_stripe_index * mddev->chunk_sectors; in raid10_handle_discard()
1801 dev_end = (last_stripe_index + 1) * mddev->chunk_sectors; in raid10_handle_discard()
1803 dev_end = last_stripe_index * mddev->chunk_sectors; in raid10_handle_discard()
1816 &mddev->bio_set); in raid10_handle_discard()
1822 md_submit_discard_bio(mddev, rdev, mbio, in raid10_handle_discard()
1830 &mddev->bio_set); in raid10_handle_discard()
1836 md_submit_discard_bio(mddev, rrdev, rbio, in raid10_handle_discard()
1862 static bool raid10_make_request(struct mddev *mddev, struct bio *bio) in raid10_make_request() argument
1864 struct r10conf *conf = mddev->private; in raid10_make_request()
1870 && md_flush_request(mddev, bio)) in raid10_make_request()
1873 md_write_start(mddev, bio); in raid10_make_request()
1876 if (!raid10_handle_discard(mddev, bio)) in raid10_make_request()
1891 __make_request(mddev, bio, sectors); in raid10_make_request()
1898 static void raid10_status(struct seq_file *seq, struct mddev *mddev) in raid10_status() argument
1900 struct r10conf *conf = mddev->private; in raid10_status()
1903 lockdep_assert_held(&mddev->lock); in raid10_status()
1906 seq_printf(seq, " %dK chunks", mddev->chunk_sectors / 2); in raid10_status()
1918 conf->geo.raid_disks - mddev->degraded); in raid10_status()
1992 static void raid10_error(struct mddev *mddev, struct md_rdev *rdev) in raid10_error() argument
1994 struct r10conf *conf = mddev->private; in raid10_error()
2000 set_bit(MD_BROKEN, &mddev->flags); in raid10_error()
2002 if (!mddev->fail_last_dev) { in raid10_error()
2008 mddev->degraded++; in raid10_error()
2010 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in raid10_error()
2013 set_mask_bits(&mddev->sb_flags, 0, in raid10_error()
2018 mdname(mddev), rdev->bdev, in raid10_error()
2019 mdname(mddev), conf->geo.raid_disks - mddev->degraded); in raid10_error()
2032 pr_debug(" --- wd:%d rd:%d\n", conf->geo.raid_disks - conf->mddev->degraded, in print_conf()
2035 lockdep_assert_held(&conf->mddev->reconfig_mutex); in print_conf()
2054 static int raid10_spare_active(struct mddev *mddev) in raid10_spare_active() argument
2057 struct r10conf *conf = mddev->private; in raid10_spare_active()
2095 mddev->degraded -= count; in raid10_spare_active()
2102 static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev) in raid10_add_disk() argument
2104 struct r10conf *conf = mddev->private; in raid10_add_disk()
2111 if (mddev->recovery_cp < MaxSector) in raid10_add_disk()
2130 if (p->recovery_disabled == mddev->recovery_disabled) in raid10_add_disk()
2139 err = mddev_stack_new_rdev(mddev, rdev); in raid10_add_disk()
2143 p->recovery_disabled = mddev->recovery_disabled - 1; in raid10_add_disk()
2157 err = mddev_stack_new_rdev(mddev, rdev); in raid10_add_disk()
2168 static int raid10_remove_disk(struct mddev *mddev, struct md_rdev *rdev) in raid10_remove_disk() argument
2170 struct r10conf *conf = mddev->private; in raid10_remove_disk()
2177 if (unlikely(number >= mddev->raid_disks)) in raid10_remove_disk()
2196 mddev->recovery_disabled != p->recovery_disabled && in raid10_remove_disk()
2212 err = md_integrity_register(mddev); in raid10_remove_disk()
2222 struct r10conf *conf = r10_bio->mddev->private; in __end_sync_read()
2236 rdev_dec_pending(conf->mirrors[d].rdev, conf->mddev); in __end_sync_read()
2249 struct r10conf *conf = r10_bio->mddev->private; in end_sync_read()
2265 struct mddev *mddev = r10_bio->mddev; in end_sync_request() local
2276 md_done_sync(mddev, s, 1); in end_sync_request()
2293 struct mddev *mddev = r10_bio->mddev; in end_sync_write() local
2294 struct r10conf *conf = mddev->private; in end_sync_write()
2308 md_error(mddev, rdev); in end_sync_write()
2313 &rdev->mddev->recovery); in end_sync_write()
2321 rdev_dec_pending(rdev, mddev); in end_sync_write()
2342 static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio) in sync_request_write() argument
2344 struct r10conf *conf = mddev->private; in sync_request_write()
2401 atomic64_add(r10_bio->sectors, &mddev->resync_mismatches); in sync_request_write()
2402 if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery)) in sync_request_write()
2407 md_error(rdev->mddev, rdev); in sync_request_write()
2458 md_done_sync(mddev, r10_bio->sectors, 1); in sync_request_write()
2482 struct mddev *mddev = r10_bio->mddev; in fix_recovery_read_error() local
2483 struct r10conf *conf = mddev->private; in fix_recovery_read_error()
2521 &rdev->mddev->recovery); in fix_recovery_read_error()
2539 mdname(mddev)); in fix_recovery_read_error()
2542 = mddev->recovery_disabled; in fix_recovery_read_error()
2544 &mddev->recovery); in fix_recovery_read_error()
2556 static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio) in recovery_request_write() argument
2558 struct r10conf *conf = mddev->private; in recovery_request_write()
2610 &rdev->mddev->recovery); in r10_sync_page_io()
2614 md_error(rdev->mddev, rdev); in r10_sync_page_io()
2626 static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10bio *r10_bio) in fix_read_error() argument
2643 if (exceed_read_errors(mddev, rdev)) { in fix_read_error()
2673 rdev_dec_pending(rdev, mddev); in fix_read_error()
2695 md_error(mddev, rdev); in fix_read_error()
2723 mdname(mddev), s, in fix_read_error()
2730 mdname(mddev), in fix_read_error()
2733 rdev_dec_pending(rdev, mddev); in fix_read_error()
2755 mdname(mddev), s, in fix_read_error()
2761 mdname(mddev), in fix_read_error()
2766 mdname(mddev), s, in fix_read_error()
2774 rdev_dec_pending(rdev, mddev); in fix_read_error()
2785 struct mddev *mddev = r10_bio->mddev; in narrow_write_error() local
2786 struct r10conf *conf = mddev->private; in narrow_write_error()
2822 &mddev->bio_set); in narrow_write_error()
2843 static void handle_read_error(struct mddev *mddev, struct r10bio *r10_bio) in handle_read_error() argument
2847 struct r10conf *conf = mddev->private; in handle_read_error()
2862 if (mddev->ro) in handle_read_error()
2866 fix_read_error(conf, mddev, r10_bio); in handle_read_error()
2869 md_error(mddev, rdev); in handle_read_error()
2871 rdev_dec_pending(rdev, mddev); in handle_read_error()
2873 raid10_read_request(mddev, r10_bio->master_bio, r10_bio, false); in handle_read_error()
2910 md_error(conf->mddev, rdev); in handle_write_completed()
2927 md_error(conf->mddev, rdev); in handle_write_completed()
2942 rdev_dec_pending(rdev, conf->mddev); in handle_write_completed()
2946 md_error(conf->mddev, rdev); in handle_write_completed()
2947 rdev_dec_pending(rdev, conf->mddev); in handle_write_completed()
2956 rdev_dec_pending(rdev, conf->mddev); in handle_write_completed()
2969 md_wakeup_thread(conf->mddev->thread); in handle_write_completed()
2981 struct mddev *mddev = thread->mddev; in raid10d() local
2984 struct r10conf *conf = mddev->private; in raid10d()
2988 md_check_recovery(mddev); in raid10d()
2991 !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags)) { in raid10d()
2994 if (!test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags)) { in raid10d()
3028 mddev = r10_bio->mddev; in raid10d()
3029 conf = mddev->private; in raid10d()
3034 reshape_request_write(mddev, r10_bio); in raid10d()
3036 sync_request_write(mddev, r10_bio); in raid10d()
3038 recovery_request_write(mddev, r10_bio); in raid10d()
3040 handle_read_error(mddev, r10_bio); in raid10d()
3045 if (mddev->sb_flags & ~(1<<MD_SB_CHANGE_PENDING)) in raid10d()
3046 md_check_recovery(mddev); in raid10d()
3077 if (test_bit(MD_RECOVERY_SYNC, &conf->mddev->recovery) || in raid10_alloc_init_r10buf()
3078 test_bit(MD_RECOVERY_RESHAPE, &conf->mddev->recovery)) in raid10_alloc_init_r10buf()
3124 window_size = (chunks + extra_chunk) * conf->mddev->chunk_sectors; in raid10_set_cluster_sync_high()
3167 static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, in raid10_sync_request() argument
3170 struct r10conf *conf = mddev->private; in raid10_sync_request()
3187 if (mddev->bitmap == NULL && in raid10_sync_request()
3188 mddev->recovery_cp == MaxSector && in raid10_sync_request()
3189 mddev->reshape_position == MaxSector && in raid10_sync_request()
3190 !test_bit(MD_RECOVERY_SYNC, &mddev->recovery) && in raid10_sync_request()
3191 !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) && in raid10_sync_request()
3192 !test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) && in raid10_sync_request()
3195 return mddev->dev_sectors - sector_nr; in raid10_sync_request()
3216 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) { in raid10_sync_request()
3222 if (mddev->curr_resync < max_sector) { /* aborted */ in raid10_sync_request()
3223 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) in raid10_sync_request()
3224 mddev->bitmap_ops->end_sync(mddev, in raid10_sync_request()
3225 mddev->curr_resync, in raid10_sync_request()
3229 raid10_find_virt(conf, mddev->curr_resync, i); in raid10_sync_request()
3231 mddev->bitmap_ops->end_sync(mddev, sect, in raid10_sync_request()
3236 if ((!mddev->bitmap || conf->fullsync) in raid10_sync_request()
3238 && test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { in raid10_sync_request()
3252 mddev->bitmap_ops->close_sync(mddev); in raid10_sync_request()
3258 if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) in raid10_sync_request()
3259 return reshape_request(mddev, sector_nr, skipped); in raid10_sync_request()
3262 pr_err("md/raid10:%s: %s fails\n", mdname(mddev), in raid10_sync_request()
3263 test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ? "resync" : "recovery"); in raid10_sync_request()
3265 !test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { in raid10_sync_request()
3271 mddev->recovery_disabled; in raid10_sync_request()
3282 if (max_sector > mddev->resync_max) in raid10_sync_request()
3283 max_sector = mddev->resync_max; /* Don't do IO beyond here */ in raid10_sync_request()
3315 if (!test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { in raid10_sync_request()
3345 if (sect >= mddev->resync_max_sectors) in raid10_sync_request()
3354 must_sync = mddev->bitmap_ops->start_sync(mddev, sect, in raid10_sync_request()
3381 r10_bio->mddev = mddev; in raid10_sync_request()
3399 must_sync = mddev->bitmap_ops->start_sync(mddev, sect, in raid10_sync_request()
3513 &mddev->recovery)) in raid10_sync_request()
3515 mdname(mddev)); in raid10_sync_request()
3517 = mddev->recovery_disabled; in raid10_sync_request()
3526 rdev_dec_pending(mrdev, mddev); in raid10_sync_request()
3528 rdev_dec_pending(mreplace, mddev); in raid10_sync_request()
3532 rdev_dec_pending(mrdev, mddev); in raid10_sync_request()
3534 rdev_dec_pending(mreplace, mddev); in raid10_sync_request()
3573 mddev->bitmap_ops->cond_end_sync(mddev, sector_nr, in raid10_sync_request()
3574 mddev_is_clustered(mddev) && in raid10_sync_request()
3577 if (!mddev->bitmap_ops->start_sync(mddev, sector_nr, in raid10_sync_request()
3579 mddev->degraded) && in raid10_sync_request()
3581 &mddev->recovery)) { in raid10_sync_request()
3591 r10_bio->mddev = mddev; in raid10_sync_request()
3668 mddev); in raid10_sync_request()
3673 mddev); in raid10_sync_request()
3705 if (mddev_is_clustered(mddev) && in raid10_sync_request()
3706 test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { in raid10_sync_request()
3709 conf->cluster_sync_low = mddev->curr_resync_completed; in raid10_sync_request()
3712 mddev->cluster_ops->resync_info_update(mddev, in raid10_sync_request()
3716 } else if (mddev_is_clustered(mddev)) { in raid10_sync_request()
3736 mddev->curr_resync_completed, i); in raid10_sync_request()
3745 mddev->cluster_ops->resync_info_update(mddev, in raid10_sync_request()
3770 md_done_sync(mddev, sectors_skipped, 1); in raid10_sync_request()
3788 raid10_size(struct mddev *mddev, sector_t sectors, int raid_disks) in raid10_size() argument
3791 struct r10conf *conf = mddev->private; in raid10_size()
3838 static int setup_geo(struct geom *geo, struct mddev *mddev, enum geo_type new) in setup_geo() argument
3844 layout = mddev->layout; in setup_geo()
3845 chunk = mddev->chunk_sectors; in setup_geo()
3846 disks = mddev->raid_disks - mddev->delta_disks; in setup_geo()
3849 layout = mddev->new_layout; in setup_geo()
3850 chunk = mddev->new_chunk_sectors; in setup_geo()
3851 disks = mddev->raid_disks; in setup_geo()
3856 layout = mddev->new_layout; in setup_geo()
3857 chunk = mddev->new_chunk_sectors; in setup_geo()
3858 disks = mddev->raid_disks + mddev->delta_disks; in setup_geo()
3908 static struct r10conf *setup_conf(struct mddev *mddev) in setup_conf() argument
3915 copies = setup_geo(&geo, mddev, geo_new); in setup_conf()
3919 mdname(mddev), PAGE_SIZE); in setup_conf()
3923 if (copies < 2 || copies > mddev->raid_disks) { in setup_conf()
3925 mdname(mddev), mddev->new_layout); in setup_conf()
3935 conf->mirrors = kcalloc(mddev->raid_disks + max(0, -mddev->delta_disks), in setup_conf()
3956 calc_sectors(conf, mddev->dev_sectors); in setup_conf()
3957 if (mddev->reshape_position == MaxSector) { in setup_conf()
3961 if (setup_geo(&conf->prev, mddev, geo_old) != conf->copies) { in setup_conf()
3965 conf->reshape_progress = mddev->reshape_position; in setup_conf()
3983 md_register_thread(raid10d, mddev, "raid10")); in setup_conf()
3987 conf->mddev = mddev; in setup_conf()
4004 static int raid10_set_queue_limits(struct mddev *mddev) in raid10_set_queue_limits() argument
4006 struct r10conf *conf = mddev->private; in raid10_set_queue_limits()
4012 lim.io_min = mddev->chunk_sectors << 9; in raid10_set_queue_limits()
4015 err = mddev_stack_rdev_limits(mddev, &lim, MDDEV_STACK_INTEGRITY); in raid10_set_queue_limits()
4018 return queue_limits_set(mddev->gendisk->queue, &lim); in raid10_set_queue_limits()
4021 static int raid10_run(struct mddev *mddev) in raid10_run() argument
4032 if (mddev->private == NULL) { in raid10_run()
4033 conf = setup_conf(mddev); in raid10_run()
4036 mddev->private = conf; in raid10_run()
4038 conf = mddev->private; in raid10_run()
4042 rcu_assign_pointer(mddev->thread, conf->thread); in raid10_run()
4045 if (mddev_is_clustered(conf->mddev)) { in raid10_run()
4048 fc = (mddev->layout >> 8) & 255; in raid10_run()
4049 fo = mddev->layout & (1<<16); in raid10_run()
4057 rdev_for_each(rdev, mddev) { in raid10_run()
4078 if (!mddev->reshape_backwards) in raid10_run()
4089 if (!mddev_is_dm(conf->mddev)) { in raid10_run()
4090 int err = raid10_set_queue_limits(mddev); in raid10_run()
4101 mdname(mddev)); in raid10_run()
4115 mddev->degraded = 0; in raid10_run()
4133 mddev->degraded++; in raid10_run()
4145 disk->recovery_disabled = mddev->recovery_disabled - 1; in raid10_run()
4148 if (mddev->recovery_cp != MaxSector) in raid10_run()
4150 mdname(mddev)); in raid10_run()
4152 mdname(mddev), conf->geo.raid_disks - mddev->degraded, in raid10_run()
4157 mddev->dev_sectors = conf->dev_sectors; in raid10_run()
4158 size = raid10_size(mddev, 0, 0); in raid10_run()
4159 md_set_array_sectors(mddev, size); in raid10_run()
4160 mddev->resync_max_sectors = size; in raid10_run()
4161 set_bit(MD_FAILFAST_SUPPORTED, &mddev->flags); in raid10_run()
4163 if (md_integrity_register(mddev)) in raid10_run()
4181 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); in raid10_run()
4182 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); in raid10_run()
4183 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); in raid10_run()
4184 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid10_run()
4190 md_unregister_thread(mddev, &mddev->thread); in raid10_run()
4192 mddev->private = NULL; in raid10_run()
4197 static void raid10_free(struct mddev *mddev, void *priv) in raid10_free() argument
4202 static void raid10_quiesce(struct mddev *mddev, int quiesce) in raid10_quiesce() argument
4204 struct r10conf *conf = mddev->private; in raid10_quiesce()
4212 static int raid10_resize(struct mddev *mddev, sector_t sectors) in raid10_resize() argument
4226 struct r10conf *conf = mddev->private; in raid10_resize()
4230 if (mddev->reshape_position != MaxSector) in raid10_resize()
4236 oldsize = raid10_size(mddev, 0, 0); in raid10_resize()
4237 size = raid10_size(mddev, sectors, 0); in raid10_resize()
4238 if (mddev->external_size && in raid10_resize()
4239 mddev->array_sectors > size) in raid10_resize()
4242 ret = mddev->bitmap_ops->resize(mddev, size, 0, false); in raid10_resize()
4246 md_set_array_sectors(mddev, size); in raid10_resize()
4247 if (sectors > mddev->dev_sectors && in raid10_resize()
4248 mddev->recovery_cp > oldsize) { in raid10_resize()
4249 mddev->recovery_cp = oldsize; in raid10_resize()
4250 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid10_resize()
4253 mddev->dev_sectors = conf->dev_sectors; in raid10_resize()
4254 mddev->resync_max_sectors = size; in raid10_resize()
4258 static void *raid10_takeover_raid0(struct mddev *mddev, sector_t size, int devs) in raid10_takeover_raid0() argument
4263 if (mddev->degraded > 0) { in raid10_takeover_raid0()
4265 mdname(mddev)); in raid10_takeover_raid0()
4271 mddev->new_level = 10; in raid10_takeover_raid0()
4273 mddev->new_layout = (1<<8) + 2; in raid10_takeover_raid0()
4274 mddev->new_chunk_sectors = mddev->chunk_sectors; in raid10_takeover_raid0()
4275 mddev->delta_disks = mddev->raid_disks; in raid10_takeover_raid0()
4276 mddev->raid_disks *= 2; in raid10_takeover_raid0()
4278 mddev->recovery_cp = MaxSector; in raid10_takeover_raid0()
4279 mddev->dev_sectors = size; in raid10_takeover_raid0()
4281 conf = setup_conf(mddev); in raid10_takeover_raid0()
4283 rdev_for_each(rdev, mddev) in raid10_takeover_raid0()
4293 static void *raid10_takeover(struct mddev *mddev) in raid10_takeover() argument
4300 if (mddev->level == 0) { in raid10_takeover()
4302 raid0_conf = mddev->private; in raid10_takeover()
4305 mdname(mddev)); in raid10_takeover()
4308 return raid10_takeover_raid0(mddev, in raid10_takeover()
4315 static int raid10_check_reshape(struct mddev *mddev) in raid10_check_reshape() argument
4331 struct r10conf *conf = mddev->private; in raid10_check_reshape()
4337 if (setup_geo(&geo, mddev, geo_start) != conf->copies) in raid10_check_reshape()
4344 if (mddev->array_sectors & geo.chunk_mask) in raid10_check_reshape()
4353 if (mddev->delta_disks > 0) { in raid10_check_reshape()
4356 kcalloc(mddev->raid_disks + mddev->delta_disks, in raid10_check_reshape()
4420 static int raid10_start_reshape(struct mddev *mddev) in raid10_start_reshape() argument
4436 struct r10conf *conf = mddev->private; in raid10_start_reshape()
4441 if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) in raid10_start_reshape()
4444 if (setup_geo(&new, mddev, geo_start) != conf->copies) in raid10_start_reshape()
4452 rdev_for_each(rdev, mddev) { in raid10_start_reshape()
4459 if (!mddev->reshape_backwards) in raid10_start_reshape()
4472 if (spares < mddev->delta_disks) in raid10_start_reshape()
4486 setup_geo(&conf->geo, mddev, geo_start); in raid10_start_reshape()
4488 if (mddev->reshape_backwards) { in raid10_start_reshape()
4489 sector_t size = raid10_size(mddev, 0, 0); in raid10_start_reshape()
4490 if (size < mddev->array_sectors) { in raid10_start_reshape()
4493 mdname(mddev)); in raid10_start_reshape()
4496 mddev->resync_max_sectors = size; in raid10_start_reshape()
4503 if (mddev->delta_disks && mddev->bitmap) { in raid10_start_reshape()
4507 oldsize = raid10_size(mddev, 0, 0); in raid10_start_reshape()
4508 newsize = raid10_size(mddev, 0, conf->geo.raid_disks); in raid10_start_reshape()
4510 if (!mddev_is_clustered(mddev)) { in raid10_start_reshape()
4511 ret = mddev->bitmap_ops->resize(mddev, newsize, 0, false); in raid10_start_reshape()
4518 rdev_for_each(rdev, mddev) { in raid10_start_reshape()
4533 ret = mddev->bitmap_ops->resize(mddev, newsize, 0, false); in raid10_start_reshape()
4537 ret = mddev->cluster_ops->resize_bitmaps(mddev, newsize, oldsize); in raid10_start_reshape()
4539 mddev->bitmap_ops->resize(mddev, oldsize, 0, false); in raid10_start_reshape()
4544 if (mddev->delta_disks > 0) { in raid10_start_reshape()
4545 rdev_for_each(rdev, mddev) in raid10_start_reshape()
4548 if (raid10_add_disk(mddev, rdev) == 0) { in raid10_start_reshape()
4556 sysfs_link_rdev(mddev, rdev); in raid10_start_reshape()
4569 mddev->degraded = calc_degraded(conf); in raid10_start_reshape()
4571 mddev->raid_disks = conf->geo.raid_disks; in raid10_start_reshape()
4572 mddev->reshape_position = conf->reshape_progress; in raid10_start_reshape()
4573 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in raid10_start_reshape()
4575 clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); in raid10_start_reshape()
4576 clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); in raid10_start_reshape()
4577 clear_bit(MD_RECOVERY_DONE, &mddev->recovery); in raid10_start_reshape()
4578 set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); in raid10_start_reshape()
4579 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid10_start_reshape()
4585 mddev->recovery = 0; in raid10_start_reshape()
4588 mddev->raid_disks = conf->geo.raid_disks; in raid10_start_reshape()
4589 rdev_for_each(rdev, mddev) in raid10_start_reshape()
4594 mddev->reshape_position = MaxSector; in raid10_start_reshape()
4630 static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr, in reshape_request() argument
4670 struct r10conf *conf = mddev->private; in reshape_request()
4685 if (mddev->reshape_backwards && in reshape_request()
4686 conf->reshape_progress < raid10_size(mddev, 0, 0)) { in reshape_request()
4687 sector_nr = (raid10_size(mddev, 0, 0) in reshape_request()
4689 } else if (!mddev->reshape_backwards && in reshape_request()
4693 mddev->curr_resync_completed = sector_nr; in reshape_request()
4694 sysfs_notify_dirent_safe(mddev->sysfs_completed); in reshape_request()
4704 if (mddev->reshape_backwards) { in reshape_request()
4754 mddev->reshape_position = conf->reshape_progress; in reshape_request()
4755 if (mddev->reshape_backwards) in reshape_request()
4756 mddev->curr_resync_completed = raid10_size(mddev, 0, 0) in reshape_request()
4759 mddev->curr_resync_completed = conf->reshape_progress; in reshape_request()
4761 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in reshape_request()
4762 md_wakeup_thread(mddev->thread); in reshape_request()
4763 wait_event(mddev->sb_wait, mddev->sb_flags == 0 || in reshape_request()
4764 test_bit(MD_RECOVERY_INTR, &mddev->recovery)); in reshape_request()
4765 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) { in reshape_request()
4769 conf->reshape_safe = mddev->reshape_position; in reshape_request()
4780 r10_bio->mddev = mddev; in reshape_request()
4793 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in reshape_request()
4798 GFP_KERNEL, &mddev->bio_set); in reshape_request()
4810 if (mddev_is_clustered(mddev) && conf->cluster_sync_high <= sector_nr) { in reshape_request()
4828 mddev->cluster_ops->resync_info_update(mddev, conf->cluster_sync_low, in reshape_request()
4896 if (mddev->reshape_backwards) in reshape_request()
4905 static int handle_reshape_read_error(struct mddev *mddev,
4907 static void reshape_request_write(struct mddev *mddev, struct r10bio *r10_bio) in reshape_request_write() argument
4914 struct r10conf *conf = mddev->private; in reshape_request_write()
4918 if (handle_reshape_read_error(mddev, r10_bio) < 0) { in reshape_request_write()
4920 md_done_sync(mddev, r10_bio->sectors, 0); in reshape_request_write()
4953 if (test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) in end_reshape()
4958 md_finish_reshape(conf->mddev); in end_reshape()
4964 mddev_update_io_opt(conf->mddev, raid10_nr_stripes(conf)); in end_reshape()
4968 static void raid10_update_reshape_pos(struct mddev *mddev) in raid10_update_reshape_pos() argument
4970 struct r10conf *conf = mddev->private; in raid10_update_reshape_pos()
4973 mddev->cluster_ops->resync_info_get(mddev, &lo, &hi); in raid10_update_reshape_pos()
4974 if (((mddev->reshape_position <= hi) && (mddev->reshape_position >= lo)) in raid10_update_reshape_pos()
4975 || mddev->reshape_position == MaxSector) in raid10_update_reshape_pos()
4976 conf->reshape_progress = mddev->reshape_position; in raid10_update_reshape_pos()
4981 static int handle_reshape_read_error(struct mddev *mddev, in handle_reshape_read_error() argument
4986 struct r10conf *conf = mddev->private; in handle_reshape_read_error()
4994 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in handle_reshape_read_error()
5028 rdev_dec_pending(rdev, mddev); in handle_reshape_read_error()
5041 &mddev->recovery); in handle_reshape_read_error()
5055 struct mddev *mddev = r10_bio->mddev; in end_reshape_write() local
5056 struct r10conf *conf = mddev->private; in end_reshape_write()
5068 md_error(mddev, rdev); in end_reshape_write()
5071 rdev_dec_pending(rdev, mddev); in end_reshape_write()
5079 md_done_sync(r10_bio->mddev, r10_bio->sectors, 1); in end_reshape_request()
5084 static void raid10_finish_reshape(struct mddev *mddev) in raid10_finish_reshape() argument
5086 struct r10conf *conf = mddev->private; in raid10_finish_reshape()
5088 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) in raid10_finish_reshape()
5091 if (mddev->delta_disks > 0) { in raid10_finish_reshape()
5092 if (mddev->recovery_cp > mddev->resync_max_sectors) { in raid10_finish_reshape()
5093 mddev->recovery_cp = mddev->resync_max_sectors; in raid10_finish_reshape()
5094 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid10_finish_reshape()
5096 mddev->resync_max_sectors = mddev->array_sectors; in raid10_finish_reshape()
5100 d < conf->geo.raid_disks - mddev->delta_disks; in raid10_finish_reshape()
5110 mddev->layout = mddev->new_layout; in raid10_finish_reshape()
5111 mddev->chunk_sectors = 1 << conf->geo.chunk_shift; in raid10_finish_reshape()
5112 mddev->reshape_position = MaxSector; in raid10_finish_reshape()
5113 mddev->delta_disks = 0; in raid10_finish_reshape()
5114 mddev->reshape_backwards = 0; in raid10_finish_reshape()