Lines Matching refs:vol

136 static int g_raid_tr_raid1e_select_read_disk(struct g_raid_volume *vol,
140 V2P(struct g_raid_volume *vol, off_t virt, in V2P() argument
146 strip_size = vol->v_strip_size; in V2P()
152 *disk = (nstrip * N) % vol->v_disks_count; in V2P()
154 *offset = ((nstrip * N) / vol->v_disks_count) * strip_size; in V2P()
158 P2V(struct g_raid_volume *vol, int disk, off_t offset, in P2V() argument
164 strip_size = vol->v_strip_size; in P2V()
168 nstrip = (offset / strip_size) * vol->v_disks_count + disk; in P2V()
176 g_raid_tr_taste_raid1e(struct g_raid_tr_object *tr, struct g_raid_volume *vol) in g_raid_tr_taste_raid1e() argument
189 g_raid_tr_update_state_raid1e_even(struct g_raid_volume *vol) in g_raid_tr_update_state_raid1e_even() argument
195 sc = vol->v_softc; in g_raid_tr_update_state_raid1e_even()
197 for (i = 0; i < vol->v_disks_count / N; i++) { in g_raid_tr_update_state_raid1e_even()
198 bestsd = &vol->v_subdisks[i * N]; in g_raid_tr_update_state_raid1e_even()
200 sd = &vol->v_subdisks[i * N + j]; in g_raid_tr_update_state_raid1e_even()
214 vol->v_name, bestsd->sd_pos, in g_raid_tr_update_state_raid1e_even()
219 vol, bestsd, bestsd->sd_disk); in g_raid_tr_update_state_raid1e_even()
221 worstsd = &vol->v_subdisks[i * N]; in g_raid_tr_update_state_raid1e_even()
223 sd = &vol->v_subdisks[i * N + j]; in g_raid_tr_update_state_raid1e_even()
242 g_raid_tr_update_state_raid1e_odd(struct g_raid_volume *vol) in g_raid_tr_update_state_raid1e_odd() argument
248 sc = vol->v_softc; in g_raid_tr_update_state_raid1e_odd()
249 if (g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE) == in g_raid_tr_update_state_raid1e_odd()
250 vol->v_disks_count) in g_raid_tr_update_state_raid1e_odd()
252 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_tr_update_state_raid1e_odd()
253 sd = &vol->v_subdisks[i]; in g_raid_tr_update_state_raid1e_odd()
258 vol->v_name, sd->sd_pos, in g_raid_tr_update_state_raid1e_odd()
262 g_raid_write_metadata(sc, vol, sd, sd->sd_disk); in g_raid_tr_update_state_raid1e_odd()
266 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_tr_update_state_raid1e_odd()
267 bestsd = &vol->v_subdisks[i]; in g_raid_tr_update_state_raid1e_odd()
268 worstsd = &vol->v_subdisks[i]; in g_raid_tr_update_state_raid1e_odd()
270 sd = &vol->v_subdisks[(i + j) % vol->v_disks_count]; in g_raid_tr_update_state_raid1e_odd()
296 g_raid_tr_update_state_raid1e(struct g_raid_volume *vol, in g_raid_tr_update_state_raid1e() argument
303 sc = vol->v_softc; in g_raid_tr_update_state_raid1e()
304 trs = (struct g_raid_tr_raid1e_object *)vol->v_tr; in g_raid_tr_update_state_raid1e()
311 if ((vol->v_disks_count % N) == 0) in g_raid_tr_update_state_raid1e()
312 s = g_raid_tr_update_state_raid1e_even(vol); in g_raid_tr_update_state_raid1e()
314 s = g_raid_tr_update_state_raid1e_odd(vol); in g_raid_tr_update_state_raid1e()
316 if (s != vol->v_state) { in g_raid_tr_update_state_raid1e()
317 g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? in g_raid_tr_update_state_raid1e()
320 g_raid_change_volume_state(vol, s); in g_raid_tr_update_state_raid1e()
322 g_raid_write_metadata(sc, vol, NULL, NULL); in g_raid_tr_update_state_raid1e()
325 g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd); in g_raid_tr_update_state_raid1e()
333 struct g_raid_volume *vol; in g_raid_tr_raid1e_fail_disk() local
335 vol = sd->sd_volume; in g_raid_tr_raid1e_fail_disk()
345 if ((g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE) + in g_raid_tr_raid1e_fail_disk()
346 g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_RESYNC) + in g_raid_tr_raid1e_fail_disk()
347 g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_STALE) + in g_raid_tr_raid1e_fail_disk()
348 g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_UNINITIALIZED) < in g_raid_tr_raid1e_fail_disk()
349 vol->v_disks_count) && in g_raid_tr_raid1e_fail_disk()
358 struct g_raid_volume *vol; in g_raid_tr_raid1e_rebuild_done() local
361 vol = trs->trso_base.tro_volume; in g_raid_tr_raid1e_rebuild_done()
363 g_raid_write_metadata(vol->v_softc, vol, sd, sd->sd_disk); in g_raid_tr_raid1e_rebuild_done()
370 g_raid_tr_update_state_raid1e(vol, NULL); in g_raid_tr_raid1e_rebuild_done()
395 struct g_raid_volume *vol; in g_raid_tr_raid1e_rebuild_abort() local
397 vol = tr->tro_volume; in g_raid_tr_raid1e_rebuild_abort()
401 G_RAID_DEBUG1(1, vol->v_softc, in g_raid_tr_raid1e_rebuild_abort()
407 G_RAID_DEBUG1(0, vol->v_softc, in g_raid_tr_raid1e_rebuild_abort()
426 struct g_raid_volume *vol; in g_raid_tr_raid1e_rebuild_some() local
435 vol = tr->tro_volume; in g_raid_tr_raid1e_rebuild_some()
436 sc = vol->v_softc; in g_raid_tr_raid1e_rebuild_some()
445 P2V(vol, sd->sd_pos, sd->sd_rebuild_pos, &virtual, &copy); in g_raid_tr_raid1e_rebuild_some()
447 V2P(vol, virtual, &disk, &offset, &start); in g_raid_tr_raid1e_rebuild_some()
451 if ((vol->v_disks_count % N) != 0) in g_raid_tr_raid1e_rebuild_some()
452 len = MIN(len, vol->v_strip_size - start); in g_raid_tr_raid1e_rebuild_some()
454 best = g_raid_tr_raid1e_select_read_disk(vol, disk, in g_raid_tr_raid1e_rebuild_some()
473 ((disk + best >= vol->v_disks_count) ? vol->v_strip_size : 0); in g_raid_tr_raid1e_rebuild_some()
478 bp->bio_caller1 = &vol->v_subdisks[(disk + best) % vol->v_disks_count]; in g_raid_tr_raid1e_rebuild_some()
484 if (start + len > vol->v_strip_size) { in g_raid_tr_raid1e_rebuild_some()
485 P2V(vol, sd->sd_pos, sd->sd_rebuild_pos + len, &vend, &copy); in g_raid_tr_raid1e_rebuild_some()
499 struct g_raid_volume *vol; in g_raid_tr_raid1e_rebuild_start() local
503 vol = tr->tro_volume; in g_raid_tr_raid1e_rebuild_start()
506 G_RAID_DEBUG1(1, vol->v_softc, in g_raid_tr_raid1e_rebuild_start()
511 sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_RESYNC); in g_raid_tr_raid1e_rebuild_start()
513 sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_REBUILD); in g_raid_tr_raid1e_rebuild_start()
515 sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_STALE); in g_raid_tr_raid1e_rebuild_start()
520 g_raid_write_metadata(vol->v_softc, vol, sd, NULL); in g_raid_tr_raid1e_rebuild_start()
522 sd = g_raid_get_subdisk(vol, in g_raid_tr_raid1e_rebuild_start()
525 sd = g_raid_get_subdisk(vol, in g_raid_tr_raid1e_rebuild_start()
531 g_raid_write_metadata(vol->v_softc, in g_raid_tr_raid1e_rebuild_start()
532 vol, sd, NULL); in g_raid_tr_raid1e_rebuild_start()
537 G_RAID_DEBUG1(1, vol->v_softc, in g_raid_tr_raid1e_rebuild_start()
542 G_RAID_DEBUG1(0, vol->v_softc, in g_raid_tr_raid1e_rebuild_start()
557 struct g_raid_volume *vol; in g_raid_tr_raid1e_maybe_rebuild() local
561 vol = tr->tro_volume; in g_raid_tr_raid1e_maybe_rebuild()
565 nr = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_REBUILD) + in g_raid_tr_raid1e_maybe_rebuild()
566 g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_RESYNC); in g_raid_tr_raid1e_maybe_rebuild()
569 if (vol->v_state < G_RAID_VOLUME_S_DEGRADED) in g_raid_tr_raid1e_maybe_rebuild()
572 nr = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_NEW) + in g_raid_tr_raid1e_maybe_rebuild()
573 g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_STALE) + in g_raid_tr_raid1e_maybe_rebuild()
574 g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_UNINITIALIZED); in g_raid_tr_raid1e_maybe_rebuild()
581 if (vol->v_state < G_RAID_VOLUME_S_DEGRADED || nr == 0 || in g_raid_tr_raid1e_maybe_rebuild()
603 struct g_raid_volume *vol; in g_raid_tr_start_raid1e() local
606 vol = tr->tro_volume; in g_raid_tr_start_raid1e()
608 g_raid_tr_update_state_raid1e(vol, NULL); in g_raid_tr_start_raid1e()
616 struct g_raid_volume *vol; in g_raid_tr_stop_raid1e() local
619 vol = tr->tro_volume; in g_raid_tr_stop_raid1e()
622 g_raid_tr_update_state_raid1e(vol, NULL); in g_raid_tr_stop_raid1e()
632 g_raid_tr_raid1e_select_read_disk(struct g_raid_volume *vol, in g_raid_tr_raid1e_select_read_disk() argument
642 sd = &vol->v_subdisks[(no + i) % vol->v_disks_count]; in g_raid_tr_raid1e_select_read_disk()
644 if (no + i >= vol->v_disks_count) in g_raid_tr_raid1e_select_read_disk()
645 offset += vol->v_strip_size; in g_raid_tr_raid1e_select_read_disk()
687 struct g_raid_volume *vol; in g_raid_tr_iostart_raid1e_read() local
696 vol = tr->tro_volume; in g_raid_tr_iostart_raid1e_read()
701 strip_size = vol->v_strip_size; in g_raid_tr_iostart_raid1e_read()
702 V2P(vol, bp->bio_offset, &no, &offset, &start); in g_raid_tr_iostart_raid1e_read()
707 best = g_raid_tr_raid1e_select_read_disk(vol, in g_raid_tr_iostart_raid1e_read()
710 vol->v_name)); in g_raid_tr_iostart_raid1e_read()
712 if (no >= vol->v_disks_count) { in g_raid_tr_iostart_raid1e_read()
713 no -= vol->v_disks_count; in g_raid_tr_iostart_raid1e_read()
729 cbp->bio_caller1 = &vol->v_subdisks[no]; in g_raid_tr_iostart_raid1e_read()
732 if (no >= vol->v_disks_count) { in g_raid_tr_iostart_raid1e_read()
733 no -= vol->v_disks_count; in g_raid_tr_iostart_raid1e_read()
757 struct g_raid_volume *vol; in g_raid_tr_iostart_raid1e_write() local
766 vol = tr->tro_volume; in g_raid_tr_iostart_raid1e_write()
771 strip_size = vol->v_strip_size; in g_raid_tr_iostart_raid1e_write()
772 V2P(vol, bp->bio_offset, &no, &offset, &start); in g_raid_tr_iostart_raid1e_write()
778 sd = &vol->v_subdisks[no]; in g_raid_tr_iostart_raid1e_write()
808 if (++no >= vol->v_disks_count) { in g_raid_tr_iostart_raid1e_write()
835 struct g_raid_volume *vol; in g_raid_tr_iostart_raid1e() local
838 vol = tr->tro_volume; in g_raid_tr_iostart_raid1e()
840 if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL && in g_raid_tr_iostart_raid1e()
841 vol->v_state != G_RAID_VOLUME_S_SUBOPTIMAL && in g_raid_tr_iostart_raid1e()
842 vol->v_state != G_RAID_VOLUME_S_DEGRADED) { in g_raid_tr_iostart_raid1e()
875 bp->bio_cmd, vol->v_name)); in g_raid_tr_iostart_raid1e()
886 struct g_raid_volume *vol; in g_raid_tr_iodone_raid1e() local
894 vol = tr->tro_volume; in g_raid_tr_iodone_raid1e()
964 g_raid_write_metadata(vol->v_softc, in g_raid_tr_iodone_raid1e()
965 vol, nsd, nsd->sd_disk); in g_raid_tr_iodone_raid1e()
969 if ((vol->v_disks_count % N) != 0 && in g_raid_tr_iodone_raid1e()
970 vol->v_strip_size < in g_raid_tr_iodone_raid1e()
975 vol->v_strip_size; in g_raid_tr_iodone_raid1e()
1021 P2V(vol, sd->sd_pos, bp->bio_offset, &virtual, &copy); in g_raid_tr_iodone_raid1e()
1022 V2P(vol, virtual, &disk, &offset, &start); in g_raid_tr_iodone_raid1e()
1026 best = g_raid_tr_raid1e_select_read_disk(vol, in g_raid_tr_iodone_raid1e()
1030 if (disk >= vol->v_disks_count) { in g_raid_tr_iodone_raid1e()
1031 disk -= vol->v_disks_count; in g_raid_tr_iodone_raid1e()
1032 offset += vol->v_strip_size; in g_raid_tr_iodone_raid1e()
1041 nsd = &vol->v_subdisks[disk]; in g_raid_tr_iodone_raid1e()
1073 P2V(vol, sd->sd_pos, bp->bio_offset, &virtual, &copy); in g_raid_tr_iodone_raid1e()
1074 V2P(vol, virtual, &disk, &offset, &start); in g_raid_tr_iodone_raid1e()
1077 best = g_raid_tr_raid1e_select_read_disk(vol, in g_raid_tr_iodone_raid1e()
1081 if (disk >= vol->v_disks_count) { in g_raid_tr_iodone_raid1e()
1082 disk -= vol->v_disks_count; in g_raid_tr_iodone_raid1e()
1083 offset += vol->v_strip_size; in g_raid_tr_iodone_raid1e()
1092 g_raid_subdisk_iostart(&vol->v_subdisks[disk], cbp); in g_raid_tr_iodone_raid1e()
1108 P2V(vol, sd->sd_pos, bp->bio_offset, &virtual, &copy); in g_raid_tr_iodone_raid1e()
1109 V2P(vol, virtual, &disk, &offset, &start); in g_raid_tr_iodone_raid1e()
1113 vol->v_subdisks[(disk + copy) % in g_raid_tr_iodone_raid1e()
1114 vol->v_disks_count].sd_recovery--; in g_raid_tr_iodone_raid1e()
1147 struct g_raid_volume *vol; in g_raid_tr_kerneldump_raid1e() local
1155 vol = tr->tro_volume; in g_raid_tr_kerneldump_raid1e()
1157 strip_size = vol->v_strip_size; in g_raid_tr_kerneldump_raid1e()
1158 V2P(vol, boffset, &no, &offset, &start); in g_raid_tr_kerneldump_raid1e()
1164 sd = &vol->v_subdisks[no]; in g_raid_tr_kerneldump_raid1e()
1182 if (++no >= vol->v_disks_count) { in g_raid_tr_kerneldump_raid1e()
1211 struct g_raid_volume *vol; in g_raid_tr_idle_raid1e() local
1213 vol = tr->tro_volume; in g_raid_tr_idle_raid1e()
1218 if ((vol->v_disks_count % N) != 0 && in g_raid_tr_idle_raid1e()
1219 vol->v_strip_size < g_raid1e_rebuild_slab) { in g_raid_tr_idle_raid1e()
1221 trs->trso_recover_slabs /= vol->v_strip_size; in g_raid_tr_idle_raid1e()