nvme: break out request child creation code to separate function

This will allow it to be better be reused for some future patches
enabling splitting of non-PRP-compliant SGL-based requests.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Ica38fd6cf191f72baa524bcc4896b3c9939ab762
This commit is contained in:
Jim Harris 2016-12-16 09:45:33 -07:00 committed by Daniel Verkamp
parent 4838a081f8
commit 4cc1cf888c

View File

@ -109,6 +109,27 @@ nvme_request_free_children(struct nvme_request *req)
}
}
static struct nvme_request *
_nvme_add_child_request(struct spdk_nvme_ns *ns, const struct nvme_payload *payload,
uint32_t payload_offset, uint32_t md_offset,
uint64_t lba, uint32_t lba_count, spdk_nvme_cmd_cb cb_fn, void *cb_arg, uint32_t opc,
uint32_t io_flags, uint16_t apptag_mask, uint16_t apptag,
struct nvme_request *parent)
{
struct nvme_request *child;
child = _nvme_ns_cmd_rw(ns, payload, payload_offset, md_offset, lba, lba_count, cb_fn,
cb_arg, opc, io_flags, apptag_mask, apptag);
if (child == NULL) {
nvme_request_free_children(parent);
nvme_free_request(parent);
return NULL;
}
nvme_request_add_child(parent, child);
return child;
}
static struct nvme_request *
_nvme_ns_cmd_split_request(struct spdk_nvme_ns *ns,
const struct nvme_payload *payload,
@ -134,14 +155,13 @@ _nvme_ns_cmd_split_request(struct spdk_nvme_ns *ns,
lba_count = sectors_per_max_io - (lba & sector_mask);
lba_count = nvme_min(remaining_lba_count, lba_count);
child = _nvme_ns_cmd_rw(ns, payload, payload_offset, md_offset, lba, lba_count, cb_fn,
cb_arg, opc, io_flags, apptag_mask, apptag);
child = _nvme_add_child_request(ns, payload, payload_offset, md_offset,
lba, lba_count, cb_fn, cb_arg, opc,
io_flags, apptag_mask, apptag, req);
if (child == NULL) {
nvme_request_free_children(req);
return NULL;
}
nvme_request_add_child(req, child);
remaining_lba_count -= lba_count;
lba += lba_count;
payload_offset += lba_count * sector_size;