Lines Matching refs:wp

78 static void g_bde_delete_sector(struct g_bde_softc *wp, struct g_bde_sector *sp);
79 static struct g_bde_sector * g_bde_new_sector(struct g_bde_work *wp, u_int len);
80 static void g_bde_release_keysector(struct g_bde_work *wp);
81 static struct g_bde_sector *g_bde_get_keysector(struct g_bde_work *wp);
98 struct g_bde_work *wp; in g_bde_new_work() local
100 wp = malloc(sizeof *wp, M_GBDE, M_NOWAIT | M_ZERO); in g_bde_new_work()
101 if (wp == NULL) in g_bde_new_work()
102 return (wp); in g_bde_new_work()
103 wp->state = SETUP; in g_bde_new_work()
104 wp->softc = sc; in g_bde_new_work()
107 TAILQ_INSERT_TAIL(&sc->worklist, wp, list); in g_bde_new_work()
108 return (wp); in g_bde_new_work()
112 g_bde_delete_work(struct g_bde_work *wp) in g_bde_delete_work() argument
116 sc = wp->softc; in g_bde_delete_work()
119 TAILQ_REMOVE(&sc->worklist, wp, list); in g_bde_delete_work()
120 free(wp, M_GBDE); in g_bde_delete_work()
144 g_bde_new_sector(struct g_bde_work *wp, u_int len) in g_bde_new_sector() argument
160 wp->softc->nsect++; in g_bde_new_sector()
162 sp->softc = wp->softc; in g_bde_new_sector()
164 sp->owner = wp; in g_bde_new_sector()
165 sp->offset = wp->so; in g_bde_new_sector()
201 g_bde_get_keysector(struct g_bde_work *wp) in g_bde_get_keysector() argument
207 offset = wp->kso; in g_bde_get_keysector()
208 g_trace(G_T_TOPOLOGY, "g_bde_get_keysector(%p, %jd)", wp, (intmax_t)offset); in g_bde_get_keysector()
209 sc = wp->softc; in g_bde_get_keysector()
225 KASSERT(sp->softc == wp->softc, ("wrong softc")); in g_bde_get_keysector()
227 sp->owner = wp; in g_bde_get_keysector()
239 sp = g_bde_new_sector(wp, sc->sectorsize); in g_bde_get_keysector()
249 sp->softc = wp->softc; in g_bde_get_keysector()
251 sp->owner = wp; in g_bde_get_keysector()
261 wp->ksp = sp; in g_bde_get_keysector()
266 g_bde_release_keysector(struct g_bde_work *wp) in g_bde_release_keysector() argument
272 sp = wp->ksp; in g_bde_release_keysector()
277 KASSERT(wp == sp->owner, ("Releasing, not owner")); in g_bde_release_keysector()
279 wp->ksp = NULL; in g_bde_release_keysector()
286 KASSERT(wp2 != wp, ("Self-reowning")); in g_bde_release_keysector()
332 g_bde_read_keysector(struct g_bde_softc *sc, struct g_bde_work *wp) in g_bde_read_keysector() argument
336 g_trace(G_T_TOPOLOGY, "g_bde_read_keysector(%p)", wp); in g_bde_read_keysector()
337 sp = g_bde_get_keysector(wp); in g_bde_read_keysector()
340 sp = g_bde_get_keysector(wp); in g_bde_read_keysector()
344 if (sp->owner != wp) in g_bde_read_keysector()
350 g_bde_release_keysector(wp); in g_bde_read_keysector()
393 g_bde_work_done(struct g_bde_work *wp, int error) in g_bde_work_done() argument
396 g_bde_contribute(wp->bp, wp->length, error); in g_bde_work_done()
397 if (wp->sp != NULL) in g_bde_work_done()
398 g_bde_delete_sector(wp->softc, wp->sp); in g_bde_work_done()
399 if (wp->ksp != NULL) in g_bde_work_done()
400 g_bde_release_keysector(wp); in g_bde_work_done()
401 g_bde_delete_work(wp); in g_bde_work_done()
413 struct g_bde_work *wp; in g_bde_write_done() local
427 wp = sp->owner; in g_bde_write_done()
428 if (wp->error == 0) in g_bde_write_done()
429 wp->error = sp->error; in g_bde_write_done()
431 if (wp->bp->bio_cmd == BIO_DELETE) { in g_bde_write_done()
432 KASSERT(sp == wp->sp, ("trashed delete op")); in g_bde_write_done()
433 g_bde_work_done(wp, wp->error); in g_bde_write_done()
438 KASSERT(wp->bp->bio_cmd == BIO_WRITE, ("Confused in g_bde_write_done()")); in g_bde_write_done()
439 KASSERT(sp == wp->sp || sp == wp->ksp, ("trashed write op")); in g_bde_write_done()
440 if (wp->sp == sp) { in g_bde_write_done()
441 g_bde_delete_sector(sc, wp->sp); in g_bde_write_done()
442 wp->sp = NULL; in g_bde_write_done()
446 if (wp->sp == NULL && wp->ksp != NULL && wp->ksp->state == VALID) in g_bde_write_done()
447 g_bde_work_done(wp, wp->error); in g_bde_write_done()
551 struct g_bde_work *wp, *twp; in g_bde_worker() local
562 TAILQ_FOREACH_SAFE(wp, &sc->worklist, list, twp) { in g_bde_worker()
563 KASSERT(wp != NULL, ("NULL wp")); in g_bde_worker()
564 KASSERT(wp->softc != NULL, ("NULL wp->softc")); in g_bde_worker()
565 if (wp->state != WAIT) in g_bde_worker()
568 KASSERT(wp->bp != NULL, ("NULL wp->bp")); in g_bde_worker()
569 KASSERT(wp->sp != NULL, ("NULL wp->sp")); in g_bde_worker()
571 if (wp->ksp != NULL) { in g_bde_worker()
572 if (wp->ksp->owner != wp) in g_bde_worker()
574 if (wp->ksp->state == IO) in g_bde_worker()
576 KASSERT(wp->ksp->state == VALID, in g_bde_worker()
578 wp->ksp->state)); in g_bde_worker()
581 if (wp->bp->bio_cmd == BIO_READ && wp->sp->state == IO) in g_bde_worker()
584 if (wp->ksp != NULL && wp->ksp->error != 0) { in g_bde_worker()
585 g_bde_work_done(wp, wp->ksp->error); in g_bde_worker()
588 switch(wp->bp->bio_cmd) { in g_bde_worker()
590 if (wp->ksp == NULL) { in g_bde_worker()
591 KASSERT(wp->error != 0, in g_bde_worker()
593 g_bde_work_done(wp, wp->error); in g_bde_worker()
596 if (wp->sp->error != 0) { in g_bde_worker()
597 g_bde_work_done(wp, wp->sp->error); in g_bde_worker()
601 g_bde_crypt_read(wp); in g_bde_worker()
604 g_bde_work_done(wp, wp->sp->error); in g_bde_worker()
607 wp->state = FINISH; in g_bde_worker()
608 KASSERT(wp->sp->owner == wp, in g_bde_worker()
610 KASSERT(wp->ksp->owner == wp, in g_bde_worker()
613 g_bde_crypt_write(wp); in g_bde_worker()
616 error = g_bde_start_write(wp->sp); in g_bde_worker()
618 g_bde_work_done(wp, error); in g_bde_worker()
621 error = g_bde_start_write(wp->ksp); in g_bde_worker()
622 if (wp->error != 0) in g_bde_worker()
623 wp->error = error; in g_bde_worker()
626 wp->state = FINISH; in g_bde_worker()
628 g_bde_crypt_delete(wp); in g_bde_worker()
631 g_bde_start_write(wp->sp); in g_bde_worker()
677 g_bde_start2(struct g_bde_work *wp) in g_bde_start2() argument
681 KASSERT(wp != NULL, ("NULL wp in g_bde_start2")); in g_bde_start2()
682 KASSERT(wp->softc != NULL, ("NULL wp->softc")); in g_bde_start2()
683 g_trace(G_T_TOPOLOGY, "g_bde_start2(%p)", wp); in g_bde_start2()
684 sc = wp->softc; in g_bde_start2()
685 switch (wp->bp->bio_cmd) { in g_bde_start2()
687 wp->sp = g_bde_new_sector(wp, 0); in g_bde_start2()
688 if (wp->sp == NULL) { in g_bde_start2()
689 g_bde_work_done(wp, ENOMEM); in g_bde_start2()
692 wp->sp->size = wp->length; in g_bde_start2()
693 wp->sp->data = wp->data; in g_bde_start2()
694 if (g_bde_start_read(wp->sp) != 0) { in g_bde_start2()
695 g_bde_work_done(wp, ENOMEM); in g_bde_start2()
698 g_bde_read_keysector(sc, wp); in g_bde_start2()
699 if (wp->ksp == NULL) in g_bde_start2()
700 wp->error = ENOMEM; in g_bde_start2()
703 wp->sp = g_bde_new_sector(wp, wp->length); in g_bde_start2()
704 if (wp->sp == NULL) { in g_bde_start2()
705 g_bde_work_done(wp, ENOMEM); in g_bde_start2()
710 wp->sp = g_bde_new_sector(wp, wp->length); in g_bde_start2()
711 if (wp->sp == NULL) { in g_bde_start2()
712 g_bde_work_done(wp, ENOMEM); in g_bde_start2()
715 g_bde_read_keysector(sc, wp); in g_bde_start2()
716 if (wp->ksp == NULL) { in g_bde_start2()
717 g_bde_work_done(wp, ENOMEM); in g_bde_start2()
723 ("Wrong bio_cmd %d in g_bde_start2", wp->bp->bio_cmd)); in g_bde_start2()
726 wp->state = WAIT; in g_bde_start2()
739 struct g_bde_work *wp; in g_bde_start1() local
747 wp = g_bde_new_work(sc); in g_bde_start1()
748 if (wp != NULL) { in g_bde_start1()
749 wp->bp = bp; in g_bde_start1()
750 wp->offset = bp->bio_offset + done; in g_bde_start1()
751 wp->data = bp->bio_data + done; in g_bde_start1()
752 wp->length = bp->bio_length - done; in g_bde_start1()
753 g_bde_map_sector(wp); in g_bde_start1()
754 done += wp->length; in g_bde_start1()
755 g_bde_start2(wp); in g_bde_start1()
757 if (wp == NULL || bp->bio_error != 0) { in g_bde_start1()