Commit 52d2405f authored by Jim Harris's avatar Jim Harris
Browse files

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: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: Ia729b0af555f87c2fb36b92e79a47d19a325de7a
parent 72b4cda8
Loading
Loading
Loading
Loading
+36 −21
Original line number Diff line number Diff line
@@ -118,31 +118,44 @@ blockdev_malloc_destruct(struct spdk_bdev *bdev)
	return 0;
}

static int64_t
static void
blockdev_malloc_read(struct malloc_disk *mdisk, struct spdk_io_channel *ch,
		     struct copy_task *copy_req,
		     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",
		      nbytes, offset, buf);

	return spdk_copy_submit(copy_req, ch, buf, mdisk->malloc_buf + offset,
				nbytes, malloc_done);
	rc = spdk_copy_submit(copy_req, ch, buf, mdisk->malloc_buf + offset, 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,
		       struct copy_task *copy_req,
		       struct iovec *iov, int iovcnt, size_t len, uint64_t offset)
{
	if ((iovcnt != 1) || (iov->iov_len != len))
		return -1;
	int64_t rc;

	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",
		      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);

	if (rc != (int64_t)len) {
		spdk_bdev_io_complete(spdk_bdev_io_from_ctx(copy_req), SPDK_BDEV_IO_STATUS_FAILED);
	}
}

static int
@@ -204,21 +217,23 @@ static int _blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io)
			return 0;
		}

		return blockdev_malloc_read((struct malloc_disk *)bdev_io->ctx,
		blockdev_malloc_read((struct malloc_disk *)bdev_io->ctx,
				     bdev_io->ch,
				     (struct copy_task *)bdev_io->driver_ctx,
				     bdev_io->u.read.buf,
				     bdev_io->u.read.nbytes,
				     bdev_io->u.read.offset);
		return 0;

	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,
				       (struct copy_task *)bdev_io->driver_ctx,
				       bdev_io->u.write.iovs,
				       bdev_io->u.write.iovcnt,
				       bdev_io->u.write.len,
				       bdev_io->u.write.offset);
		return 0;

	case SPDK_BDEV_IO_TYPE_RESET:
		return blockdev_malloc_reset((struct malloc_disk *)bdev_io->ctx,