Lines Matching refs:rdev
595 struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev); in calc_degraded() local
596 if (rdev && test_bit(Faulty, &rdev->flags)) in calc_degraded()
597 rdev = rcu_dereference(conf->disks[i].replacement); in calc_degraded()
598 if (!rdev || test_bit(Faulty, &rdev->flags)) in calc_degraded()
600 else if (test_bit(In_sync, &rdev->flags)) in calc_degraded()
621 struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev); in calc_degraded() local
622 if (rdev && test_bit(Faulty, &rdev->flags)) in calc_degraded()
623 rdev = rcu_dereference(conf->disks[i].replacement); in calc_degraded()
624 if (!rdev || test_bit(Faulty, &rdev->flags)) in calc_degraded()
626 else if (test_bit(In_sync, &rdev->flags)) in calc_degraded()
899 struct md_rdev *rdev, *rrdev = NULL; in ops_run_io() local
927 rdev = rcu_dereference(conf->disks[i].rdev); in ops_run_io()
928 if (!rdev) { in ops_run_io()
929 rdev = rrdev; in ops_run_io()
934 rdev = NULL; in ops_run_io()
935 if (rdev == rrdev) in ops_run_io()
940 rdev = rrdev; in ops_run_io()
944 if (rdev && test_bit(Faulty, &rdev->flags)) in ops_run_io()
945 rdev = NULL; in ops_run_io()
946 if (rdev) in ops_run_io()
947 atomic_inc(&rdev->nr_pending); in ops_run_io()
958 while ((rw & WRITE) && rdev && in ops_run_io()
959 test_bit(WriteErrorSeen, &rdev->flags)) { in ops_run_io()
962 int bad = is_badblock(rdev, sh->sector, STRIPE_SECTORS, in ops_run_io()
968 set_bit(BlockedBadBlocks, &rdev->flags); in ops_run_io()
982 atomic_inc(&rdev->nr_pending); in ops_run_io()
983 md_wait_for_blocked_rdev(rdev, conf->mddev); in ops_run_io()
986 rdev_dec_pending(rdev, conf->mddev); in ops_run_io()
987 rdev = NULL; in ops_run_io()
991 if (rdev) { in ops_run_io()
994 md_sync_acct(rdev->bdev, STRIPE_SECTORS); in ops_run_io()
999 bi->bi_bdev = rdev->bdev; in ops_run_io()
1014 + rdev->new_data_offset); in ops_run_io()
1017 + rdev->data_offset); in ops_run_io()
1089 if (!rdev && !rrdev) { in ops_run_io()
2293 struct md_rdev *rdev = NULL; in raid5_end_read_request() local
2313 rdev = conf->disks[i].replacement; in raid5_end_read_request()
2314 if (!rdev) in raid5_end_read_request()
2315 rdev = conf->disks[i].rdev; in raid5_end_read_request()
2318 s = sh->sector + rdev->new_data_offset; in raid5_end_read_request()
2320 s = sh->sector + rdev->data_offset; in raid5_end_read_request()
2334 bdevname(rdev->bdev, b)); in raid5_end_read_request()
2335 atomic_add(STRIPE_SECTORS, &rdev->corrected_errors); in raid5_end_read_request()
2341 if (atomic_read(&rdev->read_errors)) in raid5_end_read_request()
2342 atomic_set(&rdev->read_errors, 0); in raid5_end_read_request()
2344 const char *bdn = bdevname(rdev->bdev, b); in raid5_end_read_request()
2349 atomic_inc(&rdev->read_errors); in raid5_end_read_request()
2377 } else if (atomic_read(&rdev->read_errors) in raid5_end_read_request()
2384 if (set_bad && test_bit(In_sync, &rdev->flags) in raid5_end_read_request()
2397 && test_bit(In_sync, &rdev->flags) in raid5_end_read_request()
2399 rdev, sh->sector, STRIPE_SECTORS, 0))) in raid5_end_read_request()
2400 md_error(conf->mddev, rdev); in raid5_end_read_request()
2403 rdev_dec_pending(rdev, conf->mddev); in raid5_end_read_request()
2414 struct md_rdev *uninitialized_var(rdev); in raid5_end_write_request()
2421 rdev = conf->disks[i].rdev; in raid5_end_write_request()
2425 rdev = conf->disks[i].replacement; in raid5_end_write_request()
2426 if (rdev) in raid5_end_write_request()
2433 rdev = conf->disks[i].rdev; in raid5_end_write_request()
2447 md_error(conf->mddev, rdev); in raid5_end_write_request()
2448 else if (is_badblock(rdev, sh->sector, in raid5_end_write_request()
2455 set_bit(WriteErrorSeen, &rdev->flags); in raid5_end_write_request()
2457 if (!test_and_set_bit(WantReplacement, &rdev->flags)) in raid5_end_write_request()
2459 &rdev->mddev->recovery); in raid5_end_write_request()
2460 } else if (is_badblock(rdev, sh->sector, in raid5_end_write_request()
2472 rdev_dec_pending(rdev, conf->mddev); in raid5_end_write_request()
2504 static void error(struct mddev *mddev, struct md_rdev *rdev) in error() argument
2512 clear_bit(In_sync, &rdev->flags); in error()
2517 set_bit(Blocked, &rdev->flags); in error()
2518 set_bit(Faulty, &rdev->flags); in error()
2525 bdevname(rdev->bdev, b), in error()
3082 struct md_rdev *rdev; in handle_failed_stripe() local
3084 rdev = rcu_dereference(conf->disks[i].rdev); in handle_failed_stripe()
3085 if (rdev && test_bit(In_sync, &rdev->flags)) in handle_failed_stripe()
3086 atomic_inc(&rdev->nr_pending); in handle_failed_stripe()
3088 rdev = NULL; in handle_failed_stripe()
3090 if (rdev) { in handle_failed_stripe()
3092 rdev, in handle_failed_stripe()
3095 md_error(conf->mddev, rdev); in handle_failed_stripe()
3096 rdev_dec_pending(rdev, conf->mddev); in handle_failed_stripe()
3216 struct md_rdev *rdev = conf->disks[i].rdev; in handle_failed_sync() local
3217 if (rdev in handle_failed_sync()
3218 && !test_bit(Faulty, &rdev->flags) in handle_failed_sync()
3219 && !test_bit(In_sync, &rdev->flags) in handle_failed_sync()
3220 && !rdev_set_badblocks(rdev, sh->sector, in handle_failed_sync()
3223 rdev = conf->disks[i].replacement; in handle_failed_sync()
3224 if (rdev in handle_failed_sync()
3225 && !test_bit(Faulty, &rdev->flags) in handle_failed_sync()
3226 && !test_bit(In_sync, &rdev->flags) in handle_failed_sync()
3227 && !rdev_set_badblocks(rdev, sh->sector, in handle_failed_sync()
3240 struct md_rdev *rdev; in want_replace() local
3243 rdev = sh->raid_conf->disks[disk_idx].replacement; in want_replace()
3244 if (rdev in want_replace()
3245 && !test_bit(Faulty, &rdev->flags) in want_replace()
3246 && !test_bit(In_sync, &rdev->flags) in want_replace()
3247 && (rdev->recovery_offset <= sh->sector in want_replace()
3248 || rdev->mddev->recovery_cp <= sh->sector)) in want_replace()
4029 struct md_rdev *rdev; in analyse_stripe() local
4072 rdev = rcu_dereference(conf->disks[i].replacement); in analyse_stripe()
4073 if (rdev && !test_bit(Faulty, &rdev->flags) && in analyse_stripe()
4074 rdev->recovery_offset >= sh->sector + STRIPE_SECTORS && in analyse_stripe()
4075 !is_badblock(rdev, sh->sector, STRIPE_SECTORS, in analyse_stripe()
4079 if (rdev && !test_bit(Faulty, &rdev->flags)) in analyse_stripe()
4083 rdev = rcu_dereference(conf->disks[i].rdev); in analyse_stripe()
4086 if (rdev && test_bit(Faulty, &rdev->flags)) in analyse_stripe()
4087 rdev = NULL; in analyse_stripe()
4088 if (rdev) { in analyse_stripe()
4089 is_bad = is_badblock(rdev, sh->sector, STRIPE_SECTORS, in analyse_stripe()
4092 && (test_bit(Blocked, &rdev->flags) in analyse_stripe()
4096 &rdev->flags); in analyse_stripe()
4097 s->blocked_rdev = rdev; in analyse_stripe()
4098 atomic_inc(&rdev->nr_pending); in analyse_stripe()
4102 if (!rdev) in analyse_stripe()
4106 if (!test_bit(WriteErrorSeen, &rdev->flags) && in analyse_stripe()
4114 } else if (test_bit(In_sync, &rdev->flags)) in analyse_stripe()
4116 else if (sh->sector + STRIPE_SECTORS <= rdev->recovery_offset) in analyse_stripe()
4131 conf->disks[i].rdev); in analyse_stripe()
4132 if (rdev2 == rdev) in analyse_stripe()
4144 conf->disks[i].rdev); in analyse_stripe()
4171 if (rdev && !test_bit(Faulty, &rdev->flags)) in analyse_stripe()
4585 struct md_rdev *rdev; in handle_stripe() local
4589 rdev = conf->disks[i].rdev; in handle_stripe()
4590 if (!rdev_set_badblocks(rdev, sh->sector, in handle_stripe()
4592 md_error(conf->mddev, rdev); in handle_stripe()
4593 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
4596 rdev = conf->disks[i].rdev; in handle_stripe()
4597 rdev_clear_badblocks(rdev, sh->sector, in handle_stripe()
4599 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
4602 rdev = conf->disks[i].replacement; in handle_stripe()
4603 if (!rdev) in handle_stripe()
4605 rdev = conf->disks[i].rdev; in handle_stripe()
4606 rdev_clear_badblocks(rdev, sh->sector, in handle_stripe()
4608 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
4756 struct md_rdev *rdev; in raid5_align_endio() local
4761 rdev = (void*)raid_bi->bi_next; in raid5_align_endio()
4763 mddev = rdev->mddev; in raid5_align_endio()
4766 rdev_dec_pending(rdev, conf->mddev); in raid5_align_endio()
4787 struct md_rdev *rdev; in raid5_read_one_chunk() local
4815 rdev = rcu_dereference(conf->disks[dd_idx].replacement); in raid5_read_one_chunk()
4816 if (!rdev || test_bit(Faulty, &rdev->flags) || in raid5_read_one_chunk()
4817 rdev->recovery_offset < end_sector) { in raid5_read_one_chunk()
4818 rdev = rcu_dereference(conf->disks[dd_idx].rdev); in raid5_read_one_chunk()
4819 if (rdev && in raid5_read_one_chunk()
4820 (test_bit(Faulty, &rdev->flags) || in raid5_read_one_chunk()
4821 !(test_bit(In_sync, &rdev->flags) || in raid5_read_one_chunk()
4822 rdev->recovery_offset >= end_sector))) in raid5_read_one_chunk()
4823 rdev = NULL; in raid5_read_one_chunk()
4825 if (rdev) { in raid5_read_one_chunk()
4829 atomic_inc(&rdev->nr_pending); in raid5_read_one_chunk()
4831 raid_bio->bi_next = (void*)rdev; in raid5_read_one_chunk()
4832 align_bi->bi_bdev = rdev->bdev; in raid5_read_one_chunk()
4835 if (is_badblock(rdev, align_bi->bi_iter.bi_sector, in raid5_read_one_chunk()
4839 rdev_dec_pending(rdev, mddev); in raid5_read_one_chunk()
4844 align_bi->bi_iter.bi_sector += rdev->data_offset; in raid5_read_one_chunk()
5658 struct md_rdev *rdev = ACCESS_ONCE(conf->disks[i].rdev); in sync_request() local
5660 if (rdev == NULL || test_bit(Faulty, &rdev->flags)) in sync_request()
6465 struct md_rdev *rdev; in setup_conf() local
6569 rdev_for_each(rdev, mddev) { in setup_conf()
6570 raid_disk = rdev->raid_disk; in setup_conf()
6572 || raid_disk < 0 || test_bit(Journal, &rdev->flags)) in setup_conf()
6576 if (test_bit(Replacement, &rdev->flags)) { in setup_conf()
6579 disk->replacement = rdev; in setup_conf()
6581 if (disk->rdev) in setup_conf()
6583 disk->rdev = rdev; in setup_conf()
6586 if (test_bit(In_sync, &rdev->flags)) { in setup_conf()
6590 mdname(mddev), bdevname(rdev->bdev, b), raid_disk); in setup_conf()
6591 } else if (rdev->saved_raid_disk != raid_disk) in setup_conf()
6691 struct md_rdev *rdev; in run() local
6703 rdev_for_each(rdev, mddev) { in run()
6706 if (test_bit(Journal, &rdev->flags)) { in run()
6707 journal_dev = rdev; in run()
6710 if (rdev->raid_disk < 0) in run()
6712 diff = (rdev->new_data_offset - rdev->data_offset); in run()
6838 rdev = conf->disks[i].rdev; in run()
6839 if (!rdev && conf->disks[i].replacement) { in run()
6841 rdev = conf->disks[i].replacement; in run()
6843 clear_bit(Replacement, &rdev->flags); in run()
6844 conf->disks[i].rdev = rdev; in run()
6846 if (!rdev) in run()
6855 if (test_bit(In_sync, &rdev->flags)) { in run()
6870 rdev->recovery_offset = reshape_offset; in run()
6872 if (rdev->recovery_offset < reshape_offset) { in run()
6874 if (!only_parity(rdev->raid_disk, in run()
6880 if (!only_parity(rdev->raid_disk, in run()
6991 rdev_for_each(rdev, mddev) { in run()
6992 disk_stack_limits(mddev->gendisk, rdev->bdev, in run()
6993 rdev->data_offset << 9); in run()
6994 disk_stack_limits(mddev->gendisk, rdev->bdev, in run()
6995 rdev->new_data_offset << 9); in run()
7006 if (!blk_queue_discard(bdev_get_queue(rdev->bdev)) || in run()
7007 !bdev_get_queue(rdev->bdev)-> in run()
7070 conf->disks[i].rdev && in status()
7071 test_bit(In_sync, &conf->disks[i].rdev->flags) ? "U" : "_"); in status()
7092 if (tmp->rdev) in print_raid5_conf()
7094 i, !test_bit(Faulty, &tmp->rdev->flags), in print_raid5_conf()
7095 bdevname(tmp->rdev->bdev, b)); in print_raid5_conf()
7114 if (!tmp->rdev in raid5_spare_active()
7115 || !test_and_clear_bit(In_sync, &tmp->rdev->flags)) in raid5_spare_active()
7117 if (tmp->rdev) { in raid5_spare_active()
7122 set_bit(Faulty, &tmp->rdev->flags); in raid5_spare_active()
7124 tmp->rdev->sysfs_state); in raid5_spare_active()
7127 } else if (tmp->rdev in raid5_spare_active()
7128 && tmp->rdev->recovery_offset == MaxSector in raid5_spare_active()
7129 && !test_bit(Faulty, &tmp->rdev->flags) in raid5_spare_active()
7130 && !test_and_set_bit(In_sync, &tmp->rdev->flags)) { in raid5_spare_active()
7132 sysfs_notify_dirent_safe(tmp->rdev->sysfs_state); in raid5_spare_active()
7142 static int raid5_remove_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_remove_disk() argument
7146 int number = rdev->raid_disk; in raid5_remove_disk()
7151 if (test_bit(Journal, &rdev->flags)) { in raid5_remove_disk()
7160 if (rdev == p->rdev) in raid5_remove_disk()
7161 rdevp = &p->rdev; in raid5_remove_disk()
7162 else if (rdev == p->replacement) in raid5_remove_disk()
7169 clear_bit(In_sync, &rdev->flags); in raid5_remove_disk()
7171 if (test_bit(In_sync, &rdev->flags) || in raid5_remove_disk()
7172 atomic_read(&rdev->nr_pending)) { in raid5_remove_disk()
7179 if (!test_bit(Faulty, &rdev->flags) && in raid5_remove_disk()
7182 (!p->replacement || p->replacement == rdev) && in raid5_remove_disk()
7189 if (atomic_read(&rdev->nr_pending)) { in raid5_remove_disk()
7192 *rdevp = rdev; in raid5_remove_disk()
7195 p->rdev = p->replacement; in raid5_remove_disk()
7201 clear_bit(WantReplacement, &rdev->flags); in raid5_remove_disk()
7206 clear_bit(WantReplacement, &rdev->flags); in raid5_remove_disk()
7213 static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_add_disk() argument
7222 if (test_bit(Journal, &rdev->flags)) in raid5_add_disk()
7227 if (rdev->saved_raid_disk < 0 && has_failed(conf)) in raid5_add_disk()
7231 if (rdev->raid_disk >= 0) in raid5_add_disk()
7232 first = last = rdev->raid_disk; in raid5_add_disk()
7238 if (rdev->saved_raid_disk >= 0 && in raid5_add_disk()
7239 rdev->saved_raid_disk >= first && in raid5_add_disk()
7240 conf->disks[rdev->saved_raid_disk].rdev == NULL) in raid5_add_disk()
7241 first = rdev->saved_raid_disk; in raid5_add_disk()
7245 if (p->rdev == NULL) { in raid5_add_disk()
7246 clear_bit(In_sync, &rdev->flags); in raid5_add_disk()
7247 rdev->raid_disk = disk; in raid5_add_disk()
7249 if (rdev->saved_raid_disk != disk) in raid5_add_disk()
7251 rcu_assign_pointer(p->rdev, rdev); in raid5_add_disk()
7257 if (test_bit(WantReplacement, &p->rdev->flags) && in raid5_add_disk()
7259 clear_bit(In_sync, &rdev->flags); in raid5_add_disk()
7260 set_bit(Replacement, &rdev->flags); in raid5_add_disk()
7261 rdev->raid_disk = disk; in raid5_add_disk()
7264 rcu_assign_pointer(p->replacement, rdev); in raid5_add_disk()
7378 struct md_rdev *rdev; in raid5_start_reshape() local
7391 rdev_for_each(rdev, mddev) { in raid5_start_reshape()
7392 if (!test_bit(In_sync, &rdev->flags) in raid5_start_reshape()
7393 && !test_bit(Faulty, &rdev->flags)) in raid5_start_reshape()
7451 rdev_for_each(rdev, mddev) in raid5_start_reshape()
7452 if (rdev->raid_disk < 0 && in raid5_start_reshape()
7453 !test_bit(Faulty, &rdev->flags)) { in raid5_start_reshape()
7454 if (raid5_add_disk(mddev, rdev) == 0) { in raid5_start_reshape()
7455 if (rdev->raid_disk in raid5_start_reshape()
7457 set_bit(In_sync, &rdev->flags); in raid5_start_reshape()
7459 rdev->recovery_offset = 0; in raid5_start_reshape()
7461 if (sysfs_link_rdev(mddev, rdev)) in raid5_start_reshape()
7464 } else if (rdev->raid_disk >= conf->previous_raid_disks in raid5_start_reshape()
7465 && !test_bit(Faulty, &rdev->flags)) { in raid5_start_reshape()
7467 set_bit(In_sync, &rdev->flags); in raid5_start_reshape()
7497 rdev_for_each(rdev, mddev) in raid5_start_reshape()
7498 rdev->new_data_offset = rdev->data_offset; in raid5_start_reshape()
7520 struct md_rdev *rdev; in end_reshape() local
7524 rdev_for_each(rdev, conf->mddev) in end_reshape()
7525 rdev->data_offset = rdev->new_data_offset; in end_reshape()
7566 struct md_rdev *rdev = conf->disks[d].rdev; in raid5_finish_reshape() local
7567 if (rdev) in raid5_finish_reshape()
7568 clear_bit(In_sync, &rdev->flags); in raid5_finish_reshape()
7569 rdev = conf->disks[d].replacement; in raid5_finish_reshape()
7570 if (rdev) in raid5_finish_reshape()
7571 clear_bit(In_sync, &rdev->flags); in raid5_finish_reshape()