Lines Matching refs:mddev

49 static void raid1_free(struct mddev *mddev, void *priv);
84 struct mddev *mddev = rdev->mddev; in wait_for_serialization() local
89 if (WARN_ON(!mddev->serial_info_pool)) in wait_for_serialization()
91 si = mempool_alloc(mddev->serial_info_pool, GFP_NOIO); in wait_for_serialization()
101 struct mddev *mddev = rdev->mddev; in remove_serial() local
110 mempool_free(si, mddev->serial_info_pool); in remove_serial()
180 if (test_bit(MD_RECOVERY_REQUESTED, &pi->mddev->recovery)) in r1buf_pool_alloc()
255 struct r1conf *conf = r1_bio->mddev->private; in free_r1bio()
263 struct r1conf *conf = r1_bio->mddev->private; in put_buf()
270 rdev_dec_pending(conf->mirrors[i].rdev, r1_bio->mddev); in put_buf()
281 struct mddev *mddev = r1_bio->mddev; in reschedule_retry() local
282 struct r1conf *conf = mddev->private; in reschedule_retry()
292 md_wakeup_thread(mddev->thread); in reschedule_retry()
313 struct r1conf *conf = r1_bio->mddev->private; in raid_end_bio_io()
339 struct r1conf *conf = r1_bio->mddev->private; in update_head_pos()
351 struct r1conf *conf = r1_bio->mddev->private; in find_bio_disk()
368 struct r1conf *conf = r1_bio->mddev->private; in raid1_end_read_request()
390 if (r1_bio->mddev->degraded == conf->raid_disks || in raid1_end_read_request()
391 (r1_bio->mddev->degraded == conf->raid_disks-1 && in raid1_end_read_request()
399 rdev_dec_pending(rdev, conf->mddev); in raid1_end_read_request()
405 mdname(conf->mddev), in raid1_end_read_request()
416 struct mddev *mddev = r1_bio->mddev; in close_write() local
426 mddev->bitmap_ops->end_behind_write(mddev); in close_write()
427 md_write_end(mddev); in close_write()
450 struct r1conf *conf = r1_bio->mddev->private; in raid1_end_write_request()
467 conf->mddev->recovery); in raid1_end_write_request()
473 md_error(r1_bio->mddev, rdev); in raid1_end_write_request()
545 } else if (rdev->mddev->serialize_policy) in raid1_end_write_request()
548 rdev_dec_pending(rdev, conf->mddev); in raid1_end_write_request()
870 if (raid1_should_read_first(conf->mddev, r1_bio->sector, in read_balance()
903 raid1_prepare_flush_writes(conf->mddev); in flush_bio_list()
1004 test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery), in raise_barrier()
1007 if (test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) { in raise_barrier()
1203 mddev_add_trace_msg(conf->mddev, "raid1 wait freeze"); in freeze_array()
1229 &r1_bio->mddev->bio_set); in alloc_behind_master_bio()
1272 struct mddev *mddev = plug->cb.data; in raid1_unplug() local
1273 struct r1conf *conf = mddev->private; in raid1_unplug()
1281 md_wakeup_thread(mddev->thread); in raid1_unplug()
1292 static void init_r1bio(struct r1bio *r1_bio, struct mddev *mddev, struct bio *bio) in init_r1bio() argument
1297 r1_bio->mddev = mddev; in init_r1bio()
1302 alloc_r1bio(struct mddev *mddev, struct bio *bio) in alloc_r1bio() argument
1304 struct r1conf *conf = mddev->private; in alloc_r1bio()
1310 init_r1bio(r1_bio, mddev, bio); in alloc_r1bio()
1314 static void raid1_read_request(struct mddev *mddev, struct bio *bio, in raid1_read_request() argument
1317 struct r1conf *conf = mddev->private; in raid1_read_request()
1342 r1_bio = alloc_r1bio(mddev, bio); in raid1_read_request()
1344 init_r1bio(r1_bio, mddev, bio); in raid1_read_request()
1356 mdname(mddev), in raid1_read_request()
1366 mdname(mddev), in raid1_read_request()
1375 mddev_add_trace_msg(mddev, "raid1 wait behind writes"); in raid1_read_request()
1376 mddev->bitmap_ops->wait_behind_writes(mddev); in raid1_read_request()
1396 md_account_bio(mddev, &bio); in raid1_read_request()
1400 &mddev->bio_set); in raid1_read_request()
1411 mddev_trace_remap(mddev, read_bio, r1_bio->sector); in raid1_read_request()
1422 static bool wait_blocked_rdev(struct mddev *mddev, struct bio *bio) in wait_blocked_rdev() argument
1424 struct r1conf *conf = mddev->private; in wait_blocked_rdev()
1445 mddev_add_trace_msg(rdev->mddev, "raid1 wait rdev %d blocked", in wait_blocked_rdev()
1448 md_wait_for_blocked_rdev(rdev, rdev->mddev); in wait_blocked_rdev()
1456 static void raid1_write_request(struct mddev *mddev, struct bio *bio, in raid1_write_request() argument
1459 struct r1conf *conf = mddev->private; in raid1_write_request()
1468 if (mddev_is_clustered(mddev) && in raid1_write_request()
1469 mddev->cluster_ops->area_resyncing(mddev, WRITE, in raid1_write_request()
1480 if (!mddev->cluster_ops->area_resyncing(mddev, WRITE, in raid1_write_request()
1500 if (!wait_blocked_rdev(mddev, bio)) { in raid1_write_request()
1505 r1_bio = alloc_r1bio(mddev, bio); in raid1_write_request()
1552 rdev_dec_pending(rdev, mddev); in raid1_write_request()
1584 if (write_behind && mddev->bitmap) in raid1_write_request()
1602 md_account_bio(mddev, &bio); in raid1_write_request()
1617 mddev->bitmap_info.max_write_behind; in raid1_write_request()
1625 err = mddev->bitmap_ops->get_stats(mddev->bitmap, &stats); in raid1_write_request()
1631 mddev->bitmap_ops->start_behind_write(mddev); in raid1_write_request()
1638 GFP_NOIO, &mddev->bio_set); in raid1_write_request()
1645 &mddev->bio_set); in raid1_write_request()
1647 if (mddev->serialize_policy) in raid1_write_request()
1657 conf->raid_disks - mddev->degraded > 1) in raid1_write_request()
1662 mddev_trace_remap(mddev, mbio, r1_bio->sector); in raid1_write_request()
1665 if (!raid1_add_bio_to_plug(mddev, mbio, raid1_unplug, disks)) { in raid1_write_request()
1669 md_wakeup_thread(mddev->thread); in raid1_write_request()
1681 rdev_dec_pending(conf->mirrors[k].rdev, mddev); in raid1_write_request()
1691 static bool raid1_make_request(struct mddev *mddev, struct bio *bio) in raid1_make_request() argument
1696 && md_flush_request(mddev, bio)) in raid1_make_request()
1710 raid1_read_request(mddev, bio, sectors, NULL); in raid1_make_request()
1712 md_write_start(mddev,bio); in raid1_make_request()
1713 raid1_write_request(mddev, bio, sectors); in raid1_make_request()
1718 static void raid1_status(struct seq_file *seq, struct mddev *mddev) in raid1_status() argument
1720 struct r1conf *conf = mddev->private; in raid1_status()
1723 lockdep_assert_held(&mddev->lock); in raid1_status()
1726 conf->raid_disks - mddev->degraded); in raid1_status()
1752 static void raid1_error(struct mddev *mddev, struct md_rdev *rdev) in raid1_error() argument
1754 struct r1conf *conf = mddev->private; in raid1_error()
1760 (conf->raid_disks - mddev->degraded) == 1) { in raid1_error()
1761 set_bit(MD_BROKEN, &mddev->flags); in raid1_error()
1763 if (!mddev->fail_last_dev) { in raid1_error()
1764 conf->recovery_disabled = mddev->recovery_disabled; in raid1_error()
1771 mddev->degraded++; in raid1_error()
1777 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in raid1_error()
1778 set_mask_bits(&mddev->sb_flags, 0, in raid1_error()
1782 mdname(mddev), rdev->bdev, in raid1_error()
1783 mdname(mddev), conf->raid_disks - mddev->degraded); in raid1_error()
1795 pr_debug(" --- wd:%d rd:%d\n", conf->raid_disks - conf->mddev->degraded, in print_conf()
1798 lockdep_assert_held(&conf->mddev->reconfig_mutex); in print_conf()
1821 static int raid1_spare_active(struct mddev *mddev) in raid1_spare_active() argument
1824 struct r1conf *conf = mddev->private; in raid1_spare_active()
1866 mddev->degraded -= count; in raid1_spare_active()
1908 rdev->mddev->recovery_disabled != conf->recovery_disabled && in raid1_remove_conf()
1909 rdev->mddev->degraded < conf->raid_disks) in raid1_remove_conf()
1919 static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev) in raid1_add_disk() argument
1921 struct r1conf *conf = mddev->private; in raid1_add_disk()
1928 if (mddev->recovery_disabled == conf->recovery_disabled) in raid1_add_disk()
1947 err = mddev_stack_new_rdev(mddev, rdev); in raid1_add_disk()
1977 static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev) in raid1_remove_disk() argument
1979 struct r1conf *conf = mddev->private; in raid1_remove_disk()
2026 err = md_integrity_register(mddev); in raid1_remove_disk()
2052 static void abort_sync_write(struct mddev *mddev, struct r1bio *r1_bio) in abort_sync_write() argument
2060 mddev->bitmap_ops->end_sync(mddev, s, &sync_blocks); in abort_sync_write()
2069 struct mddev *mddev = r1_bio->mddev; in put_sync_write_buf() local
2077 md_done_sync(mddev, s, uptodate); in put_sync_write_buf()
2086 struct mddev *mddev = r1_bio->mddev; in end_sync_write() local
2087 struct r1conf *conf = mddev->private; in end_sync_write()
2091 abort_sync_write(mddev, r1_bio); in end_sync_write()
2095 mddev->recovery); in end_sync_write()
2117 rdev->mddev->recovery); in r1_sync_page_io()
2121 md_error(rdev->mddev, rdev); in r1_sync_page_io()
2138 struct mddev *mddev = r1_bio->mddev; in fix_sync_read_error() local
2139 struct r1conf *conf = mddev->private; in fix_sync_read_error()
2151 md_error(mddev, rdev); in fix_sync_read_error()
2194 mdname(mddev), bio->bi_bdev, in fix_sync_read_error()
2226 rdev_dec_pending(rdev, mddev); in fix_sync_read_error()
2260 struct mddev *mddev = r1_bio->mddev; in process_checks() local
2261 struct r1conf *conf = mddev->private; in process_checks()
2291 rdev_dec_pending(conf->mirrors[primary].rdev, mddev); in process_checks()
2324 atomic64_add(r1_bio->sectors, &mddev->resync_mismatches); in process_checks()
2325 if (j < 0 || (test_bit(MD_RECOVERY_CHECK, &mddev->recovery) in process_checks()
2329 rdev_dec_pending(conf->mirrors[i].rdev, mddev); in process_checks()
2337 static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio) in sync_request_write() argument
2339 struct r1conf *conf = mddev->private; in sync_request_write()
2350 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) || in sync_request_write()
2352 conf->recovery_disabled = mddev->recovery_disabled; in sync_request_write()
2353 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in sync_request_write()
2354 md_done_sync(mddev, r1_bio->sectors, 0); in sync_request_write()
2360 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) in sync_request_write()
2372 !test_bit(MD_RECOVERY_SYNC, &mddev->recovery)))) in sync_request_write()
2375 abort_sync_write(mddev, r1_bio); in sync_request_write()
2406 struct mddev *mddev = conf->mddev; in fix_read_error() local
2409 if (exceed_read_errors(mddev, rdev)) { in fix_read_error()
2434 rdev_dec_pending(rdev, mddev); in fix_read_error()
2448 md_error(mddev, rdev); in fix_read_error()
2463 rdev_dec_pending(rdev, mddev); in fix_read_error()
2479 mdname(mddev), s, in fix_read_error()
2484 rdev_dec_pending(rdev, mddev); in fix_read_error()
2494 struct mddev *mddev = r1_bio->mddev; in narrow_write_error() local
2495 struct r1conf *conf = mddev->private; in narrow_write_error()
2534 GFP_NOIO, &mddev->bio_set); in narrow_write_error()
2537 GFP_NOIO, &mddev->bio_set); in narrow_write_error()
2577 md_error(conf->mddev, rdev); in handle_sync_write_finished()
2581 md_done_sync(conf->mddev, s, 1); in handle_sync_write_finished()
2595 rdev_dec_pending(rdev, conf->mddev); in handle_write_finished()
2603 md_error(conf->mddev, in handle_write_finished()
2607 conf->mddev); in handle_write_finished()
2620 md_wakeup_thread(conf->mddev->thread); in handle_write_finished()
2630 struct mddev *mddev = conf->mddev; in handle_read_error() local
2650 if (mddev->ro == 0 in handle_read_error()
2655 } else if (mddev->ro == 0 && test_bit(FailFast, &rdev->flags)) { in handle_read_error()
2656 md_error(mddev, rdev); in handle_read_error()
2661 rdev_dec_pending(rdev, conf->mddev); in handle_read_error()
2667 raid1_read_request(mddev, bio, r1_bio->sectors, r1_bio); in handle_read_error()
2673 struct mddev *mddev = thread->mddev; in raid1d() local
2676 struct r1conf *conf = mddev->private; in raid1d()
2681 md_check_recovery(mddev); in raid1d()
2684 !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags)) { in raid1d()
2687 if (!test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags)) in raid1d()
2718 mddev = r1_bio->mddev; in raid1d()
2719 conf = mddev->private; in raid1d()
2725 sync_request_write(mddev, r1_bio); in raid1d()
2735 if (mddev->sb_flags & ~(1<<MD_SB_CHANGE_PENDING)) in raid1d()
2736 md_check_recovery(mddev); in raid1d()
2779 static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr, in raid1_sync_request() argument
2782 struct r1conf *conf = mddev->private; in raid1_sync_request()
2807 if (mddev->curr_resync < max_sector) /* aborted */ in raid1_sync_request()
2808 mddev->bitmap_ops->end_sync(mddev, mddev->curr_resync, in raid1_sync_request()
2813 mddev->bitmap_ops->close_sync(mddev); in raid1_sync_request()
2816 if (mddev_is_clustered(mddev)) { in raid1_sync_request()
2823 if (mddev->bitmap == NULL && in raid1_sync_request()
2824 mddev->recovery_cp == MaxSector && in raid1_sync_request()
2825 !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) && in raid1_sync_request()
2833 if (!mddev->bitmap_ops->start_sync(mddev, sector_nr, &sync_blocks, true) && in raid1_sync_request()
2834 !conf->fullsync && !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) { in raid1_sync_request()
2851 mddev->bitmap_ops->cond_end_sync(mddev, sector_nr, in raid1_sync_request()
2852 mddev_is_clustered(mddev) && in raid1_sync_request()
2869 r1_bio->mddev = mddev; in raid1_sync_request()
2917 test_bit(MD_RECOVERY_SYNC, &mddev->recovery) && in raid1_sync_request()
2918 !test_bit(MD_RECOVERY_CHECK, &mddev->recovery)) { in raid1_sync_request()
2954 set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); in raid1_sync_request()
2964 conf->recovery_disabled = mddev->recovery_disabled; in raid1_sync_request()
2965 set_bit(MD_RECOVERY_INTR, &mddev->recovery); in raid1_sync_request()
2977 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) && read_targets > 0) in raid1_sync_request()
2994 if (max_sector > mddev->resync_max) in raid1_sync_request()
2995 max_sector = mddev->resync_max; /* Don't do IO beyond here */ in raid1_sync_request()
3008 if (!mddev->bitmap_ops->start_sync(mddev, sector_nr, in raid1_sync_request()
3011 !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) in raid1_sync_request()
3039 if (mddev_is_clustered(mddev) && in raid1_sync_request()
3041 conf->cluster_sync_low = mddev->curr_resync_completed; in raid1_sync_request()
3044 mddev->cluster_ops->resync_info_update(mddev, in raid1_sync_request()
3052 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) { in raid1_sync_request()
3075 static sector_t raid1_size(struct mddev *mddev, sector_t sectors, int raid_disks) in raid1_size() argument
3080 return mddev->dev_sectors; in raid1_size()
3083 static struct r1conf *setup_conf(struct mddev *mddev) in setup_conf() argument
3116 mddev->raid_disks, 2), in setup_conf()
3128 conf->poolinfo->raid_disks = mddev->raid_disks * 2; in setup_conf()
3138 conf->poolinfo->mddev = mddev; in setup_conf()
3142 conf->raid_disks = mddev->raid_disks; in setup_conf()
3143 rdev_for_each(rdev, mddev) { in setup_conf()
3153 conf->mddev = mddev; in setup_conf()
3161 conf->recovery_disabled = mddev->recovery_disabled - 1; in setup_conf()
3194 md_register_thread(raid1d, mddev, "raid1")); in setup_conf()
3216 static int raid1_set_limits(struct mddev *mddev) in raid1_set_limits() argument
3224 err = mddev_stack_rdev_limits(mddev, &lim, MDDEV_STACK_INTEGRITY); in raid1_set_limits()
3227 return queue_limits_set(mddev->gendisk->queue, &lim); in raid1_set_limits()
3230 static int raid1_run(struct mddev *mddev) in raid1_run() argument
3236 if (mddev->level != 1) { in raid1_run()
3238 mdname(mddev), mddev->level); in raid1_run()
3241 if (mddev->reshape_position != MaxSector) { in raid1_run()
3243 mdname(mddev)); in raid1_run()
3252 if (mddev->private == NULL) in raid1_run()
3253 conf = setup_conf(mddev); in raid1_run()
3255 conf = mddev->private; in raid1_run()
3260 if (!mddev_is_dm(mddev)) { in raid1_run()
3261 ret = raid1_set_limits(mddev); in raid1_run()
3263 if (!mddev->private) in raid1_run()
3264 raid1_free(mddev, conf); in raid1_run()
3269 mddev->degraded = 0; in raid1_run()
3274 mddev->degraded++; in raid1_run()
3278 if (conf->raid_disks - mddev->degraded < 1) { in raid1_run()
3279 md_unregister_thread(mddev, &conf->thread); in raid1_run()
3280 if (!mddev->private) in raid1_run()
3281 raid1_free(mddev, conf); in raid1_run()
3285 if (conf->raid_disks - mddev->degraded == 1) in raid1_run()
3286 mddev->recovery_cp = MaxSector; in raid1_run()
3288 if (mddev->recovery_cp != MaxSector) in raid1_run()
3290 mdname(mddev)); in raid1_run()
3292 mdname(mddev), mddev->raid_disks - mddev->degraded, in raid1_run()
3293 mddev->raid_disks); in raid1_run()
3298 rcu_assign_pointer(mddev->thread, conf->thread); in raid1_run()
3300 mddev->private = conf; in raid1_run()
3301 set_bit(MD_FAILFAST_SUPPORTED, &mddev->flags); in raid1_run()
3303 md_set_array_sectors(mddev, raid1_size(mddev, 0, 0)); in raid1_run()
3305 ret = md_integrity_register(mddev); in raid1_run()
3307 md_unregister_thread(mddev, &mddev->thread); in raid1_run()
3311 static void raid1_free(struct mddev *mddev, void *priv) in raid1_free() argument
3327 static int raid1_resize(struct mddev *mddev, sector_t sectors) in raid1_resize() argument
3336 sector_t newsize = raid1_size(mddev, sectors, 0); in raid1_resize()
3339 if (mddev->external_size && in raid1_resize()
3340 mddev->array_sectors > newsize) in raid1_resize()
3343 ret = mddev->bitmap_ops->resize(mddev, newsize, 0, false); in raid1_resize()
3347 md_set_array_sectors(mddev, newsize); in raid1_resize()
3348 if (sectors > mddev->dev_sectors && in raid1_resize()
3349 mddev->recovery_cp > mddev->dev_sectors) { in raid1_resize()
3350 mddev->recovery_cp = mddev->dev_sectors; in raid1_resize()
3351 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid1_resize()
3353 mddev->dev_sectors = sectors; in raid1_resize()
3354 mddev->resync_max_sectors = sectors; in raid1_resize()
3358 static int raid1_reshape(struct mddev *mddev) in raid1_reshape() argument
3374 struct r1conf *conf = mddev->private; in raid1_reshape()
3384 if (mddev->chunk_sectors != mddev->new_chunk_sectors || in raid1_reshape()
3385 mddev->layout != mddev->new_layout || in raid1_reshape()
3386 mddev->level != mddev->new_level) { in raid1_reshape()
3387 mddev->new_chunk_sectors = mddev->chunk_sectors; in raid1_reshape()
3388 mddev->new_layout = mddev->layout; in raid1_reshape()
3389 mddev->new_level = mddev->level; in raid1_reshape()
3393 if (!mddev_is_clustered(mddev)) in raid1_reshape()
3394 md_allow_write(mddev); in raid1_reshape()
3396 raid_disks = mddev->raid_disks + mddev->delta_disks; in raid1_reshape()
3410 newpoolinfo->mddev = mddev; in raid1_reshape()
3437 sysfs_unlink_rdev(mddev, rdev); in raid1_reshape()
3439 sysfs_unlink_rdev(mddev, rdev); in raid1_reshape()
3440 if (sysfs_link_rdev(mddev, rdev)) in raid1_reshape()
3442 mdname(mddev), rdev->raid_disk); in raid1_reshape()
3453 mddev->degraded += (raid_disks - conf->raid_disks); in raid1_reshape()
3455 conf->raid_disks = mddev->raid_disks = raid_disks; in raid1_reshape()
3456 mddev->delta_disks = 0; in raid1_reshape()
3460 set_bit(MD_RECOVERY_RECOVER, &mddev->recovery); in raid1_reshape()
3461 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in raid1_reshape()
3462 md_wakeup_thread(mddev->thread); in raid1_reshape()
3468 static void raid1_quiesce(struct mddev *mddev, int quiesce) in raid1_quiesce() argument
3470 struct r1conf *conf = mddev->private; in raid1_quiesce()
3478 static void *raid1_takeover(struct mddev *mddev) in raid1_takeover() argument
3483 if (mddev->level == 5 && mddev->raid_disks == 2) { in raid1_takeover()
3485 mddev->new_level = 1; in raid1_takeover()
3486 mddev->new_layout = 0; in raid1_takeover()
3487 mddev->new_chunk_sectors = 0; in raid1_takeover()
3488 conf = setup_conf(mddev); in raid1_takeover()
3492 mddev_clear_unsupported_flags(mddev, in raid1_takeover()