Lines Matching full:bio
9 #include <sys/bio.h>
34 TAILQ_HEAD(, bio) pending_bios;
41 static void nvmf_ns_strategy(struct bio *bio);
71 bio_refs(struct bio *bio) in bio_refs() argument
73 return ((u_int *)&bio->bio_driver1); in bio_refs()
77 nvmf_ns_biodone(struct bio *bio) in nvmf_ns_biodone() argument
82 if (!refcount_release(bio_refs(bio))) in nvmf_ns_biodone()
85 ns = bio->bio_dev->si_drv1; in nvmf_ns_biodone()
88 if (bio->bio_error == ECONNABORTED && !nvmf_fail_disconnect) { in nvmf_ns_biodone()
89 bio->bio_error = 0; in nvmf_ns_biodone()
90 bio->bio_driver2 = 0; in nvmf_ns_biodone()
95 bio->bio_error = ECONNABORTED; in nvmf_ns_biodone()
96 bio->bio_flags |= BIO_ERROR; in nvmf_ns_biodone()
97 bio->bio_resid = bio->bio_bcount; in nvmf_ns_biodone()
98 biodone(bio); in nvmf_ns_biodone()
100 TAILQ_INSERT_TAIL(&ns->pending_bios, bio, in nvmf_ns_biodone()
106 nvmf_ns_strategy(bio); in nvmf_ns_biodone()
113 error = (intptr_t)bio->bio_driver2; in nvmf_ns_biodone()
115 bio->bio_error = error; in nvmf_ns_biodone()
116 if (bio->bio_error != 0) in nvmf_ns_biodone()
117 bio->bio_flags |= BIO_ERROR; in nvmf_ns_biodone()
118 biodone(bio); in nvmf_ns_biodone()
128 struct bio *bio = arg; in nvmf_ns_io_complete() local
130 KASSERT(xfered <= bio->bio_bcount, in nvmf_ns_io_complete()
133 bio->bio_driver2 = (void *)(intptr_t)error; in nvmf_ns_io_complete()
134 bio->bio_resid = bio->bio_bcount - xfered; in nvmf_ns_io_complete()
136 nvmf_ns_biodone(bio); in nvmf_ns_io_complete()
142 struct bio *bio = arg; in nvmf_ns_delete_complete() local
145 bio->bio_resid = bio->bio_bcount; in nvmf_ns_delete_complete()
147 bio->bio_resid = 0; in nvmf_ns_delete_complete()
149 free(bio->bio_driver2, M_NVMF); in nvmf_ns_delete_complete()
150 bio->bio_driver2 = (void *)(intptr_t)error; in nvmf_ns_delete_complete()
152 nvmf_ns_biodone(bio); in nvmf_ns_delete_complete()
158 struct bio *bio = arg; in nvmf_ns_bio_complete() local
161 bio->bio_error = ECONNABORTED; in nvmf_ns_bio_complete()
163 bio->bio_error = EIO; in nvmf_ns_bio_complete()
165 nvmf_ns_biodone(bio); in nvmf_ns_bio_complete()
169 nvmf_ns_submit_bio(struct nvmf_namespace *ns, struct bio *bio) in nvmf_ns_submit_bio() argument
180 switch (bio->bio_cmd) { in nvmf_ns_submit_bio()
182 lba = bio->bio_offset / ns->lba_size; in nvmf_ns_submit_bio()
183 lba_count = bio->bio_bcount / ns->lba_size; in nvmf_ns_submit_bio()
187 lba = bio->bio_offset / ns->lba_size; in nvmf_ns_submit_bio()
188 lba_count = bio->bio_bcount / ns->lba_size; in nvmf_ns_submit_bio()
199 lba = bio->bio_offset / ns->lba_size; in nvmf_ns_submit_bio()
200 lba_count = bio->bio_bcount / ns->lba_size; in nvmf_ns_submit_bio()
218 TAILQ_INSERT_TAIL(&ns->pending_bios, bio, bio_queue); in nvmf_ns_submit_bio()
227 nvmf_ns_bio_complete, bio, M_NOWAIT); in nvmf_ns_submit_bio()
234 switch (bio->bio_cmd) { in nvmf_ns_submit_bio()
237 refcount_init(bio_refs(bio), 2); in nvmf_ns_submit_bio()
238 mem = memdesc_bio(bio); in nvmf_ns_submit_bio()
239 nvmf_capsule_append_data(req->nc, &mem, bio->bio_bcount, in nvmf_ns_submit_bio()
240 bio->bio_cmd == BIO_WRITE, nvmf_ns_io_complete, bio); in nvmf_ns_submit_bio()
243 refcount_init(bio_refs(bio), 2); in nvmf_ns_submit_bio()
246 true, nvmf_ns_delete_complete, bio); in nvmf_ns_submit_bio()
247 bio->bio_driver2 = dsm_range; in nvmf_ns_submit_bio()
250 refcount_init(bio_refs(bio), 1); in nvmf_ns_submit_bio()
251 KASSERT(bio->bio_resid == 0, in nvmf_ns_submit_bio()
307 nvmf_ns_strategy(struct bio *bio) in nvmf_ns_strategy() argument
312 ns = bio->bio_dev->si_drv1; in nvmf_ns_strategy()
314 error = nvmf_ns_submit_bio(ns, bio); in nvmf_ns_strategy()
316 bio->bio_error = error; in nvmf_ns_strategy()
317 bio->bio_flags |= BIO_ERROR; in nvmf_ns_strategy()
318 bio->bio_resid = bio->bio_bcount; in nvmf_ns_strategy()
319 biodone(bio); in nvmf_ns_strategy()
348 /* One dummy bio avoids dropping to 0 until destroy. */ in nvmf_init_ns()
420 TAILQ_HEAD(, bio) bios; in nvmf_reconnect_ns()
421 struct bio *bio; in nvmf_reconnect_ns() local
430 bio = TAILQ_FIRST(&bios); in nvmf_reconnect_ns()
431 TAILQ_REMOVE(&bios, bio, bio_queue); in nvmf_reconnect_ns()
432 nvmf_ns_strategy(bio); in nvmf_reconnect_ns()
439 TAILQ_HEAD(, bio) bios; in nvmf_shutdown_ns()
440 struct bio *bio; in nvmf_shutdown_ns() local
449 bio = TAILQ_FIRST(&bios); in nvmf_shutdown_ns()
450 TAILQ_REMOVE(&bios, bio, bio_queue); in nvmf_shutdown_ns()
451 bio->bio_error = ECONNABORTED; in nvmf_shutdown_ns()
452 bio->bio_flags |= BIO_ERROR; in nvmf_shutdown_ns()
453 bio->bio_resid = bio->bio_bcount; in nvmf_shutdown_ns()
454 biodone(bio); in nvmf_shutdown_ns()
461 TAILQ_HEAD(, bio) bios; in nvmf_destroy_ns()
462 struct bio *bio; in nvmf_destroy_ns() local
470 * the reference on the "dummy bio" when the namespace is in nvmf_destroy_ns()
485 bio = TAILQ_FIRST(&bios); in nvmf_destroy_ns()
486 TAILQ_REMOVE(&bios, bio, bio_queue); in nvmf_destroy_ns()
487 bio->bio_error = ECONNABORTED; in nvmf_destroy_ns()
488 bio->bio_flags |= BIO_ERROR; in nvmf_destroy_ns()
489 bio->bio_resid = bio->bio_bcount; in nvmf_destroy_ns()
490 biodone(bio); in nvmf_destroy_ns()