diff options
author | jimharris <jimharris@FreeBSD.org> | 2012-10-18 00:32:07 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2012-10-18 00:32:07 +0000 |
commit | c070c3fe817d16552546a6954df85a4731b3e8be (patch) | |
tree | 4db66064fe7cf4ae165af763fcf230f22e61d0fc /sys/dev/nvme/nvme_qpair.c | |
parent | 20df59b294c348ddc1e7d3683cb6b3fdf7858f91 (diff) | |
download | FreeBSD-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_qpair.c')
-rw-r--r-- | sys/dev/nvme/nvme_qpair.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c index 5ad1ea8..efe5055 100644 --- a/sys/dev/nvme/nvme_qpair.c +++ b/sys/dev/nvme/nvme_qpair.c @@ -84,10 +84,24 @@ nvme_qpair_allocate_tracker(struct nvme_qpair *qpair, boolean_t alloc_prp_list) tr = SLIST_FIRST(&qpair->free_tr); if (tr == NULL) { - /* TODO: fail if malloc returns NULL */ + /* + * We can't support more trackers than we have entries in + * our queue, because it would generate invalid indices + * into the qpair's active tracker array. + */ + if (qpair->num_tr == qpair->num_entries) { + mtx_unlock(&qpair->lock); + return (NULL); + } + tr = malloc(sizeof(struct nvme_tracker), M_NVME, M_ZERO | M_NOWAIT); + if (tr == NULL) { + mtx_unlock(&qpair->lock); + return (NULL); + } + bus_dmamap_create(qpair->dma_tag, 0, &tr->dma_map); callout_init_mtx(&tr->timer, &qpair->lock, 0); tr->cid = qpair->num_tr++; |