bdev/malloc: simplify read/write return values

Return void in main I/O path, and have functions
explicitly complete the I/O back to the bdev layer
if any failures are encountered.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Ia729b0af555f87c2fb36b92e79a47d19a325de7a
This commit is contained in:
Jim Harris 2016-10-13 11:19:47 -07:00
parent 72b4cda87f
commit 52d2405f70

View File

@ -118,31 +118,44 @@ blockdev_malloc_destruct(struct spdk_bdev *bdev)
return 0; return 0;
} }
static int64_t static void
blockdev_malloc_read(struct malloc_disk *mdisk, struct spdk_io_channel *ch, blockdev_malloc_read(struct malloc_disk *mdisk, struct spdk_io_channel *ch,
struct copy_task *copy_req, struct copy_task *copy_req,
void *buf, uint64_t nbytes, uint64_t offset) void *buf, uint64_t nbytes, uint64_t offset)
{ {
int64_t rc;
SPDK_TRACELOG(SPDK_TRACE_MALLOC, "read %lu bytes from offset %#lx to %p\n", SPDK_TRACELOG(SPDK_TRACE_MALLOC, "read %lu bytes from offset %#lx to %p\n",
nbytes, offset, buf); nbytes, offset, buf);
return spdk_copy_submit(copy_req, ch, buf, mdisk->malloc_buf + offset, rc = spdk_copy_submit(copy_req, ch, buf, mdisk->malloc_buf + offset, nbytes, malloc_done);
nbytes, malloc_done);
if (rc != (int64_t)nbytes) {
spdk_bdev_io_complete(spdk_bdev_io_from_ctx(copy_req), SPDK_BDEV_IO_STATUS_FAILED);
}
} }
static int64_t static void
blockdev_malloc_writev(struct malloc_disk *mdisk, struct spdk_io_channel *ch, blockdev_malloc_writev(struct malloc_disk *mdisk, struct spdk_io_channel *ch,
struct copy_task *copy_req, struct copy_task *copy_req,
struct iovec *iov, int iovcnt, size_t len, uint64_t offset) struct iovec *iov, int iovcnt, size_t len, uint64_t offset)
{ {
if ((iovcnt != 1) || (iov->iov_len != len)) int64_t rc;
return -1;
if ((iovcnt != 1) || (iov->iov_len != len)) {
spdk_bdev_io_complete(spdk_bdev_io_from_ctx(copy_req), SPDK_BDEV_IO_STATUS_FAILED);
return;
}
SPDK_TRACELOG(SPDK_TRACE_MALLOC, "wrote %lu bytes to offset %#lx from %p\n", SPDK_TRACELOG(SPDK_TRACE_MALLOC, "wrote %lu bytes to offset %#lx from %p\n",
iov->iov_len, offset, iov->iov_base); iov->iov_len, offset, iov->iov_base);
return spdk_copy_submit(copy_req, ch, mdisk->malloc_buf + offset, rc = spdk_copy_submit(copy_req, ch, mdisk->malloc_buf + offset,
iov->iov_base, len, malloc_done); iov->iov_base, len, malloc_done);
if (rc != (int64_t)len) {
spdk_bdev_io_complete(spdk_bdev_io_from_ctx(copy_req), SPDK_BDEV_IO_STATUS_FAILED);
}
} }
static int static int
@ -204,21 +217,23 @@ static int _blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io)
return 0; return 0;
} }
return blockdev_malloc_read((struct malloc_disk *)bdev_io->ctx, blockdev_malloc_read((struct malloc_disk *)bdev_io->ctx,
bdev_io->ch, bdev_io->ch,
(struct copy_task *)bdev_io->driver_ctx, (struct copy_task *)bdev_io->driver_ctx,
bdev_io->u.read.buf, bdev_io->u.read.buf,
bdev_io->u.read.nbytes, bdev_io->u.read.nbytes,
bdev_io->u.read.offset); bdev_io->u.read.offset);
return 0;
case SPDK_BDEV_IO_TYPE_WRITE: case SPDK_BDEV_IO_TYPE_WRITE:
return blockdev_malloc_writev((struct malloc_disk *)bdev_io->ctx, blockdev_malloc_writev((struct malloc_disk *)bdev_io->ctx,
bdev_io->ch, bdev_io->ch,
(struct copy_task *)bdev_io->driver_ctx, (struct copy_task *)bdev_io->driver_ctx,
bdev_io->u.write.iovs, bdev_io->u.write.iovs,
bdev_io->u.write.iovcnt, bdev_io->u.write.iovcnt,
bdev_io->u.write.len, bdev_io->u.write.len,
bdev_io->u.write.offset); bdev_io->u.write.offset);
return 0;
case SPDK_BDEV_IO_TYPE_RESET: case SPDK_BDEV_IO_TYPE_RESET:
return blockdev_malloc_reset((struct malloc_disk *)bdev_io->ctx, return blockdev_malloc_reset((struct malloc_disk *)bdev_io->ctx,