Lines Matching +full:no +full:- +full:sd
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
131 struct g_raid_subdisk *sd);
139 if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_RAID1 || in g_raid_tr_taste_raid1()
140 (tr->tro_volume->v_raid_level_qualifier != G_RAID_VOLUME_RLQ_R1SM && in g_raid_tr_taste_raid1()
141 tr->tro_volume->v_raid_level_qualifier != G_RAID_VOLUME_RLQ_R1MM)) in g_raid_tr_taste_raid1()
143 trs->trso_starting = 1; in g_raid_tr_taste_raid1()
149 struct g_raid_subdisk *sd) in g_raid_tr_update_state_raid1() argument
157 sc = vol->v_softc; in g_raid_tr_update_state_raid1()
158 trs = (struct g_raid_tr_raid1_object *)vol->v_tr; in g_raid_tr_update_state_raid1()
159 if (trs->trso_stopping && in g_raid_tr_update_state_raid1()
160 (trs->trso_flags & TR_RAID1_F_DOING_SOME) == 0) in g_raid_tr_update_state_raid1()
162 else if (trs->trso_starting) in g_raid_tr_update_state_raid1()
169 * Critical situation! We have no any active disk! in g_raid_tr_update_state_raid1()
172 bestsd = &vol->v_subdisks[0]; in g_raid_tr_update_state_raid1()
173 for (i = 1; i < vol->v_disks_count; i++) { in g_raid_tr_update_state_raid1()
174 tsd = &vol->v_subdisks[i]; in g_raid_tr_update_state_raid1()
175 if (tsd->sd_state > bestsd->sd_state) in g_raid_tr_update_state_raid1()
177 else if (tsd->sd_state == bestsd->sd_state && in g_raid_tr_update_state_raid1()
178 (tsd->sd_state == G_RAID_SUBDISK_S_REBUILD || in g_raid_tr_update_state_raid1()
179 tsd->sd_state == G_RAID_SUBDISK_S_RESYNC) && in g_raid_tr_update_state_raid1()
180 tsd->sd_rebuild_pos > bestsd->sd_rebuild_pos) in g_raid_tr_update_state_raid1()
183 if (bestsd->sd_state >= G_RAID_SUBDISK_S_UNINITIALIZED) { in g_raid_tr_update_state_raid1()
187 vol->v_name, bestsd->sd_pos, in g_raid_tr_update_state_raid1()
188 g_raid_subdisk_state2str(bestsd->sd_state)); in g_raid_tr_update_state_raid1()
192 vol, bestsd, bestsd->sd_disk); in g_raid_tr_update_state_raid1()
198 if (na == vol->v_disks_count) in g_raid_tr_update_state_raid1()
200 else if (na + ns == vol->v_disks_count) in g_raid_tr_update_state_raid1()
206 g_raid_tr_raid1_maybe_rebuild(vol->v_tr, sd); in g_raid_tr_update_state_raid1()
208 if (s != vol->v_state) { in g_raid_tr_update_state_raid1()
213 if (!trs->trso_starting && !trs->trso_stopping) in g_raid_tr_update_state_raid1()
220 g_raid_tr_raid1_fail_disk(struct g_raid_softc *sc, struct g_raid_subdisk *sd, in g_raid_tr_raid1_fail_disk() argument
232 if (g_raid_nsubdisks(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE) == 1 && in g_raid_tr_raid1_fail_disk()
233 g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE) == sd) in g_raid_tr_raid1_fail_disk()
235 g_raid_fail_disk(sc, sd, disk); in g_raid_tr_raid1_fail_disk()
242 struct g_raid_subdisk *sd, *good_sd; in g_raid_tr_raid1_rebuild_some() local
246 if (trs->trso_flags & TR_RAID1_F_DOING_SOME) in g_raid_tr_raid1_rebuild_some()
248 sd = trs->trso_failed_sd; in g_raid_tr_raid1_rebuild_some()
249 good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE); in g_raid_tr_raid1_rebuild_some()
254 bp = &trs->trso_bio; in g_raid_tr_raid1_rebuild_some()
256 bp->bio_offset = sd->sd_rebuild_pos; in g_raid_tr_raid1_rebuild_some()
257 bp->bio_length = MIN(g_raid1_rebuild_slab, in g_raid_tr_raid1_rebuild_some()
258 sd->sd_size - sd->sd_rebuild_pos); in g_raid_tr_raid1_rebuild_some()
259 bp->bio_data = trs->trso_buffer; in g_raid_tr_raid1_rebuild_some()
260 bp->bio_cmd = BIO_READ; in g_raid_tr_raid1_rebuild_some()
261 bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; in g_raid_tr_raid1_rebuild_some()
262 bp->bio_caller1 = good_sd; in g_raid_tr_raid1_rebuild_some()
263 trs->trso_flags |= TR_RAID1_F_DOING_SOME; in g_raid_tr_raid1_rebuild_some()
264 trs->trso_flags |= TR_RAID1_F_LOCKED; in g_raid_tr_raid1_rebuild_some()
265 g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ in g_raid_tr_raid1_rebuild_some()
266 bp->bio_offset, bp->bio_length, NULL, bp); in g_raid_tr_raid1_rebuild_some()
273 struct g_raid_subdisk *sd; in g_raid_tr_raid1_rebuild_done() local
275 vol = trs->trso_base.tro_volume; in g_raid_tr_raid1_rebuild_done()
276 sd = trs->trso_failed_sd; in g_raid_tr_raid1_rebuild_done()
277 g_raid_write_metadata(vol->v_softc, vol, sd, sd->sd_disk); in g_raid_tr_raid1_rebuild_done()
278 free(trs->trso_buffer, M_TR_RAID1); in g_raid_tr_raid1_rebuild_done()
279 trs->trso_buffer = NULL; in g_raid_tr_raid1_rebuild_done()
280 trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; in g_raid_tr_raid1_rebuild_done()
281 trs->trso_type = TR_RAID1_NONE; in g_raid_tr_raid1_rebuild_done()
282 trs->trso_recover_slabs = 0; in g_raid_tr_raid1_rebuild_done()
283 trs->trso_failed_sd = NULL; in g_raid_tr_raid1_rebuild_done()
291 struct g_raid_subdisk *sd; in g_raid_tr_raid1_rebuild_finish() local
294 sd = trs->trso_failed_sd; in g_raid_tr_raid1_rebuild_finish()
295 G_RAID_DEBUG1(0, tr->tro_volume->v_softc, in g_raid_tr_raid1_rebuild_finish()
296 "Subdisk %s:%d-%s rebuild completed.", in g_raid_tr_raid1_rebuild_finish()
297 sd->sd_volume->v_name, sd->sd_pos, in g_raid_tr_raid1_rebuild_finish()
298 sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]"); in g_raid_tr_raid1_rebuild_finish()
299 g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); in g_raid_tr_raid1_rebuild_finish()
300 sd->sd_rebuild_pos = 0; in g_raid_tr_raid1_rebuild_finish()
308 struct g_raid_subdisk *sd; in g_raid_tr_raid1_rebuild_abort() local
312 vol = tr->tro_volume; in g_raid_tr_raid1_rebuild_abort()
314 sd = trs->trso_failed_sd; in g_raid_tr_raid1_rebuild_abort()
315 if (trs->trso_flags & TR_RAID1_F_DOING_SOME) { in g_raid_tr_raid1_rebuild_abort()
316 G_RAID_DEBUG1(1, vol->v_softc, in g_raid_tr_raid1_rebuild_abort()
317 "Subdisk %s:%d-%s rebuild is aborting.", in g_raid_tr_raid1_rebuild_abort()
318 sd->sd_volume->v_name, sd->sd_pos, in g_raid_tr_raid1_rebuild_abort()
319 sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]"); in g_raid_tr_raid1_rebuild_abort()
320 trs->trso_flags |= TR_RAID1_F_ABORT; in g_raid_tr_raid1_rebuild_abort()
322 G_RAID_DEBUG1(0, vol->v_softc, in g_raid_tr_raid1_rebuild_abort()
323 "Subdisk %s:%d-%s rebuild aborted.", in g_raid_tr_raid1_rebuild_abort()
324 sd->sd_volume->v_name, sd->sd_pos, in g_raid_tr_raid1_rebuild_abort()
325 sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]"); in g_raid_tr_raid1_rebuild_abort()
326 trs->trso_flags &= ~TR_RAID1_F_ABORT; in g_raid_tr_raid1_rebuild_abort()
327 if (trs->trso_flags & TR_RAID1_F_LOCKED) { in g_raid_tr_raid1_rebuild_abort()
328 trs->trso_flags &= ~TR_RAID1_F_LOCKED; in g_raid_tr_raid1_rebuild_abort()
330 sd->sd_size - sd->sd_rebuild_pos); in g_raid_tr_raid1_rebuild_abort()
331 g_raid_unlock_range(tr->tro_volume, in g_raid_tr_raid1_rebuild_abort()
332 sd->sd_rebuild_pos, len); in g_raid_tr_raid1_rebuild_abort()
343 struct g_raid_subdisk *sd, *fsd; in g_raid_tr_raid1_rebuild_start() local
345 vol = tr->tro_volume; in g_raid_tr_raid1_rebuild_start()
347 if (trs->trso_failed_sd) { in g_raid_tr_raid1_rebuild_start()
348 G_RAID_DEBUG1(1, vol->v_softc, in g_raid_tr_raid1_rebuild_start()
350 (intmax_t)trs->trso_failed_sd->sd_rebuild_pos); in g_raid_tr_raid1_rebuild_start()
353 sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_ACTIVE); in g_raid_tr_raid1_rebuild_start()
354 if (sd == NULL) { in g_raid_tr_raid1_rebuild_start()
355 G_RAID_DEBUG1(1, vol->v_softc, in g_raid_tr_raid1_rebuild_start()
356 "No active disk to rebuild. night night."); in g_raid_tr_raid1_rebuild_start()
365 fsd->sd_rebuild_pos = 0; in g_raid_tr_raid1_rebuild_start()
368 g_raid_write_metadata(vol->v_softc, vol, fsd, NULL); in g_raid_tr_raid1_rebuild_start()
376 fsd->sd_rebuild_pos = 0; in g_raid_tr_raid1_rebuild_start()
379 g_raid_write_metadata(vol->v_softc, in g_raid_tr_raid1_rebuild_start()
385 G_RAID_DEBUG1(1, vol->v_softc, in g_raid_tr_raid1_rebuild_start()
386 "No failed disk to rebuild. night night."); in g_raid_tr_raid1_rebuild_start()
389 trs->trso_failed_sd = fsd; in g_raid_tr_raid1_rebuild_start()
390 G_RAID_DEBUG1(0, vol->v_softc, in g_raid_tr_raid1_rebuild_start()
391 "Subdisk %s:%d-%s rebuild start at %jd.", in g_raid_tr_raid1_rebuild_start()
392 fsd->sd_volume->v_name, fsd->sd_pos, in g_raid_tr_raid1_rebuild_start()
393 fsd->sd_disk ? g_raid_get_diskname(fsd->sd_disk) : "[none]", in g_raid_tr_raid1_rebuild_start()
394 trs->trso_failed_sd->sd_rebuild_pos); in g_raid_tr_raid1_rebuild_start()
395 trs->trso_type = TR_RAID1_REBUILD; in g_raid_tr_raid1_rebuild_start()
396 trs->trso_buffer = malloc(g_raid1_rebuild_slab, M_TR_RAID1, M_WAITOK); in g_raid_tr_raid1_rebuild_start()
397 trs->trso_meta_update = g_raid1_rebuild_meta_update; in g_raid_tr_raid1_rebuild_start()
403 struct g_raid_subdisk *sd) in g_raid_tr_raid1_maybe_rebuild() argument
415 vol = tr->tro_volume; in g_raid_tr_raid1_maybe_rebuild()
417 if (trs->trso_stopping) in g_raid_tr_raid1_maybe_rebuild()
422 switch(trs->trso_type) { in g_raid_tr_raid1_maybe_rebuild()
436 if (na == 0 || nr == 0 || trs->trso_failed_sd == sd) in g_raid_tr_raid1_maybe_rebuild()
446 struct g_raid_subdisk *sd, u_int event) in g_raid_tr_event_raid1() argument
449 g_raid_tr_update_state_raid1(tr->tro_volume, sd); in g_raid_tr_event_raid1()
460 vol = tr->tro_volume; in g_raid_tr_start_raid1()
461 trs->trso_starting = 0; in g_raid_tr_start_raid1()
473 vol = tr->tro_volume; in g_raid_tr_stop_raid1()
474 trs->trso_starting = 0; in g_raid_tr_stop_raid1()
475 trs->trso_stopping = 1; in g_raid_tr_stop_raid1()
484 #define ABS(x) (((x) >= 0) ? (x) : (-(x)))
489 struct g_raid_subdisk *sd, *best; in g_raid_tr_raid1_select_read_disk() local
494 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_tr_raid1_select_read_disk()
495 sd = &vol->v_subdisks[i]; in g_raid_tr_raid1_select_read_disk()
496 if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE && in g_raid_tr_raid1_select_read_disk()
497 ((sd->sd_state != G_RAID_SUBDISK_S_REBUILD && in g_raid_tr_raid1_select_read_disk()
498 sd->sd_state != G_RAID_SUBDISK_S_RESYNC) || in g_raid_tr_raid1_select_read_disk()
499 bp->bio_offset + bp->bio_length > sd->sd_rebuild_pos)) in g_raid_tr_raid1_select_read_disk()
503 prio = G_RAID_SUBDISK_LOAD(sd); in g_raid_tr_raid1_select_read_disk()
504 prio += min(sd->sd_recovery, 255) << 22; in g_raid_tr_raid1_select_read_disk()
505 prio += (G_RAID_SUBDISK_S_ACTIVE - sd->sd_state) << 16; in g_raid_tr_raid1_select_read_disk()
506 /* If disk head is precisely in position - highly prefer it. */ in g_raid_tr_raid1_select_read_disk()
507 if (G_RAID_SUBDISK_POS(sd) == bp->bio_offset) in g_raid_tr_raid1_select_read_disk()
508 prio -= 2 * G_RAID_SUBDISK_LOAD_SCALE; in g_raid_tr_raid1_select_read_disk()
510 /* If disk head is close to position - prefer it. */ in g_raid_tr_raid1_select_read_disk()
511 if (ABS(G_RAID_SUBDISK_POS(sd) - bp->bio_offset) < in g_raid_tr_raid1_select_read_disk()
513 prio -= 1 * G_RAID_SUBDISK_LOAD_SCALE; in g_raid_tr_raid1_select_read_disk()
515 best = sd; in g_raid_tr_raid1_select_read_disk()
525 struct g_raid_subdisk *sd; in g_raid_tr_iostart_raid1_read() local
528 sd = g_raid_tr_raid1_select_read_disk(tr->tro_volume, bp, 0); in g_raid_tr_iostart_raid1_read()
529 KASSERT(sd != NULL, ("No active disks in volume %s.", in g_raid_tr_iostart_raid1_read()
530 tr->tro_volume->v_name)); in g_raid_tr_iostart_raid1_read()
538 g_raid_subdisk_iostart(sd, cbp); in g_raid_tr_iostart_raid1_read()
545 struct g_raid_subdisk *sd; in g_raid_tr_iostart_raid1_write() local
550 vol = tr->tro_volume; in g_raid_tr_iostart_raid1_write()
557 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_tr_iostart_raid1_write()
558 sd = &vol->v_subdisks[i]; in g_raid_tr_iostart_raid1_write()
559 switch (sd->sd_state) { in g_raid_tr_iostart_raid1_write()
568 if (bp->bio_offset >= sd->sd_rebuild_pos) in g_raid_tr_iostart_raid1_write()
586 cbp->bio_caller1 = sd; in g_raid_tr_iostart_raid1_write()
590 sd = cbp->bio_caller1; in g_raid_tr_iostart_raid1_write()
591 cbp->bio_caller1 = NULL; in g_raid_tr_iostart_raid1_write()
592 g_raid_subdisk_iostart(sd, cbp); in g_raid_tr_iostart_raid1_write()
598 if (bp->bio_error == 0) in g_raid_tr_iostart_raid1_write()
599 bp->bio_error = ENOMEM; in g_raid_tr_iostart_raid1_write()
600 g_raid_iodone(bp, bp->bio_error); in g_raid_tr_iostart_raid1_write()
609 vol = tr->tro_volume; in g_raid_tr_iostart_raid1()
611 if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL && in g_raid_tr_iostart_raid1()
612 vol->v_state != G_RAID_VOLUME_S_SUBOPTIMAL && in g_raid_tr_iostart_raid1()
613 vol->v_state != G_RAID_VOLUME_S_DEGRADED) { in g_raid_tr_iostart_raid1()
623 if (trs->trso_failed_sd != NULL && in g_raid_tr_iostart_raid1()
624 !(bp->bio_cflags & G_RAID_BIO_FLAG_SPECIAL)) { in g_raid_tr_iostart_raid1()
626 trs->trso_recover_slabs = 0; in g_raid_tr_iostart_raid1()
627 if (--trs->trso_fair_io <= 0) { in g_raid_tr_iostart_raid1()
628 trs->trso_fair_io = g_raid1_rebuild_fair_io; in g_raid_tr_iostart_raid1()
632 switch (bp->bio_cmd) { in g_raid_tr_iostart_raid1()
646 bp->bio_cmd, vol->v_name)); in g_raid_tr_iostart_raid1()
653 struct g_raid_subdisk *sd, struct bio *bp) in g_raid_tr_iodone_raid1() argument
664 vol = tr->tro_volume; in g_raid_tr_iodone_raid1()
665 if (bp->bio_cflags & G_RAID_BIO_FLAG_SYNC) { in g_raid_tr_iodone_raid1()
680 if (trs->trso_type == TR_RAID1_REBUILD) { in g_raid_tr_iodone_raid1()
681 if (bp->bio_cmd == BIO_READ) { in g_raid_tr_iodone_raid1()
683 if (trs->trso_flags & TR_RAID1_F_ABORT) { in g_raid_tr_iodone_raid1()
684 trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; in g_raid_tr_iodone_raid1()
690 if (bp->bio_error != 0) { in g_raid_tr_iodone_raid1()
694 bp->bio_error); in g_raid_tr_iodone_raid1()
703 bp->bio_error); in g_raid_tr_iodone_raid1()
704 bp->bio_cmd = BIO_WRITE; in g_raid_tr_iodone_raid1()
705 bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; in g_raid_tr_iodone_raid1()
707 g_raid_subdisk_iostart(trs->trso_failed_sd, bp); in g_raid_tr_iodone_raid1()
717 bp->bio_error); in g_raid_tr_iodone_raid1()
718 nsd = trs->trso_failed_sd; in g_raid_tr_iodone_raid1()
719 if (bp->bio_error != 0 || in g_raid_tr_iodone_raid1()
720 trs->trso_flags & TR_RAID1_F_ABORT) { in g_raid_tr_iodone_raid1()
721 if ((trs->trso_flags & in g_raid_tr_iodone_raid1()
723 g_raid_tr_raid1_fail_disk(sd->sd_softc, in g_raid_tr_iodone_raid1()
724 nsd, nsd->sd_disk); in g_raid_tr_iodone_raid1()
726 trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; in g_raid_tr_iodone_raid1()
731 nsd = trs->trso_failed_sd; in g_raid_tr_iodone_raid1()
732 trs->trso_flags &= ~TR_RAID1_F_LOCKED; in g_raid_tr_iodone_raid1()
733 g_raid_unlock_range(sd->sd_volume, in g_raid_tr_iodone_raid1()
734 bp->bio_offset, bp->bio_length); in g_raid_tr_iodone_raid1()
735 nsd->sd_rebuild_pos += bp->bio_length; in g_raid_tr_iodone_raid1()
736 if (nsd->sd_rebuild_pos >= nsd->sd_size) { in g_raid_tr_iodone_raid1()
742 if (trs->trso_stopping) { in g_raid_tr_iodone_raid1()
743 trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; in g_raid_tr_iodone_raid1()
748 if (--trs->trso_meta_update <= 0) { in g_raid_tr_iodone_raid1()
749 g_raid_write_metadata(vol->v_softc, in g_raid_tr_iodone_raid1()
750 vol, nsd, nsd->sd_disk); in g_raid_tr_iodone_raid1()
751 trs->trso_meta_update = in g_raid_tr_iodone_raid1()
754 trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; in g_raid_tr_iodone_raid1()
755 if (--trs->trso_recover_slabs <= 0) in g_raid_tr_iodone_raid1()
759 } else if (trs->trso_type == TR_RAID1_RESYNC) { in g_raid_tr_iodone_raid1()
761 * read good sd, read bad sd in parallel. when both in g_raid_tr_iodone_raid1()
769 pbp = bp->bio_parent; in g_raid_tr_iodone_raid1()
770 pbp->bio_inbed++; in g_raid_tr_iodone_raid1()
771 if (bp->bio_cmd == BIO_READ && bp->bio_error != 0) { in g_raid_tr_iodone_raid1()
777 sd->sd_disk->d_read_errs++; in g_raid_tr_iodone_raid1()
780 bp->bio_error, sd->sd_disk->d_read_errs); in g_raid_tr_iodone_raid1()
789 if (sd->sd_disk->d_read_errs > g_raid_read_err_thresh) { in g_raid_tr_iodone_raid1()
790 g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk); in g_raid_tr_iodone_raid1()
791 if (pbp->bio_children == 1) in g_raid_tr_iodone_raid1()
798 mask = (uintptr_t *)(&pbp->bio_driver2); in g_raid_tr_iodone_raid1()
799 if (pbp->bio_children == 1) { in g_raid_tr_iodone_raid1()
801 pbp->bio_driver1 = do_write ? sd : NULL; in g_raid_tr_iodone_raid1()
804 *mask |= 1 << sd->sd_pos; in g_raid_tr_iodone_raid1()
809 nsd->sd_pos); in g_raid_tr_iodone_raid1()
810 if (pbp->bio_children == 2 && do_write) { in g_raid_tr_iodone_raid1()
811 sd->sd_recovery++; in g_raid_tr_iodone_raid1()
812 cbp->bio_caller1 = nsd; in g_raid_tr_iodone_raid1()
813 pbp->bio_pflags = G_RAID_BIO_FLAG_LOCKED; in g_raid_tr_iodone_raid1()
815 g_raid_lock_range(sd->sd_volume, in g_raid_tr_iodone_raid1()
816 cbp->bio_offset, cbp->bio_length, pbp, cbp); in g_raid_tr_iodone_raid1()
830 if (bp->bio_cmd == BIO_READ && in g_raid_tr_iodone_raid1()
831 bp->bio_error == 0 && in g_raid_tr_iodone_raid1()
832 pbp->bio_children > 1 && in g_raid_tr_iodone_raid1()
833 pbp->bio_driver1 != NULL) { in g_raid_tr_iodone_raid1()
849 cbp->bio_cmd = BIO_WRITE; in g_raid_tr_iodone_raid1()
850 cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP; in g_raid_tr_iodone_raid1()
853 g_raid_subdisk_iostart(pbp->bio_driver1, cbp); in g_raid_tr_iodone_raid1()
857 if (pbp->bio_pflags & G_RAID_BIO_FLAG_LOCKED) { in g_raid_tr_iodone_raid1()
867 if (bp->bio_cmd == BIO_WRITE && bp->bio_error) { in g_raid_tr_iodone_raid1()
870 g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk); in g_raid_tr_iodone_raid1()
871 bp->bio_error = 0; in g_raid_tr_iodone_raid1()
873 if (pbp->bio_driver1 != NULL) { in g_raid_tr_iodone_raid1()
874 ((struct g_raid_subdisk *)pbp->bio_driver1) in g_raid_tr_iodone_raid1()
875 ->sd_recovery--; in g_raid_tr_iodone_raid1()
877 G_RAID_LOGREQ(2, bp, "REMAP done %d.", bp->bio_error); in g_raid_tr_iodone_raid1()
878 g_raid_unlock_range(sd->sd_volume, bp->bio_offset, in g_raid_tr_iodone_raid1()
879 bp->bio_length); in g_raid_tr_iodone_raid1()
881 if (pbp->bio_cmd != BIO_READ) { in g_raid_tr_iodone_raid1()
882 if (pbp->bio_inbed == 1 || pbp->bio_error != 0) in g_raid_tr_iodone_raid1()
883 pbp->bio_error = bp->bio_error; in g_raid_tr_iodone_raid1()
884 if (pbp->bio_cmd == BIO_WRITE && bp->bio_error != 0) { in g_raid_tr_iodone_raid1()
886 g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk); in g_raid_tr_iodone_raid1()
888 error = pbp->bio_error; in g_raid_tr_iodone_raid1()
890 error = bp->bio_error; in g_raid_tr_iodone_raid1()
892 if (pbp->bio_children == pbp->bio_inbed) { in g_raid_tr_iodone_raid1()
893 pbp->bio_completed = pbp->bio_length; in g_raid_tr_iodone_raid1()
903 struct g_raid_subdisk *sd; in g_raid_tr_kerneldump_raid1() local
906 vol = tr->tro_volume; in g_raid_tr_kerneldump_raid1()
909 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_tr_kerneldump_raid1()
910 sd = &vol->v_subdisks[i]; in g_raid_tr_kerneldump_raid1()
911 switch (sd->sd_state) { in g_raid_tr_kerneldump_raid1()
920 if (offset >= sd->sd_rebuild_pos) in g_raid_tr_kerneldump_raid1()
935 error = g_raid_subdisk_kerneldump(sd, virtual, offset, length); in g_raid_tr_kerneldump_raid1()
946 struct g_raid_subdisk *sd; in g_raid_tr_locked_raid1() local
949 sd = (struct g_raid_subdisk *)bp->bio_caller1; in g_raid_tr_locked_raid1()
950 g_raid_subdisk_iostart(sd, bp); in g_raid_tr_locked_raid1()
961 trs->trso_fair_io = g_raid1_rebuild_fair_io; in g_raid_tr_idle_raid1()
962 trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle; in g_raid_tr_idle_raid1()
963 if (trs->trso_type == TR_RAID1_REBUILD) in g_raid_tr_idle_raid1()
975 if (trs->trso_buffer != NULL) { in g_raid_tr_free_raid1()
976 free(trs->trso_buffer, M_TR_RAID1); in g_raid_tr_free_raid1()
977 trs->trso_buffer = NULL; in g_raid_tr_free_raid1()