Re: [PATCH V3 1/6] block/rbd: bump librbd requirement to luminous release
On Fri, Jun 18, 2021 at 10:58 AM Peter Lieven wrote: > > Am 16.06.21 um 14:26 schrieb Ilya Dryomov: > > On Wed, May 19, 2021 at 4:26 PM Peter Lieven wrote: > >> even luminous (version 12.2) is unmaintained for over 3 years now. > >> 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 > >> --- > >> block/rbd.c | 120 > >> meson.build | 7 ++- > >> 2 files changed, 13 insertions(+), 114 deletions(-) > >> > >> diff --git a/block/rbd.c b/block/rbd.c > >> index 26f64cce7c..6b1cbe1d75 100644 > >> --- a/block/rbd.c > >> +++ b/block/rbd.c > >> @@ -55,24 +55,10 @@ > >> * 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 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 > >> - > >> typedef enum { > >> RBD_AIO_READ, > >> RBD_AIO_WRITE, > >> @@ -84,7 +70,6 @@ typedef struct RBDAIOCB { > >> BlockAIOCB common; > >> int64_t ret; > >> QEMUIOVector *qiov; > >> -char *bounce; > >> RBDAIOCmd cmd; > >> int error; > >> struct BDRVRBDState *s; > >> @@ -94,7 +79,6 @@ typedef struct RADOSCB { > >> RBDAIOCB *acb; > >> struct BDRVRBDState *s; > >> int64_t size; > >> -char *buf; > >> int64_t ret; > >> } RADOSCB; > >> > >> @@ -342,13 +326,9 @@ static int qemu_rbd_set_keypairs(rados_t cluster, > >> const char *keypairs_json, > >> > >> static void qemu_rbd_memset(RADOSCB *rcb, int64_t offs) > >> { > >> -if (LIBRBD_USE_IOVEC) { > >> -RBDAIOCB *acb = rcb->acb; > >> -iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0, > >> - acb->qiov->size - offs); > >> -} else { > >> -memset(rcb->buf + offs, 0, rcb->size - offs); > >> -} > >> +RBDAIOCB *acb = rcb->acb; > >> +iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0, > >> + acb->qiov->size - offs); > >> } > >> > >> /* FIXME Deprecate and remove keypairs or make it available in QMP. */ > >> @@ -504,13 +484,6 @@ static void qemu_rbd_complete_aio(RADOSCB *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)); > >> > >> qemu_aio_unref(acb); > >> @@ -878,28 +851,6 @@ static void rbd_finish_aiocb(rbd_completion_t c, > >> RADOSCB *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, > >> int64_t off, > >> QEMUIOVector *qiov, > >> @@ -922,21 +873,6 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, > >> > >> 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->error = 0; > >> acb->s = s; > >> @@ -950,7 +886,7 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, > >> } > >> > >> switch (cmd) { > >> -case RBD_AIO_WRITE: { > >> +case RBD_AIO_WRITE: > >> /* > >> * RBD APIs don't allow us to
Re: [PATCH V3 1/6] block/rbd: bump librbd requirement to luminous release
Am 16.06.21 um 14:26 schrieb Ilya Dryomov: > On Wed, May 19, 2021 at 4:26 PM Peter Lieven wrote: >> even luminous (version 12.2) is unmaintained for over 3 years now. >> 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 >> --- >> block/rbd.c | 120 >> meson.build | 7 ++- >> 2 files changed, 13 insertions(+), 114 deletions(-) >> >> diff --git a/block/rbd.c b/block/rbd.c >> index 26f64cce7c..6b1cbe1d75 100644 >> --- a/block/rbd.c >> +++ b/block/rbd.c >> @@ -55,24 +55,10 @@ >> * 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 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 >> - >> typedef enum { >> RBD_AIO_READ, >> RBD_AIO_WRITE, >> @@ -84,7 +70,6 @@ typedef struct RBDAIOCB { >> BlockAIOCB common; >> int64_t ret; >> QEMUIOVector *qiov; >> -char *bounce; >> RBDAIOCmd cmd; >> int error; >> struct BDRVRBDState *s; >> @@ -94,7 +79,6 @@ typedef struct RADOSCB { >> RBDAIOCB *acb; >> struct BDRVRBDState *s; >> int64_t size; >> -char *buf; >> int64_t ret; >> } RADOSCB; >> >> @@ -342,13 +326,9 @@ static int qemu_rbd_set_keypairs(rados_t cluster, const >> char *keypairs_json, >> >> static void qemu_rbd_memset(RADOSCB *rcb, int64_t offs) >> { >> -if (LIBRBD_USE_IOVEC) { >> -RBDAIOCB *acb = rcb->acb; >> -iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0, >> - acb->qiov->size - offs); >> -} else { >> -memset(rcb->buf + offs, 0, rcb->size - offs); >> -} >> +RBDAIOCB *acb = rcb->acb; >> +iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0, >> + acb->qiov->size - offs); >> } >> >> /* FIXME Deprecate and remove keypairs or make it available in QMP. */ >> @@ -504,13 +484,6 @@ static void qemu_rbd_complete_aio(RADOSCB *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)); >> >> qemu_aio_unref(acb); >> @@ -878,28 +851,6 @@ static void rbd_finish_aiocb(rbd_completion_t c, >> RADOSCB *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, >> int64_t off, >> QEMUIOVector *qiov, >> @@ -922,21 +873,6 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, >> >> 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->error = 0; >> acb->s = s; >> @@ -950,7 +886,7 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, >> } >> >> 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 >> * to support growing images, we resize the image before write >> @@ -962,25 +898,16 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, >> goto failed_completion; >> } >> } >> -#ifdef LIBRBD_SUPPORTS_IOVEC >> -r = rbd_aio_writev(s->image, qiov->iov,
Re: [PATCH V3 1/6] block/rbd: bump librbd requirement to luminous release
On Wed, May 19, 2021 at 4:26 PM Peter Lieven wrote: > > even luminous (version 12.2) is unmaintained for over 3 years now. > 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 > --- > block/rbd.c | 120 > meson.build | 7 ++- > 2 files changed, 13 insertions(+), 114 deletions(-) > > diff --git a/block/rbd.c b/block/rbd.c > index 26f64cce7c..6b1cbe1d75 100644 > --- a/block/rbd.c > +++ b/block/rbd.c > @@ -55,24 +55,10 @@ > * 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 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 > - > typedef enum { > RBD_AIO_READ, > RBD_AIO_WRITE, > @@ -84,7 +70,6 @@ typedef struct RBDAIOCB { > BlockAIOCB common; > int64_t ret; > QEMUIOVector *qiov; > -char *bounce; > RBDAIOCmd cmd; > int error; > struct BDRVRBDState *s; > @@ -94,7 +79,6 @@ typedef struct RADOSCB { > RBDAIOCB *acb; > struct BDRVRBDState *s; > int64_t size; > -char *buf; > int64_t ret; > } RADOSCB; > > @@ -342,13 +326,9 @@ static int qemu_rbd_set_keypairs(rados_t cluster, const > char *keypairs_json, > > static void qemu_rbd_memset(RADOSCB *rcb, int64_t offs) > { > -if (LIBRBD_USE_IOVEC) { > -RBDAIOCB *acb = rcb->acb; > -iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0, > - acb->qiov->size - offs); > -} else { > -memset(rcb->buf + offs, 0, rcb->size - offs); > -} > +RBDAIOCB *acb = rcb->acb; > +iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0, > + acb->qiov->size - offs); > } > > /* FIXME Deprecate and remove keypairs or make it available in QMP. */ > @@ -504,13 +484,6 @@ static void qemu_rbd_complete_aio(RADOSCB *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)); > > qemu_aio_unref(acb); > @@ -878,28 +851,6 @@ static void rbd_finish_aiocb(rbd_completion_t c, RADOSCB > *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, > int64_t off, > QEMUIOVector *qiov, > @@ -922,21 +873,6 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, > > 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->error = 0; > acb->s = s; > @@ -950,7 +886,7 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, > } > > 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 > * to support growing images, we resize the image before write > @@ -962,25 +898,16 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, > goto failed_completion; > } > } > -#ifdef LIBRBD_SUPPORTS_IOVEC > -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 > +r = rbd_aio_writev(s->image, qiov->iov, qiov->niov, off, c); > break; >
[PATCH V3 1/6] block/rbd: bump librbd requirement to luminous release
even luminous (version 12.2) is unmaintained for over 3 years now. 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 --- block/rbd.c | 120 meson.build | 7 ++- 2 files changed, 13 insertions(+), 114 deletions(-) diff --git a/block/rbd.c b/block/rbd.c index 26f64cce7c..6b1cbe1d75 100644 --- a/block/rbd.c +++ b/block/rbd.c @@ -55,24 +55,10 @@ * 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 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 - typedef enum { RBD_AIO_READ, RBD_AIO_WRITE, @@ -84,7 +70,6 @@ typedef struct RBDAIOCB { BlockAIOCB common; int64_t ret; QEMUIOVector *qiov; -char *bounce; RBDAIOCmd cmd; int error; struct BDRVRBDState *s; @@ -94,7 +79,6 @@ typedef struct RADOSCB { RBDAIOCB *acb; struct BDRVRBDState *s; int64_t size; -char *buf; int64_t ret; } RADOSCB; @@ -342,13 +326,9 @@ static int qemu_rbd_set_keypairs(rados_t cluster, const char *keypairs_json, static void qemu_rbd_memset(RADOSCB *rcb, int64_t offs) { -if (LIBRBD_USE_IOVEC) { -RBDAIOCB *acb = rcb->acb; -iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0, - acb->qiov->size - offs); -} else { -memset(rcb->buf + offs, 0, rcb->size - offs); -} +RBDAIOCB *acb = rcb->acb; +iov_memset(acb->qiov->iov, acb->qiov->niov, offs, 0, + acb->qiov->size - offs); } /* FIXME Deprecate and remove keypairs or make it available in QMP. */ @@ -504,13 +484,6 @@ static void qemu_rbd_complete_aio(RADOSCB *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)); qemu_aio_unref(acb); @@ -878,28 +851,6 @@ static void rbd_finish_aiocb(rbd_completion_t c, RADOSCB *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, int64_t off, QEMUIOVector *qiov, @@ -922,21 +873,6 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, 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->error = 0; acb->s = s; @@ -950,7 +886,7 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, } 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 * to support growing images, we resize the image before write @@ -962,25 +898,16 @@ static BlockAIOCB *rbd_start_aio(BlockDriverState *bs, goto failed_completion; } } -#ifdef LIBRBD_SUPPORTS_IOVEC -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 +r = rbd_aio_writev(s->image, qiov->iov, qiov->niov, off, c); break; -} case RBD_AIO_READ: -#ifdef LIBRBD_SUPPORTS_IOVEC -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 +r = rbd_aio_readv(s->image, qiov->iov, qiov->niov, off, c); break; case RBD_AIO_DISCARD: -r =