bdev, rbd: Add flush support

Change-Id: I779d52b1af868c7e614faf37a50fecba65757536
Signed-off-by: Ziye Yang <ziye.yang@intel.com>
This commit is contained in:
Ziye Yang 2016-10-12 07:47:27 +08:00 committed by Daniel Verkamp
parent 9dd0f89486
commit 89b216a2a1

View File

@ -66,6 +66,7 @@ struct blockdev_rbd_pool_info {
enum blockdev_rbd_data_direction {
BLOCKDEV_RBD_READ = 0,
BLOCKDEV_RBD_WRITE = 1,
BLOCKDEV_RBD_FLUSH = 2,
};
struct blockdev_rbd_io {
@ -199,6 +200,8 @@ blockdev_rbd_start_aio(rbd_image_t image, struct blockdev_rbd_io *cmd,
} else if (cmd->direction == BLOCKDEV_RBD_WRITE) {
ret = rbd_aio_write(image, offset, len,
buf, cmd->completion);
} else if (cmd->direction == BLOCKDEV_RBD_FLUSH) {
ret = rbd_aio_flush(image, cmd->completion);
}
if (ret < 0) {
@ -251,6 +254,18 @@ blockdev_rbd_writev(struct blockdev_rbd *disk, struct spdk_io_channel *ch,
return blockdev_rbd_start_aio(rbdio_ch->image, cmd, (void *)iov->iov_base, offset, len);
}
static int64_t
blockdev_rbd_flush(struct blockdev_rbd *disk, struct spdk_io_channel *ch,
struct blockdev_rbd_io *cmd, uint64_t offset, uint64_t nbytes)
{
struct blockdev_rbd_io_channel *rbdio_ch = spdk_io_channel_get_ctx(ch);
cmd->ch = (void *)rbdio_ch;
cmd->direction = BLOCKDEV_RBD_FLUSH;
return blockdev_rbd_start_aio(rbdio_ch->image, cmd, NULL, offset, nbytes);
}
static int
blockdev_rbd_destruct(struct spdk_bdev *bdev)
{
@ -288,6 +303,12 @@ static int _blockdev_rbd_submit_request(struct spdk_bdev_io *bdev_io)
bdev_io->u.write.iovcnt,
bdev_io->u.write.len,
bdev_io->u.write.offset);
case SPDK_BDEV_IO_TYPE_FLUSH:
return blockdev_rbd_flush((struct blockdev_rbd *)bdev_io->ctx,
bdev_io->ch,
(struct blockdev_rbd_io *)bdev_io->driver_ctx,
bdev_io->u.flush.offset,
bdev_io->u.flush.length);
default:
return -1;
}
@ -307,6 +328,7 @@ blockdev_rbd_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io
switch (io_type) {
case SPDK_BDEV_IO_TYPE_READ:
case SPDK_BDEV_IO_TYPE_WRITE:
case SPDK_BDEV_IO_TYPE_FLUSH:
return true;
default: