Lines Matching full:cp
80 static int g_multipath_read_metadata(struct g_consumer *cp,
82 static int g_multipath_write_metadata(struct g_consumer *cp,
127 struct g_consumer *cp; in g_multipath_good() local
130 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_good()
131 if ((cp->index & MP_BAD) == 0) in g_multipath_good()
138 g_multipath_fault(struct g_consumer *cp, int cause) in g_multipath_fault() argument
144 gp = cp->geom; in g_multipath_fault()
146 cp->index |= cause; in g_multipath_fault()
152 if (sc->sc_ndisks > 1 && lcp == cp) in g_multipath_fault()
162 if (cp != sc->sc_active) in g_multipath_fault()
184 struct g_consumer *best, *cp; in g_multipath_choose() local
191 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_choose()
192 if (cp->index & MP_BAD) in g_multipath_choose()
194 cp->index += MP_IDLE; in g_multipath_choose()
195 if (best == NULL || cp->private < best->private || in g_multipath_choose()
196 (cp->private == best->private && cp->index > best->index)) in g_multipath_choose()
197 best = cp; in g_multipath_choose()
209 struct g_consumer *cp; in g_mpd() local
213 cp = arg; in g_mpd()
214 gp = cp->geom; in g_mpd()
215 if (cp->acr > 0 || cp->acw > 0 || cp->ace > 0) { in g_mpd()
216 w = cp->acw; in g_mpd()
217 g_access(cp, -cp->acr, -cp->acw, -cp->ace); in g_mpd()
218 if (w > 0 && cp->provider != NULL && in g_mpd()
219 (cp->provider->geom->flags & G_GEOM_WITHER) == 0) { in g_mpd()
220 cp->index |= MP_WITHER; in g_mpd()
221 g_post_event(g_mpd, cp, M_WAITOK, NULL); in g_mpd()
227 if (cp->provider) { in g_mpd()
229 cp->provider->name, gp->name); in g_mpd()
231 gp->name, cp->provider->name); in g_mpd()
232 g_detach(cp); in g_mpd()
234 g_destroy_consumer(cp); in g_mpd()
241 g_multipath_orphan(struct g_consumer *cp) in g_multipath_orphan() argument
248 cp->provider->name, cp->geom->name); in g_multipath_orphan()
250 cp->geom->name, cp->provider->name); in g_multipath_orphan()
251 sc = cp->geom->softc; in g_multipath_orphan()
252 cnt = (uintptr_t *)&cp->private; in g_multipath_orphan()
255 g_multipath_fault(cp, MP_LOST); in g_multipath_orphan()
256 if (*cnt == 0 && (cp->index & MP_POSTED) == 0) { in g_multipath_orphan()
257 cp->index |= MP_POSTED; in g_multipath_orphan()
259 g_mpd(cp, 0); in g_multipath_orphan()
265 g_multipath_resize(struct g_consumer *cp) in g_multipath_resize() argument
277 gp = cp->geom; in g_multipath_resize()
278 pp = cp->provider; in g_multipath_resize()
307 error = g_multipath_read_metadata(cp, &md); in g_multipath_resize()
322 pp = cp->provider; in g_multipath_resize()
330 error = g_multipath_write_metadata(cp, &md); in g_multipath_resize()
342 struct g_consumer *cp; in g_multipath_start() local
355 cp = g_multipath_choose(gp, bp); in g_multipath_start()
356 if (cp == NULL) { in g_multipath_start()
364 cnt = (uintptr_t *)&cp->private; in g_multipath_start()
368 g_io_request(cbp, cp); in g_multipath_start()
375 struct g_consumer *cp; in g_multipath_done() local
384 cp = bp->bio_from; in g_multipath_done()
385 sc = cp->geom->softc; in g_multipath_done()
386 cnt = (uintptr_t *)&cp->private; in g_multipath_done()
389 if (*cnt == 0 && (cp->index & MP_LOST)) { in g_multipath_done()
390 if (g_post_event(g_mpd, cp, M_NOWAIT, NULL) == 0) in g_multipath_done()
391 cp->index |= MP_POSTED; in g_multipath_done()
411 struct g_consumer *cp; in g_multipath_done_error() local
426 cp = bp->bio_from; in g_multipath_done_error()
427 pp = cp->provider; in g_multipath_done_error()
428 cnt = (uintptr_t *)&cp->private; in g_multipath_done_error()
431 if ((cp->index & MP_FAIL) == 0) { in g_multipath_done_error()
436 g_multipath_fault(cp, MP_FAIL); in g_multipath_done_error()
439 if (*cnt == 0 && (cp->index & (MP_LOST | MP_POSTED)) == MP_LOST) { in g_multipath_done_error()
440 cp->index |= MP_POSTED; in g_multipath_done_error()
442 g_post_event(g_mpd, cp, M_WAITOK, NULL); in g_multipath_done_error()
490 struct g_consumer *cp, *badcp = NULL; in g_multipath_access() local
499 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_access()
500 if (cp->index & MP_WITHER) in g_multipath_access()
503 error = g_access(cp, dr, dw, de); in g_multipath_access()
505 badcp = cp; in g_multipath_access()
521 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_access()
522 if (cp == badcp) in g_multipath_access()
524 if (cp->index & MP_WITHER) in g_multipath_access()
527 (void) g_access(cp, -dr, -dw, -de); in g_multipath_access()
583 struct g_consumer *cp; in g_multipath_add_disk() local
594 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_add_disk()
595 if (cp->provider == pp) in g_multipath_add_disk()
598 if (cp) { in g_multipath_add_disk()
603 cp = g_new_consumer(gp); in g_multipath_add_disk()
604 cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; in g_multipath_add_disk()
605 cp->private = NULL; in g_multipath_add_disk()
606 cp->index = MP_NEW; in g_multipath_add_disk()
607 error = g_attach(cp, pp); in g_multipath_add_disk()
611 g_destroy_consumer(cp); in g_multipath_add_disk()
629 error = g_access(cp, acr, acw, ace); in g_multipath_add_disk()
634 g_detach(cp); in g_multipath_add_disk()
635 g_destroy_consumer(cp); in g_multipath_add_disk()
650 cp->index = 0; in g_multipath_add_disk()
656 sc->sc_active = cp; in g_multipath_add_disk()
668 struct g_consumer *cp, *cp1; in g_multipath_destroy() local
683 LIST_FOREACH_SAFE(cp, &gp->consumer, consumer, cp1) { in g_multipath_destroy()
685 if ((cp->index & MP_POSTED) == 0) { in g_multipath_destroy()
686 cp->index |= MP_POSTED; in g_multipath_destroy()
688 g_mpd(cp, 0); in g_multipath_destroy()
765 g_multipath_read_metadata(struct g_consumer *cp, in g_multipath_read_metadata() argument
773 error = g_access(cp, 1, 0, 0); in g_multipath_read_metadata()
776 pp = cp->provider; in g_multipath_read_metadata()
778 buf = g_read_data(cp, pp->mediasize - pp->sectorsize, in g_multipath_read_metadata()
781 g_access(cp, -1, 0, 0); in g_multipath_read_metadata()
790 g_multipath_write_metadata(struct g_consumer *cp, in g_multipath_write_metadata() argument
798 error = g_access(cp, 1, 1, 1); in g_multipath_write_metadata()
801 pp = cp->provider; in g_multipath_write_metadata()
805 error = g_write_data(cp, pp->mediasize - pp->sectorsize, in g_multipath_write_metadata()
808 g_access(cp, -1, -1, -1); in g_multipath_write_metadata()
818 struct g_consumer *cp; in g_multipath_taste() local
828 cp = g_new_consumer(gp); in g_multipath_taste()
829 cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; in g_multipath_taste()
830 error = g_attach(cp, pp); in g_multipath_taste()
832 error = g_multipath_read_metadata(cp, &md); in g_multipath_taste()
833 g_detach(cp); in g_multipath_taste()
835 g_destroy_consumer(cp); in g_multipath_taste()
949 struct g_consumer *cp; in g_multipath_ctl_add_name() local
980 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_ctl_add_name()
981 if (cp->provider == pp) { in g_multipath_ctl_add_name()
1013 struct g_consumer *cp; in g_multipath_ctl_prefer() local
1051 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_ctl_prefer()
1052 if (cp->provider != NULL in g_multipath_ctl_prefer()
1053 && strcmp(cp->provider->name, name) == 0) in g_multipath_ctl_prefer()
1057 if (cp == NULL) { in g_multipath_ctl_prefer()
1064 if (cp->index & MP_BAD) { in g_multipath_ctl_prefer()
1072 sc->sc_active = cp; in g_multipath_ctl_prefer()
1171 struct g_consumer *cp; in g_multipath_ctl_configure() local
1200 cp = sc->sc_active; in g_multipath_ctl_configure()
1201 pp = cp->provider; in g_multipath_ctl_configure()
1209 error = g_multipath_write_metadata(cp, &md); in g_multipath_ctl_configure()
1221 struct g_consumer *cp; in g_multipath_ctl_fail() local
1245 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_ctl_fail()
1246 if (cp->provider != NULL && in g_multipath_ctl_fail()
1247 strcmp(cp->provider->name, name) == 0 && in g_multipath_ctl_fail()
1248 (cp->index & MP_LOST) == 0) { in g_multipath_ctl_fail()
1250 if (!fail == !(cp->index & MP_FAIL)) in g_multipath_ctl_fail()
1255 g_multipath_fault(cp, MP_FAIL); in g_multipath_ctl_fail()
1257 sc->sc_name, cp->provider->name, 0); in g_multipath_ctl_fail()
1259 cp->index &= ~MP_FAIL; in g_multipath_ctl_fail()
1261 sc->sc_name, cp->provider->name); in g_multipath_ctl_fail()
1275 struct g_consumer *cp, *cp1; in g_multipath_ctl_remove() local
1300 LIST_FOREACH_SAFE(cp, &gp->consumer, consumer, cp1) { in g_multipath_ctl_remove()
1301 if (cp->provider != NULL && in g_multipath_ctl_remove()
1302 strcmp(cp->provider->name, name) == 0 && in g_multipath_ctl_remove()
1303 (cp->index & MP_LOST) == 0) { in g_multipath_ctl_remove()
1306 cp->provider->name, cp->geom->name); in g_multipath_ctl_remove()
1308 cp->geom->name, cp->provider->name); in g_multipath_ctl_remove()
1310 g_multipath_fault(cp, MP_LOST); in g_multipath_ctl_remove()
1311 cnt = (uintptr_t *)&cp->private; in g_multipath_ctl_remove()
1312 if (*cnt == 0 && (cp->index & MP_POSTED) == 0) { in g_multipath_ctl_remove()
1313 cp->index |= MP_POSTED; in g_multipath_ctl_remove()
1315 g_mpd(cp, 0); in g_multipath_ctl_remove()
1372 struct g_consumer *cp; in g_multipath_ctl_destroy() local
1393 cp = sc->sc_active; in g_multipath_ctl_destroy()
1394 pp = cp->provider; in g_multipath_ctl_destroy()
1395 error = g_access(cp, 1, 1, 1); in g_multipath_ctl_destroy()
1402 error = g_write_data(cp, pp->mediasize - pp->sectorsize, in g_multipath_ctl_destroy()
1405 g_access(cp, -1, -1, -1); in g_multipath_ctl_destroy()
1448 struct g_consumer *cp; in g_multipath_ctl_getactive() local
1468 LIST_FOREACH(cp, &gp->consumer, consumer) { in g_multipath_ctl_getactive()
1469 if (cp->index & MP_BAD) in g_multipath_ctl_getactive()
1473 sbuf_cat(sb, cp->provider->name); in g_multipath_ctl_getactive()
1528 struct g_consumer *cp, struct g_provider *pp) in g_multipath_dumpconf() argument
1538 if (cp != NULL) { in g_multipath_dumpconf()
1540 (cp->index & MP_NEW) ? "NEW" : in g_multipath_dumpconf()
1541 (cp->index & MP_LOST) ? "LOST" : in g_multipath_dumpconf()
1542 (cp->index & MP_FAIL) ? "FAIL" : in g_multipath_dumpconf()
1543 (sc->sc_active_active == 1 || sc->sc_active == cp) ? in g_multipath_dumpconf()
1553 if (cp == NULL && pp == NULL) { in g_multipath_dumpconf()