nvme_request
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
TAILQ_HEAD(, nvme_request) children;
TAILQ_ENTRY(nvme_request) child_tailq;
STAILQ_ENTRY(nvme_request) stailq;
struct nvme_request *parent;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *reqs;
STAILQ_HEAD(, nvme_request) free_req;
STAILQ_HEAD(, nvme_request) queued_req;
struct nvme_request *req);
extern struct nvme_request *nvme_request_allocate(struct nvme_qpair *qpair,
extern struct nvme_request *nvme_request_allocate_null(struct nvme_qpair *qpair,
extern struct nvme_request *
extern void nvme_request_free(struct nvme_request *req);
extern void nvme_request_free_locked(struct nvme_request *req);
extern void nvme_request_add_child(struct nvme_request *parent,
struct nvme_request *child);
extern void nvme_request_remove_child(struct nvme_request *parent,
struct nvme_request *child);
static struct nvme_request *_nvme_ns_rw(struct nvme_ns *ns,
static struct nvme_request *
struct nvme_request *req,
struct nvme_request *child, *tmp;
static struct nvme_request *_nvme_ns_rw(struct nvme_ns *ns,
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *req)
struct nvme_request *child_req, *tmp;
struct nvme_request *req;
struct nvme_request *req = tr->req;
struct nvme_request *req = tr->req;
STAILQ_HEAD(, nvme_request) req_queue;
struct nvme_request *req = STAILQ_FIRST(&req_queue);
struct nvme_request *req,
struct nvme_request *req,
struct nvme_request *req,
struct nvme_request *req,
struct nvme_request *req;
struct nvme_request *req;
struct nvme_request *nvme_request_allocate(struct nvme_qpair *qpair,
struct nvme_request *req;
memset(req, 0, offsetof(struct nvme_request, children));
struct nvme_request *nvme_request_allocate_contig(struct nvme_qpair *qpair,
struct nvme_request *nvme_request_allocate_null(struct nvme_qpair *qpair,
void nvme_request_free_locked(struct nvme_request *req)
void nvme_request_free(struct nvme_request *req)
void nvme_request_add_child(struct nvme_request *parent,
struct nvme_request *child)
void nvme_request_remove_child(struct nvme_request *parent,
struct nvme_request *child)
static struct nvme_request *nvme_alloc_request(struct nvme_qpair *qpair)
struct nvme_request *req;
struct nvme_request *child = child_arg;
struct nvme_request *parent = child->parent;
struct nvme_request *req;
qpair->reqs = calloc(qpair->num_reqs, sizeof(struct nvme_request));
nvme_io_request nvme_request;
nvme_request.write = operation.IsWrite();
nvme_request.lba_start = operation.Offset() / block_size;
nvme_request.lba_count = operation.Length() / block_size;
nvme_request.iovecs = (physical_entry*)operation.Vecs();
nvme_request.iovec_count = operation.VecCount();
status = do_nvme_io_request(handle->info, &nvme_request);
nvme_io_request nvme_request;
memset(&nvme_request, 0, sizeof(nvme_io_request));
nvme_request.write = request->IsWrite();
uint32 entries = vtophysLength - nvme_request.iovec_count;
virt.length, vtophys + nvme_request.iovec_count, &entries);
nvme_request.iovec_count += entries;
nvme_request.iovecs = vtophys;
nvme_request.iovecs = (physical_entry*)buffer->Vecs();
nvme_request.iovec_count = buffer->VecCount();
bool bounceAll = (nvme_request.iovecs == NULL);
for (int32 i = 1; !bounceAll && i < (nvme_request.iovec_count - 1); i++) {
if ((nvme_request.iovecs[i].address % B_PAGE_SIZE) != 0)
if ((nvme_request.iovecs[i].size % B_PAGE_SIZE) != 0)
if (nvme_request.iovec_count > 1) {
physical_entry* entry = &nvme_request.iovecs[0];
entry = &nvme_request.iovecs[nvme_request.iovec_count - 1];
physical_entry* entry = &nvme_request.iovecs[0];
if (nvme_request.write)
int32 remaining = nvme_request.iovec_count;
nvme_request.lba_start = rounded_pos / block_size;
nvme_request.iovec_count = min_c(remaining,
nvme_request.lba_count = 0;
for (int i = 0; i < nvme_request.iovec_count; i++) {
uint32 new_lba_count = nvme_request.lba_count
+ (nvme_request.iovecs[i].size / block_size);
if (nvme_request.lba_count > 0 && new_lba_count > max_io_blocks) {
nvme_request.iovec_count = i;
nvme_request.lba_count = new_lba_count;
status = do_nvme_io_request(handle->info, &nvme_request);
nvme_request.iovecs += nvme_request.iovec_count;
remaining -= nvme_request.iovec_count;
nvme_request.lba_start += nvme_request.lba_count;
(nvme_request.lba_start * block_size) - rounded_pos);