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
87 if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_SINGLE && in g_raid_tr_taste_concat()
88 tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_CONCAT && in g_raid_tr_taste_concat()
89 !(tr->tro_volume->v_disks_count == 1 && in g_raid_tr_taste_concat()
90 tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_UNKNOWN)) in g_raid_tr_taste_concat()
92 trs->trso_starting = 1; in g_raid_tr_taste_concat()
105 sc = vol->v_softc; in g_raid_tr_update_state_concat()
106 trs = (struct g_raid_tr_concat_object *)vol->v_tr; in g_raid_tr_update_state_concat()
107 if (trs->trso_stopped) in g_raid_tr_update_state_concat()
109 else if (trs->trso_starting) in g_raid_tr_update_state_concat()
114 if (n + f == vol->v_disks_count) { in g_raid_tr_update_state_concat()
122 if (s != vol->v_state) { in g_raid_tr_update_state_concat()
127 if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT && in g_raid_tr_update_state_concat()
129 !G_RAID_VOLUME_S_ALIVE(vol->v_state)) { in g_raid_tr_update_state_concat()
131 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_tr_update_state_concat()
132 if (vol->v_subdisks[i].sd_state != in g_raid_tr_update_state_concat()
134 size += vol->v_subdisks[i].sd_size; in g_raid_tr_update_state_concat()
136 vol->v_mediasize = size; in g_raid_tr_update_state_concat()
143 if (!trs->trso_starting && !trs->trso_stopped) in g_raid_tr_update_state_concat()
151 struct g_raid_subdisk *sd, u_int event) in g_raid_tr_event_concat() argument
159 vol = tr->tro_volume; in g_raid_tr_event_concat()
160 sc = vol->v_softc; in g_raid_tr_event_concat()
162 state = sd->sd_state; in g_raid_tr_event_concat()
168 vol->v_name, sd->sd_pos, in g_raid_tr_event_concat()
169 g_raid_subdisk_state2str(sd->sd_state)); in g_raid_tr_event_concat()
170 g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); in g_raid_tr_event_concat()
172 if (state != sd->sd_state && in g_raid_tr_event_concat()
173 !trs->trso_starting && !trs->trso_stopped) in g_raid_tr_event_concat()
174 g_raid_write_metadata(sc, vol, sd, NULL); in g_raid_tr_event_concat()
186 vol = tr->tro_volume; in g_raid_tr_start_concat()
187 trs->trso_starting = 0; in g_raid_tr_start_concat()
199 vol = tr->tro_volume; in g_raid_tr_stop_concat()
200 trs->trso_starting = 0; in g_raid_tr_stop_concat()
201 trs->trso_stopped = 1; in g_raid_tr_stop_concat()
210 struct g_raid_subdisk *sd; in g_raid_tr_iostart_concat() local
215 u_int no; in g_raid_tr_iostart_concat() local
217 vol = tr->tro_volume; in g_raid_tr_iostart_concat()
218 if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL && in g_raid_tr_iostart_concat()
219 vol->v_state != G_RAID_VOLUME_S_SUBOPTIMAL) { in g_raid_tr_iostart_concat()
223 if (bp->bio_cmd == BIO_FLUSH || bp->bio_cmd == BIO_SPEEDUP) { in g_raid_tr_iostart_concat()
228 offset = bp->bio_offset; in g_raid_tr_iostart_concat()
229 remain = bp->bio_length; in g_raid_tr_iostart_concat()
230 if ((bp->bio_flags & BIO_UNMAPPED) != 0) in g_raid_tr_iostart_concat()
233 addr = bp->bio_data; in g_raid_tr_iostart_concat()
234 no = 0; in g_raid_tr_iostart_concat()
235 while (no < vol->v_disks_count && in g_raid_tr_iostart_concat()
236 offset >= vol->v_subdisks[no].sd_size) { in g_raid_tr_iostart_concat()
237 offset -= vol->v_subdisks[no].sd_size; in g_raid_tr_iostart_concat()
238 no++; in g_raid_tr_iostart_concat()
240 if (no >= vol->v_disks_count) { in g_raid_tr_iostart_concat()
246 sd = &vol->v_subdisks[no]; in g_raid_tr_iostart_concat()
247 length = MIN(sd->sd_size - offset, remain); in g_raid_tr_iostart_concat()
251 cbp->bio_offset = offset; in g_raid_tr_iostart_concat()
252 cbp->bio_length = length; in g_raid_tr_iostart_concat()
253 if ((bp->bio_flags & BIO_UNMAPPED) != 0 && in g_raid_tr_iostart_concat()
254 bp->bio_cmd != BIO_DELETE) { in g_raid_tr_iostart_concat()
255 cbp->bio_ma_offset += (uintptr_t)addr; in g_raid_tr_iostart_concat()
256 cbp->bio_ma += cbp->bio_ma_offset / PAGE_SIZE; in g_raid_tr_iostart_concat()
257 cbp->bio_ma_offset %= PAGE_SIZE; in g_raid_tr_iostart_concat()
258 cbp->bio_ma_n = round_page(cbp->bio_ma_offset + in g_raid_tr_iostart_concat()
259 cbp->bio_length) / PAGE_SIZE; in g_raid_tr_iostart_concat()
261 cbp->bio_data = addr; in g_raid_tr_iostart_concat()
262 cbp->bio_caller1 = sd; in g_raid_tr_iostart_concat()
264 remain -= length; in g_raid_tr_iostart_concat()
265 if (bp->bio_cmd != BIO_DELETE) in g_raid_tr_iostart_concat()
268 no++; in g_raid_tr_iostart_concat()
269 } while (remain > 0 && no < vol->v_disks_count); in g_raid_tr_iostart_concat()
270 bp->bio_completed = bp->bio_length - remain; in g_raid_tr_iostart_concat()
272 sd = cbp->bio_caller1; in g_raid_tr_iostart_concat()
273 cbp->bio_caller1 = NULL; in g_raid_tr_iostart_concat()
274 g_raid_subdisk_iostart(sd, cbp); in g_raid_tr_iostart_concat()
280 if (bp->bio_error == 0) in g_raid_tr_iostart_concat()
281 bp->bio_error = ENOMEM; in g_raid_tr_iostart_concat()
282 g_raid_iodone(bp, bp->bio_error); in g_raid_tr_iostart_concat()
290 struct g_raid_subdisk *sd; in g_raid_tr_kerneldump_concat() local
293 int error, no; in g_raid_tr_kerneldump_concat() local
295 vol = tr->tro_volume; in g_raid_tr_kerneldump_concat()
296 if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL) in g_raid_tr_kerneldump_concat()
302 no = 0; in g_raid_tr_kerneldump_concat()
303 while (no < vol->v_disks_count && in g_raid_tr_kerneldump_concat()
304 offset >= vol->v_subdisks[no].sd_size) { in g_raid_tr_kerneldump_concat()
305 offset -= vol->v_subdisks[no].sd_size; in g_raid_tr_kerneldump_concat()
306 no++; in g_raid_tr_kerneldump_concat()
308 if (no >= vol->v_disks_count) in g_raid_tr_kerneldump_concat()
311 sd = &vol->v_subdisks[no]; in g_raid_tr_kerneldump_concat()
312 length = MIN(sd->sd_size - offset, remain); in g_raid_tr_kerneldump_concat()
313 error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], in g_raid_tr_kerneldump_concat()
317 remain -= length; in g_raid_tr_kerneldump_concat()
320 no++; in g_raid_tr_kerneldump_concat()
321 } while (remain > 0 && no < vol->v_disks_count); in g_raid_tr_kerneldump_concat()
329 struct g_raid_subdisk *sd,struct bio *bp) in g_raid_tr_iodone_concat() argument
333 pbp = bp->bio_parent; in g_raid_tr_iodone_concat()
334 if (pbp->bio_error == 0) in g_raid_tr_iodone_concat()
335 pbp->bio_error = bp->bio_error; in g_raid_tr_iodone_concat()
337 pbp->bio_inbed++; in g_raid_tr_iodone_concat()
338 if (pbp->bio_children == pbp->bio_inbed) { in g_raid_tr_iodone_concat()
339 g_raid_iodone(pbp, pbp->bio_error); in g_raid_tr_iodone_concat()