Lines Matching refs:bp
90 static void g_uzip_done(struct bio *bp);
127 g_uzip_cached(struct g_geom *gp, struct bio *bp)
134 ofs = bp->bio_offset + bp->bio_completed;
140 if (bp->bio_resid < usz)
141 usz = bp->bio_resid;
142 memcpy(bp->bio_data + bp->bio_completed, sc->last_buf + blkofs,
148 __func__, gp->name, bp, (intmax_t)ofs, (intmax_t)usz));
150 bp->bio_completed += usz;
151 bp->bio_resid -= usz;
153 if (bp->bio_resid == 0) {
154 g_io_deliver(bp, 0);
164 g_uzip_request(struct g_geom *gp, struct bio *bp)
173 if (g_uzip_cached(gp, bp) != 0)
178 bp2 = g_clone_bio(bp);
180 g_io_deliver(bp, ENOMEM);
188 ofs = bp->bio_offset + bp->bio_completed;
191 end_blk = (ofs + bp->bio_resid + sc->blksz - 1) / sc->blksz;
195 __func__, gp->name, bp,
214 g_io_deliver(bp, ENOMEM);
219 __func__, gp->name, bp,
227 g_uzip_done(struct bio *bp)
239 bp2 = bp->bio_parent;
246 bp2->bio_error = bp->bio_error;
251 if (bp->bio_completed == 0) {
266 data = bp->bio_data + sc->offsets[blk] % pp->sectorsize;
268 while (bp->bio_completed && bp2->bio_resid) {
272 __func__, gp->name, gp, bp->bio_completed,
277 } else if (len <= bp->bio_completed) {
305 bp->bio_completed -= len;
315 free(bp->bio_data, M_GEOM_UZIP);
316 g_destroy_bio(bp);
324 g_uzip_start(struct bio *bp)
330 pp = bp->bio_to;
334 __func__, gp->name, bp, bp->bio_cmd, (intmax_t)bp->bio_offset,
335 (intmax_t)bp->bio_length, bp->bio_data));
340 if (bp->bio_cmd != BIO_READ) {
341 g_io_deliver(bp, EOPNOTSUPP);
345 bp->bio_resid = bp->bio_length;
346 bp->bio_completed = 0;
348 g_uzip_request(gp, bp);