summaryrefslogtreecommitdiffstats
path: root/sys/dev/nvme/nvme_ns_cmd.c
diff options
context:
space:
mode:
authorjimharris <jimharris@FreeBSD.org>2012-10-18 00:32:07 +0000
committerjimharris <jimharris@FreeBSD.org>2012-10-18 00:32:07 +0000
commitc070c3fe817d16552546a6954df85a4731b3e8be (patch)
tree4db66064fe7cf4ae165af763fcf230f22e61d0fc /sys/dev/nvme/nvme_ns_cmd.c
parent20df59b294c348ddc1e7d3683cb6b3fdf7858f91 (diff)
downloadFreeBSD-src-c070c3fe817d16552546a6954df85a4731b3e8be.zip
FreeBSD-src-c070c3fe817d16552546a6954df85a4731b3e8be.tar.gz
Add return codes to all functions used for submitting commands to I/O
queues. Sponsored by: Intel
Diffstat (limited to 'sys/dev/nvme/nvme_ns_cmd.c')
-rw-r--r--sys/dev/nvme/nvme_ns_cmd.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/sys/dev/nvme/nvme_ns_cmd.c b/sys/dev/nvme/nvme_ns_cmd.c
index 23d6f96..fe5cc28 100644
--- a/sys/dev/nvme/nvme_ns_cmd.c
+++ b/sys/dev/nvme/nvme_ns_cmd.c
@@ -29,7 +29,7 @@ __FBSDID("$FreeBSD$");
#include "nvme_private.h"
-void
+int
nvme_ns_cmd_read(struct nvme_namespace *ns, void *payload, uint64_t lba,
uint32_t lba_count, nvme_cb_fn_t cb_fn, void *cb_arg)
{
@@ -40,6 +40,9 @@ nvme_ns_cmd_read(struct nvme_namespace *ns, void *payload, uint64_t lba,
tr = nvme_allocate_tracker(ns->ctrlr, FALSE, cb_fn, cb_arg,
lba_count*512, payload);
+ if (tr == NULL)
+ return (ENOMEM);
+
cmd = &tr->cmd;
cmd->opc = NVME_OPC_READ;
cmd->nsid = ns->id;
@@ -52,9 +55,11 @@ nvme_ns_cmd_read(struct nvme_namespace *ns, void *payload, uint64_t lba,
tr->payload_size, nvme_payload_map, tr, 0);
KASSERT(err == 0, ("bus_dmamap_load returned non-zero!\n"));
+
+ return (0);
}
-void
+int
nvme_ns_cmd_write(struct nvme_namespace *ns, void *payload, uint64_t lba,
uint32_t lba_count, nvme_cb_fn_t cb_fn, void *cb_arg)
{
@@ -65,6 +70,9 @@ nvme_ns_cmd_write(struct nvme_namespace *ns, void *payload, uint64_t lba,
tr = nvme_allocate_tracker(ns->ctrlr, FALSE, cb_fn, cb_arg,
lba_count*512, payload);
+ if (tr == NULL)
+ return (ENOMEM);
+
cmd = &tr->cmd;
cmd->opc = NVME_OPC_WRITE;
cmd->nsid = ns->id;
@@ -77,9 +85,11 @@ nvme_ns_cmd_write(struct nvme_namespace *ns, void *payload, uint64_t lba,
tr->payload_size, nvme_payload_map, tr, 0);
KASSERT(err == 0, ("bus_dmamap_load returned non-zero!\n"));
+
+ return (0);
}
-void
+int
nvme_ns_cmd_deallocate(struct nvme_namespace *ns, void *payload,
uint8_t num_ranges, nvme_cb_fn_t cb_fn, void *cb_arg)
{
@@ -90,6 +100,9 @@ nvme_ns_cmd_deallocate(struct nvme_namespace *ns, void *payload,
tr = nvme_allocate_tracker(ns->ctrlr, FALSE, cb_fn, cb_arg,
num_ranges * sizeof(struct nvme_dsm_range), payload);
+ if (tr == NULL)
+ return (ENOMEM);
+
cmd = &tr->cmd;
cmd->opc = NVME_OPC_DATASET_MANAGEMENT;
cmd->nsid = ns->id;
@@ -102,9 +115,11 @@ nvme_ns_cmd_deallocate(struct nvme_namespace *ns, void *payload,
tr->payload_size, nvme_payload_map, tr, 0);
KASSERT(err == 0, ("bus_dmamap_load returned non-zero!\n"));
+
+ return (0);
}
-void
+int
nvme_ns_cmd_flush(struct nvme_namespace *ns, nvme_cb_fn_t cb_fn, void *cb_arg)
{
struct nvme_tracker *tr;
@@ -112,9 +127,14 @@ nvme_ns_cmd_flush(struct nvme_namespace *ns, nvme_cb_fn_t cb_fn, void *cb_arg)
tr = nvme_allocate_tracker(ns->ctrlr, FALSE, cb_fn, cb_arg, 0, NULL);
+ if (tr == NULL)
+ return (ENOMEM);
+
cmd = &tr->cmd;
cmd->opc = NVME_OPC_FLUSH;
cmd->nsid = ns->id;
nvme_qpair_submit_cmd(tr->qpair, tr);
+
+ return (0);
}
OpenPOWER on IntegriCloud