gluster: Add discard support for GlusterFS block driver.
Implement bdrv_aio_discard for gluster. Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
e01bee0881
commit
0c14fb47ec
@ -532,6 +532,39 @@ out:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_GLUSTERFS_DISCARD
|
||||||
|
static BlockDriverAIOCB *qemu_gluster_aio_discard(BlockDriverState *bs,
|
||||||
|
int64_t sector_num, int nb_sectors, BlockDriverCompletionFunc *cb,
|
||||||
|
void *opaque)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
GlusterAIOCB *acb;
|
||||||
|
BDRVGlusterState *s = bs->opaque;
|
||||||
|
size_t size;
|
||||||
|
off_t offset;
|
||||||
|
|
||||||
|
offset = sector_num * BDRV_SECTOR_SIZE;
|
||||||
|
size = nb_sectors * BDRV_SECTOR_SIZE;
|
||||||
|
|
||||||
|
acb = qemu_aio_get(&gluster_aiocb_info, bs, cb, opaque);
|
||||||
|
acb->size = 0;
|
||||||
|
acb->ret = 0;
|
||||||
|
acb->finished = NULL;
|
||||||
|
s->qemu_aio_count++;
|
||||||
|
|
||||||
|
ret = glfs_discard_async(s->fd, offset, size, &gluster_finish_aiocb, acb);
|
||||||
|
if (ret < 0) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
return &acb->common;
|
||||||
|
|
||||||
|
out:
|
||||||
|
s->qemu_aio_count--;
|
||||||
|
qemu_aio_release(acb);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int64_t qemu_gluster_getlength(BlockDriverState *bs)
|
static int64_t qemu_gluster_getlength(BlockDriverState *bs)
|
||||||
{
|
{
|
||||||
BDRVGlusterState *s = bs->opaque;
|
BDRVGlusterState *s = bs->opaque;
|
||||||
@ -602,6 +635,9 @@ static BlockDriver bdrv_gluster = {
|
|||||||
.bdrv_aio_writev = qemu_gluster_aio_writev,
|
.bdrv_aio_writev = qemu_gluster_aio_writev,
|
||||||
.bdrv_aio_flush = qemu_gluster_aio_flush,
|
.bdrv_aio_flush = qemu_gluster_aio_flush,
|
||||||
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
|
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
|
||||||
|
#ifdef CONFIG_GLUSTERFS_DISCARD
|
||||||
|
.bdrv_aio_discard = qemu_gluster_aio_discard,
|
||||||
|
#endif
|
||||||
.create_options = qemu_gluster_create_options,
|
.create_options = qemu_gluster_create_options,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -618,6 +654,9 @@ static BlockDriver bdrv_gluster_tcp = {
|
|||||||
.bdrv_aio_writev = qemu_gluster_aio_writev,
|
.bdrv_aio_writev = qemu_gluster_aio_writev,
|
||||||
.bdrv_aio_flush = qemu_gluster_aio_flush,
|
.bdrv_aio_flush = qemu_gluster_aio_flush,
|
||||||
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
|
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
|
||||||
|
#ifdef CONFIG_GLUSTERFS_DISCARD
|
||||||
|
.bdrv_aio_discard = qemu_gluster_aio_discard,
|
||||||
|
#endif
|
||||||
.create_options = qemu_gluster_create_options,
|
.create_options = qemu_gluster_create_options,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -634,6 +673,9 @@ static BlockDriver bdrv_gluster_unix = {
|
|||||||
.bdrv_aio_writev = qemu_gluster_aio_writev,
|
.bdrv_aio_writev = qemu_gluster_aio_writev,
|
||||||
.bdrv_aio_flush = qemu_gluster_aio_flush,
|
.bdrv_aio_flush = qemu_gluster_aio_flush,
|
||||||
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
|
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
|
||||||
|
#ifdef CONFIG_GLUSTERFS_DISCARD
|
||||||
|
.bdrv_aio_discard = qemu_gluster_aio_discard,
|
||||||
|
#endif
|
||||||
.create_options = qemu_gluster_create_options,
|
.create_options = qemu_gluster_create_options,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -650,6 +692,9 @@ static BlockDriver bdrv_gluster_rdma = {
|
|||||||
.bdrv_aio_writev = qemu_gluster_aio_writev,
|
.bdrv_aio_writev = qemu_gluster_aio_writev,
|
||||||
.bdrv_aio_flush = qemu_gluster_aio_flush,
|
.bdrv_aio_flush = qemu_gluster_aio_flush,
|
||||||
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
|
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
|
||||||
|
#ifdef CONFIG_GLUSTERFS_DISCARD
|
||||||
|
.bdrv_aio_discard = qemu_gluster_aio_discard,
|
||||||
|
#endif
|
||||||
.create_options = qemu_gluster_create_options,
|
.create_options = qemu_gluster_create_options,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
8
configure
vendored
8
configure
vendored
@ -237,6 +237,7 @@ libiscsi=""
|
|||||||
coroutine=""
|
coroutine=""
|
||||||
seccomp=""
|
seccomp=""
|
||||||
glusterfs=""
|
glusterfs=""
|
||||||
|
glusterfs_discard="no"
|
||||||
virtio_blk_data_plane=""
|
virtio_blk_data_plane=""
|
||||||
gtk=""
|
gtk=""
|
||||||
gtkabi="2.0"
|
gtkabi="2.0"
|
||||||
@ -2577,6 +2578,9 @@ if test "$glusterfs" != "no" ; then
|
|||||||
CFLAGS="$CFLAGS $glusterfs_cflags"
|
CFLAGS="$CFLAGS $glusterfs_cflags"
|
||||||
libs_tools="$glusterfs_libs $libs_tools"
|
libs_tools="$glusterfs_libs $libs_tools"
|
||||||
libs_softmmu="$glusterfs_libs $libs_softmmu"
|
libs_softmmu="$glusterfs_libs $libs_softmmu"
|
||||||
|
if $pkg_config --atleast-version=5 glusterfs-api >/dev/null 2>&1; then
|
||||||
|
glusterfs_discard="yes"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
if test "$glusterfs" = "yes" ; then
|
if test "$glusterfs" = "yes" ; then
|
||||||
feature_not_found "GlusterFS backend support"
|
feature_not_found "GlusterFS backend support"
|
||||||
@ -3964,6 +3968,10 @@ if test "$glusterfs" = "yes" ; then
|
|||||||
echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
|
echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$glusterfs_discard" = "yes" ; then
|
||||||
|
echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$libssh2" = "yes" ; then
|
if test "$libssh2" = "yes" ; then
|
||||||
echo "CONFIG_LIBSSH2=y" >> $config_host_mak
|
echo "CONFIG_LIBSSH2=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user