bdev: unify all direct bdev_io I/O types

Since all direct bdev_io types have the same layout,
there is no need to keep them differentiated.

Change-Id: If8bb85e43c9922c0ebfc39837e3a45006e508b56
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/377686
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2017-09-20 15:10:17 +02:00 committed by Daniel Verkamp
parent 2e1a8b6c2e
commit dcb7db965d
9 changed files with 133 additions and 180 deletions

View File

@ -273,7 +273,7 @@ struct spdk_bdev_io {
union { union {
struct { struct {
/** For basic read case, use our own iovec element. */ /** For basic IO case, use our own iovec element. */
struct iovec iov; struct iovec iov;
/** For SG buffer cases, array of iovecs to transfer. */ /** For SG buffer cases, array of iovecs to transfer. */
@ -287,55 +287,7 @@ struct spdk_bdev_io {
/** Starting offset (in blocks) of the bdev for this I/O. */ /** Starting offset (in blocks) of the bdev for this I/O. */
uint64_t offset_blocks; uint64_t offset_blocks;
} read; } bdev;
struct {
/** For basic write case, use our own iovec element */
struct iovec iov;
/** For SG buffer cases, array of iovecs to transfer. */
struct iovec *iovs;
/** For SG buffer cases, number of iovecs in iovec array. */
int iovcnt;
/** Total size of data to be transferred. */
uint64_t num_blocks;
/** Starting offset (in blocks) of the bdev for this I/O. */
uint64_t offset_blocks;
} write;
struct {
/** For basic write case, use our own iovec element */
struct iovec iov;
/** For SG buffer cases, array of iovecs to transfer. */
struct iovec *iovs;
/** For SG buffer cases, number of iovecs in iovec array. */
int iovcnt;
/** Total size of region to be unmapped. */
uint64_t num_blocks;
/** Starting offset (in blocks) of the bdev for this I/O. */
uint64_t offset_blocks;
} unmap;
struct {
/** For basic write case, use our own iovec element */
struct iovec iov;
/** For SG buffer cases, array of iovecs to transfer. */
struct iovec *iovs;
/** For SG buffer cases, number of iovecs in iovec array. */
int iovcnt;
/** Represents the number of blocks to be flushed, starting at offset_blocks. */
uint64_t num_blocks;
/** Represents starting offset in blocks of the range to be flushed. */
uint64_t offset_blocks;
} flush;
struct { struct {
/* The NVMe command to execute */ /* The NVMe command to execute */
struct spdk_nvme_cmd cmd; struct spdk_nvme_cmd cmd;

View File

@ -234,10 +234,10 @@ static void bdev_aio_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io
bdev_aio_readv((struct file_disk *)bdev_io->bdev->ctxt, bdev_aio_readv((struct file_disk *)bdev_io->bdev->ctxt,
ch, ch,
(struct bdev_aio_task *)bdev_io->driver_ctx, (struct bdev_aio_task *)bdev_io->driver_ctx,
bdev_io->u.read.iovs, bdev_io->u.bdev.iovs,
bdev_io->u.read.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.read.num_blocks * bdev_io->bdev->blocklen, bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen,
bdev_io->u.read.offset_blocks * bdev_io->bdev->blocklen); bdev_io->u.bdev.offset_blocks * bdev_io->bdev->blocklen);
} }
static int _bdev_aio_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io) static int _bdev_aio_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
@ -251,16 +251,16 @@ static int _bdev_aio_submit_request(struct spdk_io_channel *ch, struct spdk_bdev
bdev_aio_writev((struct file_disk *)bdev_io->bdev->ctxt, bdev_aio_writev((struct file_disk *)bdev_io->bdev->ctxt,
ch, ch,
(struct bdev_aio_task *)bdev_io->driver_ctx, (struct bdev_aio_task *)bdev_io->driver_ctx,
bdev_io->u.write.iovs, bdev_io->u.bdev.iovs,
bdev_io->u.write.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.write.num_blocks * bdev_io->bdev->blocklen, bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen,
bdev_io->u.write.offset_blocks * bdev_io->bdev->blocklen); bdev_io->u.bdev.offset_blocks * bdev_io->bdev->blocklen);
return 0; return 0;
case SPDK_BDEV_IO_TYPE_FLUSH: case SPDK_BDEV_IO_TYPE_FLUSH:
bdev_aio_flush((struct file_disk *)bdev_io->bdev->ctxt, bdev_aio_flush((struct file_disk *)bdev_io->bdev->ctxt,
(struct bdev_aio_task *)bdev_io->driver_ctx, (struct bdev_aio_task *)bdev_io->driver_ctx,
bdev_io->u.flush.offset_blocks * bdev_io->bdev->blocklen, bdev_io->u.bdev.offset_blocks * bdev_io->bdev->blocklen,
bdev_io->u.flush.num_blocks * bdev_io->bdev->blocklen); bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen);
return 0; return 0;
case SPDK_BDEV_IO_TYPE_RESET: case SPDK_BDEV_IO_TYPE_RESET:

View File

@ -222,11 +222,11 @@ spdk_bdev_io_set_buf(struct spdk_bdev_io *bdev_io, void *buf)
{ {
assert(bdev_io->get_buf_cb != NULL); assert(bdev_io->get_buf_cb != NULL);
assert(buf != NULL); assert(buf != NULL);
assert(bdev_io->u.read.iovs != NULL); assert(bdev_io->u.bdev.iovs != NULL);
bdev_io->buf = buf; bdev_io->buf = buf;
bdev_io->u.read.iovs[0].iov_base = (void *)((unsigned long)((char *)buf + 512) & ~511UL); bdev_io->u.bdev.iovs[0].iov_base = (void *)((unsigned long)((char *)buf + 512) & ~511UL);
bdev_io->u.read.iovs[0].iov_len = bdev_io->u.read.num_blocks * bdev_io->bdev->blocklen; bdev_io->u.bdev.iovs[0].iov_len = bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
bdev_io->get_buf_cb(bdev_io->ch->channel, bdev_io); bdev_io->get_buf_cb(bdev_io->ch->channel, bdev_io);
} }
@ -240,9 +240,9 @@ spdk_bdev_io_put_buf(struct spdk_bdev_io *bdev_io)
uint64_t length; uint64_t length;
struct spdk_bdev_mgmt_channel *ch; struct spdk_bdev_mgmt_channel *ch;
assert(bdev_io->u.read.iovcnt == 1); assert(bdev_io->u.bdev.iovcnt == 1);
length = bdev_io->u.read.num_blocks * bdev_io->bdev->blocklen; length = bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
buf = bdev_io->buf; buf = bdev_io->buf;
ch = spdk_io_channel_get_ctx(bdev_io->ch->mgmt_channel); ch = spdk_io_channel_get_ctx(bdev_io->ch->mgmt_channel);
@ -267,16 +267,16 @@ spdk_bdev_io_put_buf(struct spdk_bdev_io *bdev_io)
void void
spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb) spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb)
{ {
uint64_t len = bdev_io->u.read.num_blocks * bdev_io->bdev->blocklen; uint64_t len = bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
struct spdk_mempool *pool; struct spdk_mempool *pool;
need_buf_tailq_t *tailq; need_buf_tailq_t *tailq;
void *buf = NULL; void *buf = NULL;
struct spdk_bdev_mgmt_channel *ch; struct spdk_bdev_mgmt_channel *ch;
assert(cb != NULL); assert(cb != NULL);
assert(bdev_io->u.read.iovs != NULL); assert(bdev_io->u.bdev.iovs != NULL);
if (spdk_unlikely(bdev_io->u.read.iovs[0].iov_base != NULL)) { if (spdk_unlikely(bdev_io->u.bdev.iovs[0].iov_base != NULL)) {
/* Buffer already present */ /* Buffer already present */
cb(bdev_io->ch->channel, bdev_io); cb(bdev_io->ch->channel, bdev_io);
return; return;
@ -826,12 +826,12 @@ spdk_bdev_read_blocks(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch,
bdev_io->ch = channel; bdev_io->ch = channel;
bdev_io->type = SPDK_BDEV_IO_TYPE_READ; bdev_io->type = SPDK_BDEV_IO_TYPE_READ;
bdev_io->u.read.iov.iov_base = buf; bdev_io->u.bdev.iov.iov_base = buf;
bdev_io->u.read.iov.iov_len = num_blocks * bdev->blocklen; bdev_io->u.bdev.iov.iov_len = num_blocks * bdev->blocklen;
bdev_io->u.read.iovs = &bdev_io->u.read.iov; bdev_io->u.bdev.iovs = &bdev_io->u.bdev.iov;
bdev_io->u.read.iovcnt = 1; bdev_io->u.bdev.iovcnt = 1;
bdev_io->u.read.num_blocks = num_blocks; bdev_io->u.bdev.num_blocks = num_blocks;
bdev_io->u.read.offset_blocks = offset_blocks; bdev_io->u.bdev.offset_blocks = offset_blocks;
spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb); spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb);
spdk_bdev_io_submit(bdev_io); spdk_bdev_io_submit(bdev_io);
@ -874,10 +874,10 @@ int spdk_bdev_readv_blocks(struct spdk_bdev_desc *desc, struct spdk_io_channel *
bdev_io->ch = channel; bdev_io->ch = channel;
bdev_io->type = SPDK_BDEV_IO_TYPE_READ; bdev_io->type = SPDK_BDEV_IO_TYPE_READ;
bdev_io->u.read.iovs = iov; bdev_io->u.bdev.iovs = iov;
bdev_io->u.read.iovcnt = iovcnt; bdev_io->u.bdev.iovcnt = iovcnt;
bdev_io->u.read.num_blocks = num_blocks; bdev_io->u.bdev.num_blocks = num_blocks;
bdev_io->u.read.offset_blocks = offset_blocks; bdev_io->u.bdev.offset_blocks = offset_blocks;
spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb); spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb);
spdk_bdev_io_submit(bdev_io); spdk_bdev_io_submit(bdev_io);
@ -923,12 +923,12 @@ spdk_bdev_write_blocks(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch,
bdev_io->ch = channel; bdev_io->ch = channel;
bdev_io->type = SPDK_BDEV_IO_TYPE_WRITE; bdev_io->type = SPDK_BDEV_IO_TYPE_WRITE;
bdev_io->u.write.iov.iov_base = buf; bdev_io->u.bdev.iov.iov_base = buf;
bdev_io->u.write.iov.iov_len = num_blocks * bdev->blocklen; bdev_io->u.bdev.iov.iov_len = num_blocks * bdev->blocklen;
bdev_io->u.write.iovs = &bdev_io->u.write.iov; bdev_io->u.bdev.iovs = &bdev_io->u.bdev.iov;
bdev_io->u.write.iovcnt = 1; bdev_io->u.bdev.iovcnt = 1;
bdev_io->u.write.num_blocks = num_blocks; bdev_io->u.bdev.num_blocks = num_blocks;
bdev_io->u.write.offset_blocks = offset_blocks; bdev_io->u.bdev.offset_blocks = offset_blocks;
spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb); spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb);
spdk_bdev_io_submit(bdev_io); spdk_bdev_io_submit(bdev_io);
@ -976,10 +976,10 @@ spdk_bdev_writev_blocks(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch,
bdev_io->ch = channel; bdev_io->ch = channel;
bdev_io->type = SPDK_BDEV_IO_TYPE_WRITE; bdev_io->type = SPDK_BDEV_IO_TYPE_WRITE;
bdev_io->u.write.iovs = iov; bdev_io->u.bdev.iovs = iov;
bdev_io->u.write.iovcnt = iovcnt; bdev_io->u.bdev.iovcnt = iovcnt;
bdev_io->u.write.num_blocks = num_blocks; bdev_io->u.bdev.num_blocks = num_blocks;
bdev_io->u.write.offset_blocks = offset_blocks; bdev_io->u.bdev.offset_blocks = offset_blocks;
spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb); spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb);
spdk_bdev_io_submit(bdev_io); spdk_bdev_io_submit(bdev_io);
@ -1020,8 +1020,8 @@ spdk_bdev_write_zeroes_blocks(struct spdk_bdev_desc *desc, struct spdk_io_channe
} }
bdev_io->ch = channel; bdev_io->ch = channel;
bdev_io->u.write.num_blocks = num_blocks; bdev_io->u.bdev.num_blocks = num_blocks;
bdev_io->u.write.offset_blocks = offset_blocks; bdev_io->u.bdev.offset_blocks = offset_blocks;
bdev_io->type = SPDK_BDEV_IO_TYPE_WRITE_ZEROES; bdev_io->type = SPDK_BDEV_IO_TYPE_WRITE_ZEROES;
spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb); spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb);
@ -1074,8 +1074,8 @@ spdk_bdev_unmap_blocks(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch,
bdev_io->ch = channel; bdev_io->ch = channel;
bdev_io->type = SPDK_BDEV_IO_TYPE_UNMAP; bdev_io->type = SPDK_BDEV_IO_TYPE_UNMAP;
bdev_io->u.unmap.offset_blocks = offset_blocks; bdev_io->u.bdev.offset_blocks = offset_blocks;
bdev_io->u.unmap.num_blocks = num_blocks; bdev_io->u.bdev.num_blocks = num_blocks;
spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb); spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb);
spdk_bdev_io_submit(bdev_io); spdk_bdev_io_submit(bdev_io);
@ -1121,8 +1121,8 @@ spdk_bdev_flush_blocks(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch,
bdev_io->ch = channel; bdev_io->ch = channel;
bdev_io->type = SPDK_BDEV_IO_TYPE_FLUSH; bdev_io->type = SPDK_BDEV_IO_TYPE_FLUSH;
bdev_io->u.flush.offset_blocks = offset_blocks; bdev_io->u.bdev.offset_blocks = offset_blocks;
bdev_io->u.flush.num_blocks = num_blocks; bdev_io->u.bdev.num_blocks = num_blocks;
spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb); spdk_bdev_io_init(bdev_io, bdev, cb_arg, cb);
spdk_bdev_io_submit(bdev_io); spdk_bdev_io_submit(bdev_io);
@ -1343,11 +1343,11 @@ spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status sta
if (status == SPDK_BDEV_IO_STATUS_SUCCESS) { if (status == SPDK_BDEV_IO_STATUS_SUCCESS) {
switch (bdev_io->type) { switch (bdev_io->type) {
case SPDK_BDEV_IO_TYPE_READ: case SPDK_BDEV_IO_TYPE_READ:
bdev_io->ch->stat.bytes_read += bdev_io->u.read.num_blocks * bdev_io->bdev->blocklen; bdev_io->ch->stat.bytes_read += bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
bdev_io->ch->stat.num_read_ops++; bdev_io->ch->stat.num_read_ops++;
break; break;
case SPDK_BDEV_IO_TYPE_WRITE: case SPDK_BDEV_IO_TYPE_WRITE:
bdev_io->ch->stat.bytes_written += bdev_io->u.write.num_blocks * bdev_io->bdev->blocklen; bdev_io->ch->stat.bytes_written += bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
bdev_io->ch->stat.num_write_ops++; bdev_io->ch->stat.num_write_ops++;
break; break;
default: default:
@ -1692,12 +1692,12 @@ spdk_bdev_io_get_iovec(struct spdk_bdev_io *bdev_io, struct iovec **iovp, int *i
switch (bdev_io->type) { switch (bdev_io->type) {
case SPDK_BDEV_IO_TYPE_READ: case SPDK_BDEV_IO_TYPE_READ:
iovs = bdev_io->u.read.iovs; iovs = bdev_io->u.bdev.iovs;
iovcnt = bdev_io->u.read.iovcnt; iovcnt = bdev_io->u.bdev.iovcnt;
break; break;
case SPDK_BDEV_IO_TYPE_WRITE: case SPDK_BDEV_IO_TYPE_WRITE:
iovs = bdev_io->u.write.iovs; iovs = bdev_io->u.bdev.iovs;
iovcnt = bdev_io->u.write.iovcnt; iovcnt = bdev_io->u.bdev.iovcnt;
break; break;
default: default:
iovs = NULL; iovs = NULL;
@ -1817,32 +1817,32 @@ spdk_bdev_part_submit_request(struct spdk_bdev_part_channel *ch, struct spdk_bde
/* Modify the I/O to adjust for the offset within the base bdev. */ /* Modify the I/O to adjust for the offset within the base bdev. */
switch (bdev_io->type) { switch (bdev_io->type) {
case SPDK_BDEV_IO_TYPE_READ: case SPDK_BDEV_IO_TYPE_READ:
offset = bdev_io->u.read.offset_blocks + part->offset_blocks; offset = bdev_io->u.bdev.offset_blocks + part->offset_blocks;
rc = spdk_bdev_readv_blocks(base_desc, base_ch, bdev_io->u.read.iovs, rc = spdk_bdev_readv_blocks(base_desc, base_ch, bdev_io->u.bdev.iovs,
bdev_io->u.read.iovcnt, offset, bdev_io->u.bdev.iovcnt, offset,
bdev_io->u.read.num_blocks, spdk_bdev_part_complete_io, bdev_io->u.bdev.num_blocks, spdk_bdev_part_complete_io,
bdev_io); bdev_io);
break; break;
case SPDK_BDEV_IO_TYPE_WRITE: case SPDK_BDEV_IO_TYPE_WRITE:
offset = bdev_io->u.write.offset_blocks + part->offset_blocks; offset = bdev_io->u.bdev.offset_blocks + part->offset_blocks;
rc = spdk_bdev_writev_blocks(base_desc, base_ch, bdev_io->u.write.iovs, rc = spdk_bdev_writev_blocks(base_desc, base_ch, bdev_io->u.bdev.iovs,
bdev_io->u.write.iovcnt, offset, bdev_io->u.bdev.iovcnt, offset,
bdev_io->u.write.num_blocks, spdk_bdev_part_complete_io, bdev_io->u.bdev.num_blocks, spdk_bdev_part_complete_io,
bdev_io); bdev_io);
break; break;
case SPDK_BDEV_IO_TYPE_WRITE_ZEROES: case SPDK_BDEV_IO_TYPE_WRITE_ZEROES:
offset = bdev_io->u.write.offset_blocks + part->offset_blocks; offset = bdev_io->u.bdev.offset_blocks + part->offset_blocks;
rc = spdk_bdev_write_zeroes_blocks(base_desc, base_ch, offset, bdev_io->u.write.num_blocks, rc = spdk_bdev_write_zeroes_blocks(base_desc, base_ch, offset, bdev_io->u.bdev.num_blocks,
spdk_bdev_part_complete_io, bdev_io); spdk_bdev_part_complete_io, bdev_io);
break; break;
case SPDK_BDEV_IO_TYPE_UNMAP: case SPDK_BDEV_IO_TYPE_UNMAP:
offset = bdev_io->u.unmap.offset_blocks + part->offset_blocks; offset = bdev_io->u.bdev.offset_blocks + part->offset_blocks;
rc = spdk_bdev_unmap_blocks(base_desc, base_ch, offset, bdev_io->u.unmap.num_blocks, rc = spdk_bdev_unmap_blocks(base_desc, base_ch, offset, bdev_io->u.bdev.num_blocks,
spdk_bdev_part_complete_io, bdev_io); spdk_bdev_part_complete_io, bdev_io);
break; break;
case SPDK_BDEV_IO_TYPE_FLUSH: case SPDK_BDEV_IO_TYPE_FLUSH:
offset = bdev_io->u.flush.offset_blocks + part->offset_blocks; offset = bdev_io->u.bdev.offset_blocks + part->offset_blocks;
rc = spdk_bdev_flush_blocks(base_desc, base_ch, offset, bdev_io->u.flush.num_blocks, rc = spdk_bdev_flush_blocks(base_desc, base_ch, offset, bdev_io->u.bdev.num_blocks,
spdk_bdev_part_complete_io, bdev_io); spdk_bdev_part_complete_io, bdev_io);
break; break;
case SPDK_BDEV_IO_TYPE_RESET: case SPDK_BDEV_IO_TYPE_RESET:

View File

@ -316,15 +316,16 @@ lvol_read(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
struct spdk_blob *blob = lvol->blob; struct spdk_blob *blob = lvol->blob;
struct lvol_task *task = (struct lvol_task *)bdev_io->driver_ctx; struct lvol_task *task = (struct lvol_task *)bdev_io->driver_ctx;
start_page = bdev_io->u.read.offset_blocks; start_page = bdev_io->u.bdev.offset_blocks;
num_pages = bdev_io->u.read.num_blocks; num_pages = bdev_io->u.bdev.num_blocks;
task->status = SPDK_BDEV_IO_STATUS_SUCCESS; task->status = SPDK_BDEV_IO_STATUS_SUCCESS;
SPDK_INFOLOG(SPDK_TRACE_VBDEV_LVOL, SPDK_INFOLOG(SPDK_TRACE_VBDEV_LVOL,
"Vbdev doing read at offset %" PRIu64 " using %" PRIu64 " pages on device %s\n", start_page, "Vbdev doing read at offset %" PRIu64 " using %" PRIu64 " pages on device %s\n", start_page,
num_pages, bdev_io->bdev->name); num_pages, bdev_io->bdev->name);
spdk_bs_io_readv_blob(blob, ch, bdev_io->u.read.iovs, bdev_io->u.read.iovcnt, start_page, num_pages, spdk_bs_io_readv_blob(blob, ch, bdev_io->u.bdev.iovs, bdev_io->u.bdev.iovcnt, start_page,
num_pages,
lvol_op_comp, task); lvol_op_comp, task);
} }
@ -335,15 +336,15 @@ lvol_write(struct spdk_lvol *lvol, struct spdk_io_channel *ch, struct spdk_bdev_
struct spdk_blob *blob = lvol->blob; struct spdk_blob *blob = lvol->blob;
struct lvol_task *task = (struct lvol_task *)bdev_io->driver_ctx; struct lvol_task *task = (struct lvol_task *)bdev_io->driver_ctx;
start_page = bdev_io->u.write.offset_blocks; start_page = bdev_io->u.bdev.offset_blocks;
num_pages = bdev_io->u.write.num_blocks; num_pages = bdev_io->u.bdev.num_blocks;
task->status = SPDK_BDEV_IO_STATUS_SUCCESS; task->status = SPDK_BDEV_IO_STATUS_SUCCESS;
SPDK_INFOLOG(SPDK_TRACE_VBDEV_LVOL, SPDK_INFOLOG(SPDK_TRACE_VBDEV_LVOL,
"Vbdev doing write at offset %" PRIu64 " using %" PRIu64 " pages on device %s\n", start_page, "Vbdev doing write at offset %" PRIu64 " using %" PRIu64 " pages on device %s\n", start_page,
num_pages, bdev_io->bdev->name); num_pages, bdev_io->bdev->name);
spdk_bs_io_writev_blob(blob, ch, bdev_io->u.write.iovs, bdev_io->u.write.iovcnt, start_page, spdk_bs_io_writev_blob(blob, ch, bdev_io->u.bdev.iovs, bdev_io->u.bdev.iovcnt, start_page,
num_pages, lvol_op_comp, task); num_pages, lvol_op_comp, task);
} }

View File

@ -265,12 +265,12 @@ static int _bdev_malloc_submit_request(struct spdk_io_channel *ch, struct spdk_b
switch (bdev_io->type) { switch (bdev_io->type) {
case SPDK_BDEV_IO_TYPE_READ: case SPDK_BDEV_IO_TYPE_READ:
if (bdev_io->u.read.iovs[0].iov_base == NULL) { if (bdev_io->u.bdev.iovs[0].iov_base == NULL) {
assert(bdev_io->u.read.iovcnt == 1); assert(bdev_io->u.bdev.iovcnt == 1);
bdev_io->u.read.iovs[0].iov_base = bdev_io->u.bdev.iovs[0].iov_base =
((struct malloc_disk *)bdev_io->bdev->ctxt)->malloc_buf + ((struct malloc_disk *)bdev_io->bdev->ctxt)->malloc_buf +
bdev_io->u.read.offset_blocks * block_size; bdev_io->u.bdev.offset_blocks * block_size;
bdev_io->u.read.iovs[0].iov_len = bdev_io->u.read.num_blocks * block_size; bdev_io->u.bdev.iovs[0].iov_len = bdev_io->u.bdev.num_blocks * block_size;
spdk_bdev_io_complete(spdk_bdev_io_from_ctx(bdev_io->driver_ctx), spdk_bdev_io_complete(spdk_bdev_io_from_ctx(bdev_io->driver_ctx),
SPDK_BDEV_IO_STATUS_SUCCESS); SPDK_BDEV_IO_STATUS_SUCCESS);
return 0; return 0;
@ -279,20 +279,20 @@ static int _bdev_malloc_submit_request(struct spdk_io_channel *ch, struct spdk_b
bdev_malloc_readv((struct malloc_disk *)bdev_io->bdev->ctxt, bdev_malloc_readv((struct malloc_disk *)bdev_io->bdev->ctxt,
ch, ch,
(struct malloc_task *)bdev_io->driver_ctx, (struct malloc_task *)bdev_io->driver_ctx,
bdev_io->u.read.iovs, bdev_io->u.bdev.iovs,
bdev_io->u.read.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.read.num_blocks * block_size, bdev_io->u.bdev.num_blocks * block_size,
bdev_io->u.read.offset_blocks * block_size); bdev_io->u.bdev.offset_blocks * block_size);
return 0; return 0;
case SPDK_BDEV_IO_TYPE_WRITE: case SPDK_BDEV_IO_TYPE_WRITE:
bdev_malloc_writev((struct malloc_disk *)bdev_io->bdev->ctxt, bdev_malloc_writev((struct malloc_disk *)bdev_io->bdev->ctxt,
ch, ch,
(struct malloc_task *)bdev_io->driver_ctx, (struct malloc_task *)bdev_io->driver_ctx,
bdev_io->u.write.iovs, bdev_io->u.bdev.iovs,
bdev_io->u.write.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.write.num_blocks * block_size, bdev_io->u.bdev.num_blocks * block_size,
bdev_io->u.write.offset_blocks * block_size); bdev_io->u.bdev.offset_blocks * block_size);
return 0; return 0;
case SPDK_BDEV_IO_TYPE_RESET: case SPDK_BDEV_IO_TYPE_RESET:
@ -302,23 +302,23 @@ static int _bdev_malloc_submit_request(struct spdk_io_channel *ch, struct spdk_b
case SPDK_BDEV_IO_TYPE_FLUSH: case SPDK_BDEV_IO_TYPE_FLUSH:
return bdev_malloc_flush((struct malloc_disk *)bdev_io->bdev->ctxt, return bdev_malloc_flush((struct malloc_disk *)bdev_io->bdev->ctxt,
(struct malloc_task *)bdev_io->driver_ctx, (struct malloc_task *)bdev_io->driver_ctx,
bdev_io->u.flush.offset_blocks * block_size, bdev_io->u.bdev.offset_blocks * block_size,
bdev_io->u.flush.num_blocks * block_size); bdev_io->u.bdev.num_blocks * block_size);
case SPDK_BDEV_IO_TYPE_UNMAP: case SPDK_BDEV_IO_TYPE_UNMAP:
return bdev_malloc_unmap((struct malloc_disk *)bdev_io->bdev->ctxt, return bdev_malloc_unmap((struct malloc_disk *)bdev_io->bdev->ctxt,
ch, ch,
(struct malloc_task *)bdev_io->driver_ctx, (struct malloc_task *)bdev_io->driver_ctx,
bdev_io->u.unmap.offset_blocks * block_size, bdev_io->u.bdev.offset_blocks * block_size,
bdev_io->u.unmap.num_blocks * block_size); bdev_io->u.bdev.num_blocks * block_size);
case SPDK_BDEV_IO_TYPE_WRITE_ZEROES: case SPDK_BDEV_IO_TYPE_WRITE_ZEROES:
/* bdev_malloc_unmap is implemented with a call to mem_cpy_fill which zeroes out all of the requested bytes. */ /* bdev_malloc_unmap is implemented with a call to mem_cpy_fill which zeroes out all of the requested bytes. */
return bdev_malloc_unmap((struct malloc_disk *)bdev_io->bdev->ctxt, return bdev_malloc_unmap((struct malloc_disk *)bdev_io->bdev->ctxt,
ch, ch,
(struct malloc_task *)bdev_io->driver_ctx, (struct malloc_task *)bdev_io->driver_ctx,
bdev_io->u.write.offset_blocks * block_size, bdev_io->u.bdev.offset_blocks * block_size,
bdev_io->u.write.num_blocks * block_size); bdev_io->u.bdev.num_blocks * block_size);
default: default:
return -1; return -1;

View File

@ -76,10 +76,10 @@ bdev_null_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i
{ {
switch (bdev_io->type) { switch (bdev_io->type) {
case SPDK_BDEV_IO_TYPE_READ: case SPDK_BDEV_IO_TYPE_READ:
if (bdev_io->u.read.iovs[0].iov_base == NULL) { if (bdev_io->u.bdev.iovs[0].iov_base == NULL) {
assert(bdev_io->u.read.iovcnt == 1); assert(bdev_io->u.bdev.iovcnt == 1);
bdev_io->u.read.iovs[0].iov_base = g_null_read_buf; bdev_io->u.bdev.iovs[0].iov_base = g_null_read_buf;
bdev_io->u.read.iovs[0].iov_len = bdev_io->u.read.num_blocks * bdev_io->bdev->blocklen; bdev_io->u.bdev.iovs[0].iov_len = bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen;
} }
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_SUCCESS); spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_SUCCESS);
break; break;

View File

@ -340,10 +340,10 @@ bdev_nvme_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
ret = bdev_nvme_readv((struct nvme_bdev *)bdev_io->bdev->ctxt, ret = bdev_nvme_readv((struct nvme_bdev *)bdev_io->bdev->ctxt,
ch, ch,
(struct nvme_bdev_io *)bdev_io->driver_ctx, (struct nvme_bdev_io *)bdev_io->driver_ctx,
bdev_io->u.read.iovs, bdev_io->u.bdev.iovs,
bdev_io->u.read.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.read.num_blocks, bdev_io->u.bdev.num_blocks,
bdev_io->u.read.offset_blocks); bdev_io->u.bdev.offset_blocks);
if (ret < 0) { if (ret < 0) {
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
@ -368,24 +368,24 @@ _bdev_nvme_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_
return bdev_nvme_writev((struct nvme_bdev *)bdev_io->bdev->ctxt, return bdev_nvme_writev((struct nvme_bdev *)bdev_io->bdev->ctxt,
ch, ch,
(struct nvme_bdev_io *)bdev_io->driver_ctx, (struct nvme_bdev_io *)bdev_io->driver_ctx,
bdev_io->u.write.iovs, bdev_io->u.bdev.iovs,
bdev_io->u.write.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.write.num_blocks, bdev_io->u.bdev.num_blocks,
bdev_io->u.write.offset_blocks); bdev_io->u.bdev.offset_blocks);
case SPDK_BDEV_IO_TYPE_WRITE_ZEROES: case SPDK_BDEV_IO_TYPE_WRITE_ZEROES:
return bdev_nvme_unmap((struct nvme_bdev *)bdev_io->bdev->ctxt, return bdev_nvme_unmap((struct nvme_bdev *)bdev_io->bdev->ctxt,
ch, ch,
(struct nvme_bdev_io *)bdev_io->driver_ctx, (struct nvme_bdev_io *)bdev_io->driver_ctx,
bdev_io->u.unmap.offset_blocks, bdev_io->u.bdev.offset_blocks,
bdev_io->u.unmap.num_blocks); bdev_io->u.bdev.num_blocks);
case SPDK_BDEV_IO_TYPE_UNMAP: case SPDK_BDEV_IO_TYPE_UNMAP:
return bdev_nvme_unmap((struct nvme_bdev *)bdev_io->bdev->ctxt, return bdev_nvme_unmap((struct nvme_bdev *)bdev_io->bdev->ctxt,
ch, ch,
(struct nvme_bdev_io *)bdev_io->driver_ctx, (struct nvme_bdev_io *)bdev_io->driver_ctx,
bdev_io->u.unmap.offset_blocks, bdev_io->u.bdev.offset_blocks,
bdev_io->u.unmap.num_blocks); bdev_io->u.bdev.num_blocks);
case SPDK_BDEV_IO_TYPE_RESET: case SPDK_BDEV_IO_TYPE_RESET:
return bdev_nvme_reset((struct nvme_bdev *)bdev_io->bdev->ctxt, return bdev_nvme_reset((struct nvme_bdev *)bdev_io->bdev->ctxt,
@ -394,8 +394,8 @@ _bdev_nvme_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_
case SPDK_BDEV_IO_TYPE_FLUSH: case SPDK_BDEV_IO_TYPE_FLUSH:
return bdev_nvme_flush((struct nvme_bdev *)bdev_io->bdev->ctxt, return bdev_nvme_flush((struct nvme_bdev *)bdev_io->bdev->ctxt,
(struct nvme_bdev_io *)bdev_io->driver_ctx, (struct nvme_bdev_io *)bdev_io->driver_ctx,
bdev_io->u.flush.offset_blocks, bdev_io->u.bdev.offset_blocks,
bdev_io->u.flush.num_blocks); bdev_io->u.bdev.num_blocks);
case SPDK_BDEV_IO_TYPE_NVME_ADMIN: case SPDK_BDEV_IO_TYPE_NVME_ADMIN:
return bdev_nvme_admin_passthru((struct nvme_bdev *)bdev_io->bdev->ctxt, return bdev_nvme_admin_passthru((struct nvme_bdev *)bdev_io->bdev->ctxt,

View File

@ -258,10 +258,10 @@ static void bdev_rbd_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io
ret = bdev_rbd_readv(bdev_io->bdev->ctxt, ret = bdev_rbd_readv(bdev_io->bdev->ctxt,
ch, ch,
bdev_io, bdev_io,
bdev_io->u.read.iovs, bdev_io->u.bdev.iovs,
bdev_io->u.read.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.read.num_blocks * bdev_io->bdev->blocklen, bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen,
bdev_io->u.read.offset_blocks * bdev_io->bdev->blocklen); bdev_io->u.bdev.offset_blocks * bdev_io->bdev->blocklen);
if (ret != 0) { if (ret != 0) {
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
@ -279,16 +279,16 @@ static int _bdev_rbd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev
return bdev_rbd_writev((struct bdev_rbd *)bdev_io->bdev->ctxt, return bdev_rbd_writev((struct bdev_rbd *)bdev_io->bdev->ctxt,
ch, ch,
bdev_io, bdev_io,
bdev_io->u.write.iovs, bdev_io->u.bdev.iovs,
bdev_io->u.write.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.write.num_blocks * bdev_io->bdev->blocklen, bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen,
bdev_io->u.write.offset_blocks * bdev_io->bdev->blocklen); bdev_io->u.bdev.offset_blocks * bdev_io->bdev->blocklen);
case SPDK_BDEV_IO_TYPE_FLUSH: case SPDK_BDEV_IO_TYPE_FLUSH:
return bdev_rbd_flush((struct bdev_rbd *)bdev_io->bdev->ctxt, return bdev_rbd_flush((struct bdev_rbd *)bdev_io->bdev->ctxt,
ch, ch,
bdev_io, bdev_io,
bdev_io->u.flush.offset_blocks * bdev_io->bdev->blocklen, bdev_io->u.bdev.offset_blocks * bdev_io->bdev->blocklen,
bdev_io->u.flush.num_blocks * bdev_io->bdev->blocklen); bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen);
default: default:
return -1; return -1;
} }
@ -337,7 +337,7 @@ bdev_rbd_io_poll(void *arg)
bdev_io = rbd_aio_get_arg(comps[i]); bdev_io = rbd_aio_get_arg(comps[i]);
io_status = rbd_aio_get_return_value(comps[i]); io_status = rbd_aio_get_return_value(comps[i]);
if (bdev_io->type == SPDK_BDEV_IO_TYPE_READ) { if (bdev_io->type == SPDK_BDEV_IO_TYPE_READ) {
if ((int)(bdev_io->u.read.num_blocks * bdev_io->bdev->blocklen) == io_status) { if ((int)(bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen) == io_status) {
status = SPDK_BDEV_IO_STATUS_SUCCESS; status = SPDK_BDEV_IO_STATUS_SUCCESS;
} else { } else {
status = SPDK_BDEV_IO_STATUS_FAILED; status = SPDK_BDEV_IO_STATUS_FAILED;

View File

@ -135,28 +135,28 @@ bdev_virtio_rw(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
req->lun[1] = 0; req->lun[1] = 0;
if (is_read) { if (is_read) {
vreq->iov = bdev_io->u.read.iovs; vreq->iov = bdev_io->u.bdev.iovs;
vreq->iovcnt = bdev_io->u.read.iovcnt; vreq->iovcnt = bdev_io->u.bdev.iovcnt;
if (disk->num_blocks > (1ULL << 32)) { if (disk->num_blocks > (1ULL << 32)) {
req->cdb[0] = SPDK_SBC_READ_16; req->cdb[0] = SPDK_SBC_READ_16;
to_be64(&req->cdb[2], bdev_io->u.read.offset_blocks); to_be64(&req->cdb[2], bdev_io->u.bdev.offset_blocks);
to_be32(&req->cdb[10], bdev_io->u.read.num_blocks); to_be32(&req->cdb[10], bdev_io->u.bdev.num_blocks);
} else { } else {
req->cdb[0] = SPDK_SBC_READ_10; req->cdb[0] = SPDK_SBC_READ_10;
to_be32(&req->cdb[2], bdev_io->u.read.offset_blocks); to_be32(&req->cdb[2], bdev_io->u.bdev.offset_blocks);
to_be16(&req->cdb[7], bdev_io->u.read.num_blocks); to_be16(&req->cdb[7], bdev_io->u.bdev.num_blocks);
} }
} else { } else {
vreq->iov = bdev_io->u.write.iovs; vreq->iov = bdev_io->u.bdev.iovs;
vreq->iovcnt = bdev_io->u.write.iovcnt; vreq->iovcnt = bdev_io->u.bdev.iovcnt;
if (disk->num_blocks > (1ULL << 32)) { if (disk->num_blocks > (1ULL << 32)) {
req->cdb[0] = SPDK_SBC_WRITE_16; req->cdb[0] = SPDK_SBC_WRITE_16;
to_be64(&req->cdb[2], bdev_io->u.write.offset_blocks); to_be64(&req->cdb[2], bdev_io->u.bdev.offset_blocks);
to_be32(&req->cdb[10], bdev_io->u.write.num_blocks); to_be32(&req->cdb[10], bdev_io->u.bdev.num_blocks);
} else { } else {
req->cdb[0] = SPDK_SBC_WRITE_10; req->cdb[0] = SPDK_SBC_WRITE_10;
to_be32(&req->cdb[2], bdev_io->u.write.offset_blocks); to_be32(&req->cdb[2], bdev_io->u.bdev.offset_blocks);
to_be16(&req->cdb[7], bdev_io->u.write.num_blocks); to_be16(&req->cdb[7], bdev_io->u.bdev.num_blocks);
} }
} }