Re: [PATCH V3 1/6] block/rbd: bump librbd requirement to luminous release

2021-06-18 Thread Ilya Dryomov
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

2021-06-18 Thread Peter Lieven
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

2021-06-16 Thread 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, 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

2021-05-19 Thread Peter Lieven
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 =