block/rbd: bump librbd requirement to luminous release
Ceph Luminous (version 12.2.z) is almost 4 years old at this point. Bump the requirement to get rid of the ifdef'ry in the code. Qemu 6.1 dropped the support for RHEL-7 which was the last supported OS that required an older librbd. Signed-off-by: Peter Lieven <pl@kamp.de> Reviewed-by: Ilya Dryomov <idryomov@gmail.com> Message-Id: <20210702172356.11574-2-idryomov@gmail.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
42e4ac9ef5
commit
48672ac058
120
block/rbd.c
120
block/rbd.c
|
@ -55,24 +55,10 @@
|
||||||
* leading "\".
|
* leading "\".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* rbd_aio_discard added in 0.1.2 */
|
|
||||||
#if LIBRBD_VERSION_CODE >= LIBRBD_VERSION(0, 1, 2)
|
|
||||||
#define LIBRBD_SUPPORTS_DISCARD
|
|
||||||
#else
|
|
||||||
#undef LIBRBD_SUPPORTS_DISCARD
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define OBJ_MAX_SIZE (1UL << OBJ_DEFAULT_OBJ_ORDER)
|
#define OBJ_MAX_SIZE (1UL << OBJ_DEFAULT_OBJ_ORDER)
|
||||||
|
|
||||||
#define RBD_MAX_SNAPS 100
|
#define RBD_MAX_SNAPS 100
|
||||||
|
|
||||||
/* The LIBRBD_SUPPORTS_IOVEC is defined in librbd.h */
|
|
||||||
#ifdef LIBRBD_SUPPORTS_IOVEC
|
|
||||||
#define LIBRBD_USE_IOVEC 1
|
|
||||||
#else
|
|
||||||
#define LIBRBD_USE_IOVEC 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define RBD_ENCRYPTION_LUKS_HEADER_VERIFICATION_LEN 8
|
#define RBD_ENCRYPTION_LUKS_HEADER_VERIFICATION_LEN 8
|
||||||
|
|
||||||
static const char rbd_luks_header_verification[
|
static const char rbd_luks_header_verification[
|
||||||
|
@ -96,7 +82,6 @@ typedef struct RBDAIOCB {
|
||||||
BlockAIOCB common;
|
BlockAIOCB common;
|
||||||
int64_t ret;
|
int64_t ret;
|
||||||
QEMUIOVector *qiov;
|
QEMUIOVector *qiov;
|
||||||
char *bounce;
|
|
||||||
RBDAIOCmd cmd;
|
RBDAIOCmd cmd;
|
||||||
int error;
|
int error;
|
||||||
struct BDRVRBDState *s;
|
struct BDRVRBDState *s;
|
||||||
|
@ -106,7 +91,6 @@ typedef struct RADOSCB {
|
||||||
RBDAIOCB *acb;
|
RBDAIOCB *acb;
|
||||||
struct BDRVRBDState *s;
|
struct BDRVRBDState *s;
|
||||||
int64_t size;
|
int64_t size;
|
||||||
char *buf;
|
|
||||||
int64_t ret;
|
int64_t ret;
|
||||||
} RADOSCB;
|
} RADOSCB;
|
||||||
|
|
||||||
|
@ -354,13 +338,9 @@ static int qemu_rbd_set_keypairs(rados_t cluster, const char *keypairs_json,
|
||||||
|
|
||||||
static void qemu_rbd_memset(RADOSCB *rcb, int64_t offs)
|
static void qemu_rbd_memset(RADOSCB *rcb, int64_t offs)
|
||||||
{
|
{
|
||||||
if (LIBRBD_USE_IOVEC) {
|
RBDAIOCB *acb = rcb->acb;
|
||||||
RBDAIOCB *acb = rcb->acb;
|
iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0,
|
||||||
iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0,
|
acb->qiov->size - offs);
|
||||||
acb->qiov->size - offs);
|
|
||||||
} else {
|
|
||||||
memset(rcb->buf + offs, 0, rcb->size - offs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LIBRBD_SUPPORTS_ENCRYPTION
|
#ifdef LIBRBD_SUPPORTS_ENCRYPTION
|
||||||
|
@ -787,13 +767,6 @@ static void qemu_rbd_complete_aio(RADOSCB *rcb)
|
||||||
|
|
||||||
g_free(rcb);
|
g_free(rcb);
|
||||||
|
|
||||||
if (!LIBRBD_USE_IOVEC) {
|
|
||||||
if (acb->cmd == RBD_AIO_READ) {
|
|
||||||
qemu_iovec_from_buf(acb->qiov, 0, acb->bounce, acb->qiov->size);
|
|
||||||
}
|
|
||||||
qemu_vfree(acb->bounce);
|
|
||||||
}
|
|
||||||
|
|
||||||
acb->common.cb(acb->common.opaque, (acb->ret > 0 ? 0 : acb->ret));
|
acb->common.cb(acb->common.opaque, (acb->ret > 0 ? 0 : acb->ret));
|
||||||
|
|
||||||
qemu_aio_unref(acb);
|
qemu_aio_unref(acb);
|
||||||
|
@ -1174,28 +1147,6 @@ static void rbd_finish_aiocb(rbd_completion_t c, RADOSCB *rcb)
|
||||||
rbd_finish_bh, rcb);
|
rbd_finish_bh, rcb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rbd_aio_discard_wrapper(rbd_image_t image,
|
|
||||||
uint64_t off,
|
|
||||||
uint64_t len,
|
|
||||||
rbd_completion_t comp)
|
|
||||||
{
|
|
||||||
#ifdef LIBRBD_SUPPORTS_DISCARD
|
|
||||||
return rbd_aio_discard(image, off, len, comp);
|
|
||||||
#else
|
|
||||||
return -ENOTSUP;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rbd_aio_flush_wrapper(rbd_image_t image,
|
|
||||||
rbd_completion_t comp)
|
|
||||||
{
|
|
||||||
#ifdef LIBRBD_SUPPORTS_AIO_FLUSH
|
|
||||||
return rbd_aio_flush(image, comp);
|
|
||||||
#else
|
|
||||||
return -ENOTSUP;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static BlockAIOCB *rbd_start_aio(BlockDriverState *bs,
|
static BlockAIOCB *rbd_start_aio(BlockDriverState *bs,
|
||||||
int64_t off,
|
int64_t off,
|
||||||
QEMUIOVector *qiov,
|
QEMUIOVector *qiov,
|
||||||
|
@ -1218,21 +1169,6 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs,
|
||||||
|
|
||||||
rcb = g_new(RADOSCB, 1);
|
rcb = g_new(RADOSCB, 1);
|
||||||
|
|
||||||
if (!LIBRBD_USE_IOVEC) {
|
|
||||||
if (cmd == RBD_AIO_DISCARD || cmd == RBD_AIO_FLUSH) {
|
|
||||||
acb->bounce = NULL;
|
|
||||||
} else {
|
|
||||||
acb->bounce = qemu_try_blockalign(bs, qiov->size);
|
|
||||||
if (acb->bounce == NULL) {
|
|
||||||
goto failed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (cmd == RBD_AIO_WRITE) {
|
|
||||||
qemu_iovec_to_buf(acb->qiov, 0, acb->bounce, qiov->size);
|
|
||||||
}
|
|
||||||
rcb->buf = acb->bounce;
|
|
||||||
}
|
|
||||||
|
|
||||||
acb->ret = 0;
|
acb->ret = 0;
|
||||||
acb->error = 0;
|
acb->error = 0;
|
||||||
acb->s = s;
|
acb->s = s;
|
||||||
|
@ -1246,7 +1182,7 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs,
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case RBD_AIO_WRITE: {
|
case RBD_AIO_WRITE:
|
||||||
/*
|
/*
|
||||||
* RBD APIs don't allow us to write more than actual size, so in order
|
* RBD APIs don't allow us to write more than actual size, so in order
|
||||||
* to support growing images, we resize the image before write
|
* to support growing images, we resize the image before write
|
||||||
|
@ -1258,25 +1194,16 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs,
|
||||||
goto failed_completion;
|
goto failed_completion;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef LIBRBD_SUPPORTS_IOVEC
|
r = rbd_aio_writev(s->image, qiov->iov, qiov->niov, off, c);
|
||||||
r = rbd_aio_writev(s->image, qiov->iov, qiov->niov, off, c);
|
|
||||||
#else
|
|
||||||
r = rbd_aio_write(s->image, off, size, rcb->buf, c);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case RBD_AIO_READ:
|
case RBD_AIO_READ:
|
||||||
#ifdef LIBRBD_SUPPORTS_IOVEC
|
r = rbd_aio_readv(s->image, qiov->iov, qiov->niov, off, c);
|
||||||
r = rbd_aio_readv(s->image, qiov->iov, qiov->niov, off, c);
|
|
||||||
#else
|
|
||||||
r = rbd_aio_read(s->image, off, size, rcb->buf, c);
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case RBD_AIO_DISCARD:
|
case RBD_AIO_DISCARD:
|
||||||
r = rbd_aio_discard_wrapper(s->image, off, size, c);
|
r = rbd_aio_discard(s->image, off, size, c);
|
||||||
break;
|
break;
|
||||||
case RBD_AIO_FLUSH:
|
case RBD_AIO_FLUSH:
|
||||||
r = rbd_aio_flush_wrapper(s->image, c);
|
r = rbd_aio_flush(s->image, c);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
r = -EINVAL;
|
r = -EINVAL;
|
||||||
|
@ -1291,9 +1218,6 @@ failed_completion:
|
||||||
rbd_aio_release(c);
|
rbd_aio_release(c);
|
||||||
failed:
|
failed:
|
||||||
g_free(rcb);
|
g_free(rcb);
|
||||||
if (!LIBRBD_USE_IOVEC) {
|
|
||||||
qemu_vfree(acb->bounce);
|
|
||||||
}
|
|
||||||
|
|
||||||
qemu_aio_unref(acb);
|
qemu_aio_unref(acb);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1319,7 +1243,6 @@ static BlockAIOCB *qemu_rbd_aio_pwritev(BlockDriverState *bs,
|
||||||
RBD_AIO_WRITE);
|
RBD_AIO_WRITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LIBRBD_SUPPORTS_AIO_FLUSH
|
|
||||||
static BlockAIOCB *qemu_rbd_aio_flush(BlockDriverState *bs,
|
static BlockAIOCB *qemu_rbd_aio_flush(BlockDriverState *bs,
|
||||||
BlockCompletionFunc *cb,
|
BlockCompletionFunc *cb,
|
||||||
void *opaque)
|
void *opaque)
|
||||||
|
@ -1327,20 +1250,6 @@ static BlockAIOCB *qemu_rbd_aio_flush(BlockDriverState *bs,
|
||||||
return rbd_start_aio(bs, 0, NULL, 0, cb, opaque, RBD_AIO_FLUSH);
|
return rbd_start_aio(bs, 0, NULL, 0, cb, opaque, RBD_AIO_FLUSH);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static int qemu_rbd_co_flush(BlockDriverState *bs)
|
|
||||||
{
|
|
||||||
#if LIBRBD_VERSION_CODE >= LIBRBD_VERSION(0, 1, 1)
|
|
||||||
/* rbd_flush added in 0.1.1 */
|
|
||||||
BDRVRBDState *s = bs->opaque;
|
|
||||||
return rbd_flush(s->image);
|
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int qemu_rbd_getinfo(BlockDriverState *bs, BlockDriverInfo *bdi)
|
static int qemu_rbd_getinfo(BlockDriverState *bs, BlockDriverInfo *bdi)
|
||||||
{
|
{
|
||||||
BDRVRBDState *s = bs->opaque;
|
BDRVRBDState *s = bs->opaque;
|
||||||
|
@ -1546,7 +1455,6 @@ static int qemu_rbd_snap_list(BlockDriverState *bs,
|
||||||
return snap_count;
|
return snap_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LIBRBD_SUPPORTS_DISCARD
|
|
||||||
static BlockAIOCB *qemu_rbd_aio_pdiscard(BlockDriverState *bs,
|
static BlockAIOCB *qemu_rbd_aio_pdiscard(BlockDriverState *bs,
|
||||||
int64_t offset,
|
int64_t offset,
|
||||||
int bytes,
|
int bytes,
|
||||||
|
@ -1556,9 +1464,7 @@ static BlockAIOCB *qemu_rbd_aio_pdiscard(BlockDriverState *bs,
|
||||||
return rbd_start_aio(bs, offset, NULL, bytes, cb, opaque,
|
return rbd_start_aio(bs, offset, NULL, bytes, cb, opaque,
|
||||||
RBD_AIO_DISCARD);
|
RBD_AIO_DISCARD);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef LIBRBD_SUPPORTS_INVALIDATE
|
|
||||||
static void coroutine_fn qemu_rbd_co_invalidate_cache(BlockDriverState *bs,
|
static void coroutine_fn qemu_rbd_co_invalidate_cache(BlockDriverState *bs,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
@ -1568,7 +1474,6 @@ static void coroutine_fn qemu_rbd_co_invalidate_cache(BlockDriverState *bs,
|
||||||
error_setg_errno(errp, -r, "Failed to invalidate the cache");
|
error_setg_errno(errp, -r, "Failed to invalidate the cache");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static QemuOptsList qemu_rbd_create_opts = {
|
static QemuOptsList qemu_rbd_create_opts = {
|
||||||
.name = "rbd-create-opts",
|
.name = "rbd-create-opts",
|
||||||
|
@ -1643,23 +1548,14 @@ static BlockDriver bdrv_rbd = {
|
||||||
.bdrv_aio_preadv = qemu_rbd_aio_preadv,
|
.bdrv_aio_preadv = qemu_rbd_aio_preadv,
|
||||||
.bdrv_aio_pwritev = qemu_rbd_aio_pwritev,
|
.bdrv_aio_pwritev = qemu_rbd_aio_pwritev,
|
||||||
|
|
||||||
#ifdef LIBRBD_SUPPORTS_AIO_FLUSH
|
|
||||||
.bdrv_aio_flush = qemu_rbd_aio_flush,
|
.bdrv_aio_flush = qemu_rbd_aio_flush,
|
||||||
#else
|
|
||||||
.bdrv_co_flush_to_disk = qemu_rbd_co_flush,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef LIBRBD_SUPPORTS_DISCARD
|
|
||||||
.bdrv_aio_pdiscard = qemu_rbd_aio_pdiscard,
|
.bdrv_aio_pdiscard = qemu_rbd_aio_pdiscard,
|
||||||
#endif
|
|
||||||
|
|
||||||
.bdrv_snapshot_create = qemu_rbd_snap_create,
|
.bdrv_snapshot_create = qemu_rbd_snap_create,
|
||||||
.bdrv_snapshot_delete = qemu_rbd_snap_remove,
|
.bdrv_snapshot_delete = qemu_rbd_snap_remove,
|
||||||
.bdrv_snapshot_list = qemu_rbd_snap_list,
|
.bdrv_snapshot_list = qemu_rbd_snap_list,
|
||||||
.bdrv_snapshot_goto = qemu_rbd_snap_rollback,
|
.bdrv_snapshot_goto = qemu_rbd_snap_rollback,
|
||||||
#ifdef LIBRBD_SUPPORTS_INVALIDATE
|
|
||||||
.bdrv_co_invalidate_cache = qemu_rbd_co_invalidate_cache,
|
.bdrv_co_invalidate_cache = qemu_rbd_co_invalidate_cache,
|
||||||
#endif
|
|
||||||
|
|
||||||
.strong_runtime_opts = qemu_rbd_strong_runtime_opts,
|
.strong_runtime_opts = qemu_rbd_strong_runtime_opts,
|
||||||
};
|
};
|
||||||
|
|
|
@ -710,13 +710,16 @@ if not get_option('rbd').auto() or have_block
|
||||||
int main(void) {
|
int main(void) {
|
||||||
rados_t cluster;
|
rados_t cluster;
|
||||||
rados_create(&cluster, NULL);
|
rados_create(&cluster, NULL);
|
||||||
|
#if LIBRBD_VERSION_CODE < LIBRBD_VERSION(1, 12, 0)
|
||||||
|
#error
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}''', dependencies: [librbd, librados])
|
}''', dependencies: [librbd, librados])
|
||||||
rbd = declare_dependency(dependencies: [librbd, librados])
|
rbd = declare_dependency(dependencies: [librbd, librados])
|
||||||
elif get_option('rbd').enabled()
|
elif get_option('rbd').enabled()
|
||||||
error('could not link librados')
|
error('librbd >= 1.12.0 required')
|
||||||
else
|
else
|
||||||
warning('could not link librados, disabling')
|
warning('librbd >= 1.12.0 not found, disabling')
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in New Issue