bdev: Pass correct channel to bdev modules
Change-Id: I38911e70303f66f479c1495d4dbe02b2205cab8a Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
6d3a4cd2a4
commit
3415ce1227
@ -168,7 +168,6 @@ enum spdk_bdev_reset_type {
|
||||
typedef void (*spdk_bdev_io_completion_cb)(struct spdk_bdev_io *bdev_io,
|
||||
enum spdk_bdev_io_status status,
|
||||
void *cb_arg);
|
||||
typedef void (*spdk_bdev_io_get_rbuf_cb)(struct spdk_bdev_io *bdev_io);
|
||||
|
||||
struct spdk_bdev *spdk_bdev_get_by_name(const char *bdev_name);
|
||||
void spdk_bdev_unregister(struct spdk_bdev *bdev);
|
||||
|
@ -127,7 +127,7 @@ struct spdk_bdev_fn_table {
|
||||
int (*destruct)(void *ctx);
|
||||
|
||||
/** Process the IO. */
|
||||
void (*submit_request)(struct spdk_bdev_io *);
|
||||
void (*submit_request)(struct spdk_io_channel *ch, struct spdk_bdev_io *);
|
||||
|
||||
/** Check if the block device supports a specific I/O type. */
|
||||
bool (*io_type_supported)(void *ctx, enum spdk_bdev_io_type);
|
||||
@ -145,6 +145,8 @@ struct spdk_bdev_fn_table {
|
||||
int (*dump_config_json)(void *ctx, struct spdk_json_write_ctx *w);
|
||||
};
|
||||
|
||||
typedef void (*spdk_bdev_io_get_rbuf_cb)(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io);
|
||||
|
||||
struct spdk_bdev_io {
|
||||
/** Pointer to scratch area reserved for use by the driver consuming this spdk_bdev_io. */
|
||||
void *ctx;
|
||||
@ -152,8 +154,8 @@ struct spdk_bdev_io {
|
||||
/** The block device that this I/O belongs to. */
|
||||
struct spdk_bdev *bdev;
|
||||
|
||||
/** The I/O channel to submit this I/O on. */
|
||||
struct spdk_io_channel *ch;
|
||||
/** The bdev I/O channel that this was submitted on. */
|
||||
struct spdk_bdev_channel *ch;
|
||||
|
||||
/** Generation value for each I/O. */
|
||||
uint32_t gencnt;
|
||||
|
@ -224,10 +224,10 @@ blockdev_aio_reset(struct file_disk *fdisk, struct blockdev_aio_task *aio_task)
|
||||
spdk_bdev_io_complete(spdk_bdev_io_from_ctx(aio_task), SPDK_BDEV_IO_STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
static void blockdev_aio_get_rbuf_cb(struct spdk_bdev_io *bdev_io)
|
||||
static void blockdev_aio_get_rbuf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
blockdev_aio_readv((struct file_disk *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct blockdev_aio_task *)bdev_io->driver_ctx,
|
||||
bdev_io->u.read.iovs,
|
||||
bdev_io->u.read.iovcnt,
|
||||
@ -235,7 +235,7 @@ static void blockdev_aio_get_rbuf_cb(struct spdk_bdev_io *bdev_io)
|
||||
bdev_io->u.read.offset);
|
||||
}
|
||||
|
||||
static int _blockdev_aio_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
static int _blockdev_aio_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
switch (bdev_io->type) {
|
||||
case SPDK_BDEV_IO_TYPE_READ:
|
||||
@ -244,7 +244,7 @@ static int _blockdev_aio_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
|
||||
case SPDK_BDEV_IO_TYPE_WRITE:
|
||||
blockdev_aio_writev((struct file_disk *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct blockdev_aio_task *)bdev_io->driver_ctx,
|
||||
bdev_io->u.write.iovs,
|
||||
bdev_io->u.write.iovcnt,
|
||||
@ -267,9 +267,9 @@ static int _blockdev_aio_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
}
|
||||
}
|
||||
|
||||
static void blockdev_aio_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
static void blockdev_aio_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
if (_blockdev_aio_submit_request(bdev_io) < 0) {
|
||||
if (_blockdev_aio_submit_request(ch, bdev_io) < 0) {
|
||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||
}
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ spdk_bdev_io_set_rbuf(struct spdk_bdev_io *bdev_io, void *buf)
|
||||
bdev_io->u.read.iovs[0].iov_base = (void *)((unsigned long)((char *)buf + 512) & ~511UL);
|
||||
bdev_io->u.read.iovs[0].iov_len = bdev_io->u.read.len;
|
||||
bdev_io->u.read.put_rbuf = true;
|
||||
bdev_io->get_rbuf_cb(bdev_io);
|
||||
bdev_io->get_rbuf_cb(bdev_io->ch->channel, bdev_io);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -419,12 +419,19 @@ spdk_bdev_cleanup_pending_rbuf_io(struct spdk_bdev *bdev)
|
||||
static void
|
||||
__submit_request(struct spdk_bdev *bdev, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
struct spdk_io_channel *ch;
|
||||
|
||||
assert(bdev_io->status == SPDK_BDEV_IO_STATUS_PENDING);
|
||||
|
||||
if (bdev_io->type == SPDK_BDEV_IO_TYPE_RESET) {
|
||||
spdk_bdev_cleanup_pending_rbuf_io(bdev);
|
||||
ch = NULL;
|
||||
} else {
|
||||
ch = bdev_io->ch->channel;
|
||||
}
|
||||
|
||||
bdev_io->in_submit_request = true;
|
||||
bdev->fn_table->submit_request(bdev_io);
|
||||
bdev->fn_table->submit_request(ch, bdev_io);
|
||||
bdev_io->in_submit_request = false;
|
||||
}
|
||||
|
||||
@ -586,7 +593,7 @@ spdk_bdev_read(struct spdk_bdev *bdev, struct spdk_io_channel *ch,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bdev_io->ch = channel->channel;
|
||||
bdev_io->ch = channel;
|
||||
bdev_io->type = SPDK_BDEV_IO_TYPE_READ;
|
||||
bdev_io->u.read.iov.iov_base = buf;
|
||||
bdev_io->u.read.iov.iov_len = nbytes;
|
||||
@ -627,7 +634,7 @@ spdk_bdev_readv(struct spdk_bdev *bdev, struct spdk_io_channel *ch,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bdev_io->ch = channel->channel;
|
||||
bdev_io->ch = channel;
|
||||
bdev_io->type = SPDK_BDEV_IO_TYPE_READ;
|
||||
bdev_io->u.read.iovs = iov;
|
||||
bdev_io->u.read.iovcnt = iovcnt;
|
||||
@ -665,7 +672,7 @@ spdk_bdev_write(struct spdk_bdev *bdev, struct spdk_io_channel *ch,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bdev_io->ch = channel->channel;
|
||||
bdev_io->ch = channel;
|
||||
bdev_io->type = SPDK_BDEV_IO_TYPE_WRITE;
|
||||
bdev_io->u.write.iov.iov_base = buf;
|
||||
bdev_io->u.write.iov.iov_len = nbytes;
|
||||
@ -705,7 +712,7 @@ spdk_bdev_writev(struct spdk_bdev *bdev, struct spdk_io_channel *ch,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bdev_io->ch = channel->channel;
|
||||
bdev_io->ch = channel;
|
||||
bdev_io->type = SPDK_BDEV_IO_TYPE_WRITE;
|
||||
bdev_io->u.write.iovs = iov;
|
||||
bdev_io->u.write.iovcnt = iovcnt;
|
||||
@ -750,7 +757,7 @@ spdk_bdev_unmap(struct spdk_bdev *bdev, struct spdk_io_channel *ch,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bdev_io->ch = channel->channel;
|
||||
bdev_io->ch = channel;
|
||||
bdev_io->type = SPDK_BDEV_IO_TYPE_UNMAP;
|
||||
bdev_io->u.unmap.unmap_bdesc = unmap_d;
|
||||
bdev_io->u.unmap.bdesc_count = bdesc_count;
|
||||
@ -781,7 +788,7 @@ spdk_bdev_flush(struct spdk_bdev *bdev, struct spdk_io_channel *ch,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bdev_io->ch = channel->channel;
|
||||
bdev_io->ch = channel;
|
||||
bdev_io->type = SPDK_BDEV_IO_TYPE_FLUSH;
|
||||
bdev_io->u.flush.offset = offset;
|
||||
bdev_io->u.flush.length = length;
|
||||
@ -1098,7 +1105,7 @@ spdk_bdev_io_get_rbuf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_rbuf_cb cb)
|
||||
bdev_io->get_rbuf_cb = cb;
|
||||
_spdk_bdev_io_get_rbuf(bdev_io);
|
||||
} else {
|
||||
cb(bdev_io);
|
||||
cb(bdev_io->ch->channel, bdev_io);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -270,7 +270,7 @@ blockdev_malloc_reset(struct malloc_disk *mdisk, struct malloc_task *task)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
static int _blockdev_malloc_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
switch (bdev_io->type) {
|
||||
case SPDK_BDEV_IO_TYPE_READ:
|
||||
@ -287,7 +287,7 @@ static int _blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
}
|
||||
|
||||
blockdev_malloc_readv((struct malloc_disk *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct malloc_task *)bdev_io->driver_ctx,
|
||||
bdev_io->u.read.iovs,
|
||||
bdev_io->u.read.iovcnt,
|
||||
@ -297,7 +297,7 @@ static int _blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
|
||||
case SPDK_BDEV_IO_TYPE_WRITE:
|
||||
blockdev_malloc_writev((struct malloc_disk *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct malloc_task *)bdev_io->driver_ctx,
|
||||
bdev_io->u.write.iovs,
|
||||
bdev_io->u.write.iovcnt,
|
||||
@ -317,7 +317,7 @@ static int _blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
|
||||
case SPDK_BDEV_IO_TYPE_UNMAP:
|
||||
return blockdev_malloc_unmap((struct malloc_disk *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct malloc_task *)bdev_io->driver_ctx,
|
||||
bdev_io->u.unmap.unmap_bdesc,
|
||||
bdev_io->u.unmap.bdesc_count);
|
||||
@ -327,9 +327,9 @@ static int _blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
static void blockdev_malloc_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
if (_blockdev_malloc_submit_request(bdev_io) < 0) {
|
||||
if (_blockdev_malloc_submit_request(ch, bdev_io) < 0) {
|
||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||
}
|
||||
}
|
||||
|
@ -255,12 +255,12 @@ bdev_nvme_unmap(struct nvme_bdev *nbdev, struct spdk_io_channel *ch,
|
||||
uint16_t bdesc_count);
|
||||
|
||||
static void
|
||||
bdev_nvme_get_rbuf_cb(struct spdk_bdev_io *bdev_io)
|
||||
bdev_nvme_get_rbuf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bdev_nvme_readv((struct nvme_bdev *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct nvme_bdev_io *)bdev_io->driver_ctx,
|
||||
bdev_io->u.read.iovs,
|
||||
bdev_io->u.read.iovcnt,
|
||||
@ -273,7 +273,7 @@ bdev_nvme_get_rbuf_cb(struct spdk_bdev_io *bdev_io)
|
||||
}
|
||||
|
||||
static int
|
||||
_bdev_nvme_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
_bdev_nvme_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
switch (bdev_io->type) {
|
||||
case SPDK_BDEV_IO_TYPE_READ:
|
||||
@ -282,7 +282,7 @@ _bdev_nvme_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
|
||||
case SPDK_BDEV_IO_TYPE_WRITE:
|
||||
return bdev_nvme_writev((struct nvme_bdev *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct nvme_bdev_io *)bdev_io->driver_ctx,
|
||||
bdev_io->u.write.iovs,
|
||||
bdev_io->u.write.iovcnt,
|
||||
@ -291,7 +291,7 @@ _bdev_nvme_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
|
||||
case SPDK_BDEV_IO_TYPE_UNMAP:
|
||||
return bdev_nvme_unmap((struct nvme_bdev *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct nvme_bdev_io *)bdev_io->driver_ctx,
|
||||
bdev_io->u.unmap.unmap_bdesc,
|
||||
bdev_io->u.unmap.bdesc_count);
|
||||
@ -313,9 +313,9 @@ _bdev_nvme_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
}
|
||||
|
||||
static void
|
||||
bdev_nvme_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
bdev_nvme_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
if (_bdev_nvme_submit_request(bdev_io) < 0) {
|
||||
if (_bdev_nvme_submit_request(ch, bdev_io) < 0) {
|
||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||
}
|
||||
}
|
||||
|
@ -252,12 +252,12 @@ blockdev_rbd_destruct(void *ctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void blockdev_rbd_get_rbuf_cb(struct spdk_bdev_io *bdev_io)
|
||||
static void blockdev_rbd_get_rbuf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = blockdev_rbd_readv(bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct blockdev_rbd_io *)bdev_io->driver_ctx,
|
||||
bdev_io->u.read.iovs,
|
||||
bdev_io->u.read.iovcnt,
|
||||
@ -269,7 +269,7 @@ static void blockdev_rbd_get_rbuf_cb(struct spdk_bdev_io *bdev_io)
|
||||
}
|
||||
}
|
||||
|
||||
static int _blockdev_rbd_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
static int _blockdev_rbd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
switch (bdev_io->type) {
|
||||
case SPDK_BDEV_IO_TYPE_READ:
|
||||
@ -278,7 +278,7 @@ static int _blockdev_rbd_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
|
||||
case SPDK_BDEV_IO_TYPE_WRITE:
|
||||
return blockdev_rbd_writev((struct blockdev_rbd *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct blockdev_rbd_io *)bdev_io->driver_ctx,
|
||||
bdev_io->u.write.iovs,
|
||||
bdev_io->u.write.iovcnt,
|
||||
@ -286,7 +286,7 @@ static int _blockdev_rbd_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
bdev_io->u.write.offset);
|
||||
case SPDK_BDEV_IO_TYPE_FLUSH:
|
||||
return blockdev_rbd_flush((struct blockdev_rbd *)bdev_io->ctx,
|
||||
bdev_io->ch,
|
||||
ch,
|
||||
(struct blockdev_rbd_io *)bdev_io->driver_ctx,
|
||||
bdev_io->u.flush.offset,
|
||||
bdev_io->u.flush.length);
|
||||
@ -296,9 +296,9 @@ static int _blockdev_rbd_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void blockdev_rbd_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
static void blockdev_rbd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
if (_blockdev_rbd_submit_request(bdev_io) < 0) {
|
||||
if (_blockdev_rbd_submit_request(ch, bdev_io) < 0) {
|
||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||
}
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ split_reset(struct split_disk *split_disk, struct spdk_bdev_io *bdev_io)
|
||||
}
|
||||
|
||||
static void
|
||||
vbdev_split_submit_request(struct spdk_bdev_io *bdev_io)
|
||||
vbdev_split_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
{
|
||||
struct split_disk *split_disk = bdev_io->ctx;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user