qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 08/15] block/file-posix.c: extend to use io_uring


From: Stefan Hajnoczi
Subject: Re: [PATCH v3 08/15] block/file-posix.c: extend to use io_uring
Date: Tue, 14 Jan 2020 10:37:59 +0000

On Mon, Jan 13, 2020 at 12:49:27PM +0100, Stefano Garzarella wrote:
> On Wed, Dec 18, 2019 at 04:32:21PM +0000, Stefan Hajnoczi wrote:
> > @@ -503,9 +504,11 @@ static int raw_open_common(BlockDriverState *bs, QDict 
> > *options,
> >          goto fail;
> >      }
> >  
> > -    aio_default = (bdrv_flags & BDRV_O_NATIVE_AIO)
> > -                  ? BLOCKDEV_AIO_OPTIONS_NATIVE
> > -                  : BLOCKDEV_AIO_OPTIONS_THREADS;
> > +    if (bdrv_flags & BDRV_O_NATIVE_AIO) {
> > +        aio_default = BLOCKDEV_AIO_OPTIONS_NATIVE;
> > +    } else {
> > +        aio_default = BLOCKDEV_AIO_OPTIONS_THREADS;
> > +    }
> 
> This is only a cosmetic change?
...
> > @@ -578,7 +585,7 @@ static int raw_open_common(BlockDriverState *bs, QDict 
> > *options,
> >      s->shared_perm = BLK_PERM_ALL;
> >  
> >  #ifdef CONFIG_LINUX_AIO
> > -     /* Currently Linux does AIO only for files opened with O_DIRECT */
> > +    /* Currently Linux does AIO only for files opened with O_DIRECT */
> 
> Also this is a not related fix, if you respin maybe we should split in a
> new patch or say something in the commit message.

Thanks, I'll remove whitespace changes and unrelated reformatting from
this patch.

> > @@ -1877,21 +1900,25 @@ static int coroutine_fn raw_co_prw(BlockDriverState 
> > *bs, uint64_t offset,
> >          return -EIO;
> >  
> >      /*
> > -     * Check if the underlying device requires requests to be aligned,
> > -     * and if the request we are trying to submit is aligned or not.
> > -     * If this is the case tell the low-level driver that it needs
> > -     * to copy the buffer.
> > +     * When using O_DIRECT, the request must be aligned to be able to use
> > +     * either libaio or io_uring interface. If not fail back to regular 
> > thread
> > +     * pool read/write code which emulates this for us if we
> > +     * set QEMU_AIO_MISALIGNED.
> >       */
> > -    if (s->needs_alignment) {
> > -        if (!bdrv_qiov_is_aligned(bs, qiov)) {
> > -            type |= QEMU_AIO_MISALIGNED;
> > +    if (s->needs_alignment && !bdrv_qiov_is_aligned(bs, qiov)) {
> > +        type |= QEMU_AIO_MISALIGNED;
> > +#ifdef CONFIG_LINUX_IO_URING
> > +    } else if (s->use_linux_io_uring) {
> > +        LuringState *aio = 
> > aio_get_linux_io_uring(bdrv_get_aio_context(bs));
> > +        assert(qiov->size == bytes);
> > +        return luring_co_submit(bs, aio, s->fd, offset, qiov, type);
> > +#endif
> >  #ifdef CONFIG_LINUX_AIO
> > -        } else if (s->use_linux_aio) {
> > -            LinuxAioState *aio = 
> > aio_get_linux_aio(bdrv_get_aio_context(bs));
> > -            assert(qiov->size == bytes);
> > -            return laio_co_submit(bs, aio, s->fd, offset, qiov, type);
> > +    } else if (s->use_linux_aio) {
> 
> This code block was executed if "s->needs_alignment" was true, now we don't
> check it. Could this be a problem?

From raw_open_common():

  /* Currently Linux does AIO only for files opened with O_DIRECT */
  if (s->use_linux_aio) {
      if (!(s->open_flags & O_DIRECT)) {
          error_setg(errp, "aio=native was specified, but it requires "
                           "cache.direct=on, which was not specified.");
          ret = -EINVAL;
          goto fail;

There is no change in behavior since use_linux_aio is only true when
needs_alignment is set.

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]