Lines Matching refs:rdev
597 struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev); in calc_degraded() local
598 if (rdev && test_bit(Faulty, &rdev->flags)) in calc_degraded()
599 rdev = rcu_dereference(conf->disks[i].replacement); in calc_degraded()
600 if (!rdev || test_bit(Faulty, &rdev->flags)) in calc_degraded()
602 else if (test_bit(In_sync, &rdev->flags)) in calc_degraded()
623 struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev); in calc_degraded() local
624 if (rdev && test_bit(Faulty, &rdev->flags)) in calc_degraded()
625 rdev = rcu_dereference(conf->disks[i].replacement); in calc_degraded()
626 if (!rdev || test_bit(Faulty, &rdev->flags)) in calc_degraded()
628 else if (test_bit(In_sync, &rdev->flags)) in calc_degraded()
895 struct md_rdev *rdev, *rrdev = NULL; in ops_run_io() local
923 rdev = rcu_dereference(conf->disks[i].rdev); in ops_run_io()
924 if (!rdev) { in ops_run_io()
925 rdev = rrdev; in ops_run_io()
930 rdev = NULL; in ops_run_io()
931 if (rdev == rrdev) in ops_run_io()
936 rdev = rrdev; in ops_run_io()
940 if (rdev && test_bit(Faulty, &rdev->flags)) in ops_run_io()
941 rdev = NULL; in ops_run_io()
942 if (rdev) in ops_run_io()
943 atomic_inc(&rdev->nr_pending); in ops_run_io()
954 while ((rw & WRITE) && rdev && in ops_run_io()
955 test_bit(WriteErrorSeen, &rdev->flags)) { in ops_run_io()
958 int bad = is_badblock(rdev, sh->sector, STRIPE_SECTORS, in ops_run_io()
964 set_bit(BlockedBadBlocks, &rdev->flags); in ops_run_io()
978 atomic_inc(&rdev->nr_pending); in ops_run_io()
979 md_wait_for_blocked_rdev(rdev, conf->mddev); in ops_run_io()
982 rdev_dec_pending(rdev, conf->mddev); in ops_run_io()
983 rdev = NULL; in ops_run_io()
987 if (rdev) { in ops_run_io()
990 md_sync_acct(rdev->bdev, STRIPE_SECTORS); in ops_run_io()
995 bi->bi_bdev = rdev->bdev; in ops_run_io()
1010 + rdev->new_data_offset); in ops_run_io()
1013 + rdev->data_offset); in ops_run_io()
1085 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()
2422 rdev = conf->disks[i].rdev; in raid5_end_write_request()
2426 rdev = conf->disks[i].replacement; in raid5_end_write_request()
2427 if (rdev) in raid5_end_write_request()
2434 rdev = conf->disks[i].rdev; in raid5_end_write_request()
2448 md_error(conf->mddev, rdev); in raid5_end_write_request()
2449 else if (is_badblock(rdev, sh->sector, in raid5_end_write_request()
2456 set_bit(WriteErrorSeen, &rdev->flags); in raid5_end_write_request()
2458 if (!test_and_set_bit(WantReplacement, &rdev->flags)) in raid5_end_write_request()
2460 &rdev->mddev->recovery); in raid5_end_write_request()
2461 } else if (is_badblock(rdev, sh->sector, in raid5_end_write_request()
2473 rdev_dec_pending(rdev, conf->mddev); in raid5_end_write_request()
2507 static void error(struct mddev *mddev, struct md_rdev *rdev) in error() argument
2515 clear_bit(In_sync, &rdev->flags); in error()
2520 set_bit(Blocked, &rdev->flags); in error()
2521 set_bit(Faulty, &rdev->flags); in error()
2527 bdevname(rdev->bdev, b), in error()
3084 struct md_rdev *rdev; in handle_failed_stripe() local
3086 rdev = rcu_dereference(conf->disks[i].rdev); in handle_failed_stripe()
3087 if (rdev && test_bit(In_sync, &rdev->flags)) in handle_failed_stripe()
3088 atomic_inc(&rdev->nr_pending); in handle_failed_stripe()
3090 rdev = NULL; in handle_failed_stripe()
3092 if (rdev) { in handle_failed_stripe()
3094 rdev, in handle_failed_stripe()
3097 md_error(conf->mddev, rdev); in handle_failed_stripe()
3098 rdev_dec_pending(rdev, conf->mddev); in handle_failed_stripe()
3212 struct md_rdev *rdev = conf->disks[i].rdev; in handle_failed_sync() local
3213 if (rdev in handle_failed_sync()
3214 && !test_bit(Faulty, &rdev->flags) in handle_failed_sync()
3215 && !test_bit(In_sync, &rdev->flags) in handle_failed_sync()
3216 && !rdev_set_badblocks(rdev, sh->sector, in handle_failed_sync()
3219 rdev = conf->disks[i].replacement; in handle_failed_sync()
3220 if (rdev in handle_failed_sync()
3221 && !test_bit(Faulty, &rdev->flags) in handle_failed_sync()
3222 && !test_bit(In_sync, &rdev->flags) in handle_failed_sync()
3223 && !rdev_set_badblocks(rdev, sh->sector, in handle_failed_sync()
3236 struct md_rdev *rdev; in want_replace() local
3239 rdev = sh->raid_conf->disks[disk_idx].replacement; in want_replace()
3240 if (rdev in want_replace()
3241 && !test_bit(Faulty, &rdev->flags) in want_replace()
3242 && !test_bit(In_sync, &rdev->flags) in want_replace()
3243 && (rdev->recovery_offset <= sh->sector in want_replace()
3244 || rdev->mddev->recovery_cp <= sh->sector)) in want_replace()
4022 struct md_rdev *rdev; in analyse_stripe() local
4065 rdev = rcu_dereference(conf->disks[i].replacement); in analyse_stripe()
4066 if (rdev && !test_bit(Faulty, &rdev->flags) && in analyse_stripe()
4067 rdev->recovery_offset >= sh->sector + STRIPE_SECTORS && in analyse_stripe()
4068 !is_badblock(rdev, sh->sector, STRIPE_SECTORS, in analyse_stripe()
4072 if (rdev) in analyse_stripe()
4074 rdev = rcu_dereference(conf->disks[i].rdev); in analyse_stripe()
4077 if (rdev && test_bit(Faulty, &rdev->flags)) in analyse_stripe()
4078 rdev = NULL; in analyse_stripe()
4079 if (rdev) { in analyse_stripe()
4080 is_bad = is_badblock(rdev, sh->sector, STRIPE_SECTORS, in analyse_stripe()
4083 && (test_bit(Blocked, &rdev->flags) in analyse_stripe()
4087 &rdev->flags); in analyse_stripe()
4088 s->blocked_rdev = rdev; in analyse_stripe()
4089 atomic_inc(&rdev->nr_pending); in analyse_stripe()
4093 if (!rdev) in analyse_stripe()
4097 if (!test_bit(WriteErrorSeen, &rdev->flags) && in analyse_stripe()
4105 } else if (test_bit(In_sync, &rdev->flags)) in analyse_stripe()
4107 else if (sh->sector + STRIPE_SECTORS <= rdev->recovery_offset) in analyse_stripe()
4122 conf->disks[i].rdev); in analyse_stripe()
4123 if (rdev2 == rdev) in analyse_stripe()
4135 conf->disks[i].rdev); in analyse_stripe()
4162 if (rdev && !test_bit(Faulty, &rdev->flags)) in analyse_stripe()
4573 struct md_rdev *rdev; in handle_stripe() local
4577 rdev = conf->disks[i].rdev; in handle_stripe()
4578 if (!rdev_set_badblocks(rdev, sh->sector, in handle_stripe()
4580 md_error(conf->mddev, rdev); in handle_stripe()
4581 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
4584 rdev = conf->disks[i].rdev; in handle_stripe()
4585 rdev_clear_badblocks(rdev, sh->sector, in handle_stripe()
4587 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
4590 rdev = conf->disks[i].replacement; in handle_stripe()
4591 if (!rdev) in handle_stripe()
4593 rdev = conf->disks[i].rdev; in handle_stripe()
4594 rdev_clear_badblocks(rdev, sh->sector, in handle_stripe()
4596 rdev_dec_pending(rdev, conf->mddev); in handle_stripe()
4766 struct md_rdev *rdev; in raid5_align_endio() local
4770 rdev = (void*)raid_bi->bi_next; in raid5_align_endio()
4772 mddev = rdev->mddev; in raid5_align_endio()
4775 rdev_dec_pending(rdev, conf->mddev); in raid5_align_endio()
4815 struct md_rdev *rdev; in chunk_aligned_read() local
4843 rdev = rcu_dereference(conf->disks[dd_idx].replacement); in chunk_aligned_read()
4844 if (!rdev || test_bit(Faulty, &rdev->flags) || in chunk_aligned_read()
4845 rdev->recovery_offset < end_sector) { in chunk_aligned_read()
4846 rdev = rcu_dereference(conf->disks[dd_idx].rdev); in chunk_aligned_read()
4847 if (rdev && in chunk_aligned_read()
4848 (test_bit(Faulty, &rdev->flags) || in chunk_aligned_read()
4849 !(test_bit(In_sync, &rdev->flags) || in chunk_aligned_read()
4850 rdev->recovery_offset >= end_sector))) in chunk_aligned_read()
4851 rdev = NULL; in chunk_aligned_read()
4853 if (rdev) { in chunk_aligned_read()
4857 atomic_inc(&rdev->nr_pending); in chunk_aligned_read()
4859 raid_bio->bi_next = (void*)rdev; in chunk_aligned_read()
4860 align_bi->bi_bdev = rdev->bdev; in chunk_aligned_read()
4864 is_badblock(rdev, align_bi->bi_iter.bi_sector, in chunk_aligned_read()
4869 rdev_dec_pending(rdev, mddev); in chunk_aligned_read()
4874 align_bi->bi_iter.bi_sector += rdev->data_offset; in chunk_aligned_read()
5642 struct md_rdev *rdev = ACCESS_ONCE(conf->disks[i].rdev); in sync_request() local
5644 if (rdev == NULL || test_bit(Faulty, &rdev->flags)) in sync_request()
6426 struct md_rdev *rdev; in setup_conf() local
6528 rdev_for_each(rdev, mddev) { in setup_conf()
6529 raid_disk = rdev->raid_disk; in setup_conf()
6535 if (test_bit(Replacement, &rdev->flags)) { in setup_conf()
6538 disk->replacement = rdev; in setup_conf()
6540 if (disk->rdev) in setup_conf()
6542 disk->rdev = rdev; in setup_conf()
6545 if (test_bit(In_sync, &rdev->flags)) { in setup_conf()
6549 mdname(mddev), bdevname(rdev->bdev, b), raid_disk); in setup_conf()
6550 } else if (rdev->saved_raid_disk != raid_disk) in setup_conf()
6647 struct md_rdev *rdev; in run() local
6658 rdev_for_each(rdev, mddev) { in run()
6660 if (rdev->raid_disk < 0) in run()
6662 diff = (rdev->new_data_offset - rdev->data_offset); in run()
6776 rdev = conf->disks[i].rdev; in run()
6777 if (!rdev && conf->disks[i].replacement) { in run()
6779 rdev = conf->disks[i].replacement; in run()
6781 clear_bit(Replacement, &rdev->flags); in run()
6782 conf->disks[i].rdev = rdev; in run()
6784 if (!rdev) in run()
6793 if (test_bit(In_sync, &rdev->flags)) { in run()
6808 rdev->recovery_offset = reshape_offset; in run()
6810 if (rdev->recovery_offset < reshape_offset) { in run()
6812 if (!only_parity(rdev->raid_disk, in run()
6818 if (!only_parity(rdev->raid_disk, in run()
6929 rdev_for_each(rdev, mddev) { in run()
6930 disk_stack_limits(mddev->gendisk, rdev->bdev, in run()
6931 rdev->data_offset << 9); in run()
6932 disk_stack_limits(mddev->gendisk, rdev->bdev, in run()
6933 rdev->new_data_offset << 9); in run()
6944 if (!blk_queue_discard(bdev_get_queue(rdev->bdev)) || in run()
6945 !bdev_get_queue(rdev->bdev)-> in run()
7000 conf->disks[i].rdev && in status()
7001 test_bit(In_sync, &conf->disks[i].rdev->flags) ? "U" : "_"); in status()
7022 if (tmp->rdev) in print_raid5_conf()
7024 i, !test_bit(Faulty, &tmp->rdev->flags), in print_raid5_conf()
7025 bdevname(tmp->rdev->bdev, b)); in print_raid5_conf()
7044 if (!tmp->rdev in raid5_spare_active()
7045 || !test_and_clear_bit(In_sync, &tmp->rdev->flags)) in raid5_spare_active()
7047 if (tmp->rdev) { in raid5_spare_active()
7052 set_bit(Faulty, &tmp->rdev->flags); in raid5_spare_active()
7054 tmp->rdev->sysfs_state); in raid5_spare_active()
7057 } else if (tmp->rdev in raid5_spare_active()
7058 && tmp->rdev->recovery_offset == MaxSector in raid5_spare_active()
7059 && !test_bit(Faulty, &tmp->rdev->flags) in raid5_spare_active()
7060 && !test_and_set_bit(In_sync, &tmp->rdev->flags)) { in raid5_spare_active()
7062 sysfs_notify_dirent_safe(tmp->rdev->sysfs_state); in raid5_spare_active()
7072 static int raid5_remove_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_remove_disk() argument
7076 int number = rdev->raid_disk; in raid5_remove_disk()
7081 if (rdev == p->rdev) in raid5_remove_disk()
7082 rdevp = &p->rdev; in raid5_remove_disk()
7083 else if (rdev == p->replacement) in raid5_remove_disk()
7090 clear_bit(In_sync, &rdev->flags); in raid5_remove_disk()
7092 if (test_bit(In_sync, &rdev->flags) || in raid5_remove_disk()
7093 atomic_read(&rdev->nr_pending)) { in raid5_remove_disk()
7100 if (!test_bit(Faulty, &rdev->flags) && in raid5_remove_disk()
7103 (!p->replacement || p->replacement == rdev) && in raid5_remove_disk()
7110 if (atomic_read(&rdev->nr_pending)) { in raid5_remove_disk()
7113 *rdevp = rdev; in raid5_remove_disk()
7116 p->rdev = p->replacement; in raid5_remove_disk()
7122 clear_bit(WantReplacement, &rdev->flags); in raid5_remove_disk()
7127 clear_bit(WantReplacement, &rdev->flags); in raid5_remove_disk()
7134 static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev) in raid5_add_disk() argument
7146 if (rdev->saved_raid_disk < 0 && has_failed(conf)) in raid5_add_disk()
7150 if (rdev->raid_disk >= 0) in raid5_add_disk()
7151 first = last = rdev->raid_disk; in raid5_add_disk()
7157 if (rdev->saved_raid_disk >= 0 && in raid5_add_disk()
7158 rdev->saved_raid_disk >= first && in raid5_add_disk()
7159 conf->disks[rdev->saved_raid_disk].rdev == NULL) in raid5_add_disk()
7160 first = rdev->saved_raid_disk; in raid5_add_disk()
7164 if (p->rdev == NULL) { in raid5_add_disk()
7165 clear_bit(In_sync, &rdev->flags); in raid5_add_disk()
7166 rdev->raid_disk = disk; in raid5_add_disk()
7168 if (rdev->saved_raid_disk != disk) in raid5_add_disk()
7170 rcu_assign_pointer(p->rdev, rdev); in raid5_add_disk()
7176 if (test_bit(WantReplacement, &p->rdev->flags) && in raid5_add_disk()
7178 clear_bit(In_sync, &rdev->flags); in raid5_add_disk()
7179 set_bit(Replacement, &rdev->flags); in raid5_add_disk()
7180 rdev->raid_disk = disk; in raid5_add_disk()
7183 rcu_assign_pointer(p->replacement, rdev); in raid5_add_disk()
7291 struct md_rdev *rdev; in raid5_start_reshape() local
7304 rdev_for_each(rdev, mddev) { in raid5_start_reshape()
7305 if (!test_bit(In_sync, &rdev->flags) in raid5_start_reshape()
7306 && !test_bit(Faulty, &rdev->flags)) in raid5_start_reshape()
7364 rdev_for_each(rdev, mddev) in raid5_start_reshape()
7365 if (rdev->raid_disk < 0 && in raid5_start_reshape()
7366 !test_bit(Faulty, &rdev->flags)) { in raid5_start_reshape()
7367 if (raid5_add_disk(mddev, rdev) == 0) { in raid5_start_reshape()
7368 if (rdev->raid_disk in raid5_start_reshape()
7370 set_bit(In_sync, &rdev->flags); in raid5_start_reshape()
7372 rdev->recovery_offset = 0; in raid5_start_reshape()
7374 if (sysfs_link_rdev(mddev, rdev)) in raid5_start_reshape()
7377 } else if (rdev->raid_disk >= conf->previous_raid_disks in raid5_start_reshape()
7378 && !test_bit(Faulty, &rdev->flags)) { in raid5_start_reshape()
7380 set_bit(In_sync, &rdev->flags); in raid5_start_reshape()
7410 rdev_for_each(rdev, mddev) in raid5_start_reshape()
7411 rdev->new_data_offset = rdev->data_offset; in raid5_start_reshape()
7433 struct md_rdev *rdev; in end_reshape() local
7437 rdev_for_each(rdev, conf->mddev) in end_reshape()
7438 rdev->data_offset = rdev->new_data_offset; in end_reshape()
7478 struct md_rdev *rdev = conf->disks[d].rdev; in raid5_finish_reshape() local
7479 if (rdev) in raid5_finish_reshape()
7480 clear_bit(In_sync, &rdev->flags); in raid5_finish_reshape()
7481 rdev = conf->disks[d].replacement; in raid5_finish_reshape()
7482 if (rdev) in raid5_finish_reshape()
7483 clear_bit(In_sync, &rdev->flags); in raid5_finish_reshape()