All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: george.dunlap@eu.citrix.com, xen-devel@lists.xensource.com,
	Ian Jackson <Ian.Jackson@eu.citrix.com>
Subject: Re: [Qemu-devel] [PATCH v2] xen_disk: support "direct-io-safe" backend option
Date: Fri, 28 Jun 2013 17:16:07 +0100	[thread overview]
Message-ID: <alpine.DEB.2.02.1306281715300.4782@kaball.uk.xensource.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1306271911210.4782@kaball.uk.xensource.com>

On Thu, 27 Jun 2013, Stefano Stabellini wrote:
> Support backend option "direct-io-safe".  This is documented as
> follows in the Xen backend specification:
> 
>  * direct-io-safe
>  *      Values:         0/1 (boolean)
>  *      Default Value:  0
>  *
>  *      The underlying storage is not affected by the direct IO memory
>  *      lifetime bug.  See:
>  *        http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html
>  *
>  *      Therefore this option gives the backend permission to use
>  *      O_DIRECT, notwithstanding that bug.
>  *
>  *      That is, if this option is enabled, use of O_DIRECT is safe,
>  *      in circumstances where we would normally have avoided it as a
>  *      workaround for that bug.  This option is not relevant for all
>  *      backends, and even not necessarily supported for those for
>  *      which it is relevant.  A backend which knows that it is not
>  *      affected by the bug can ignore this option.
>  *
>  *      This option doesn't require a backend to use O_DIRECT, so it
>  *      should not be used to try to control the caching behaviour.
> 
> Also, BDRV_O_NATIVE_AIO is ignored if BDRV_O_NOCACHE, so clarify the
> default flags passed to the qemu block layer.
> 
> The original proposal for a "cache" backend option has been dropped
> because it was believed too wide, especially considering that at the
> moment the backend doesn't have a way to tell the toolstack that it is
> capable of supporting it.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>

George, should I go ahead and commit to the qemu-xen tree?


> diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
> index 247f32f..727f433 100644
> --- a/hw/block/xen_disk.c
> +++ b/hw/block/xen_disk.c
> @@ -93,6 +93,7 @@ struct XenBlkDev {
>      char                *type;
>      char                *dev;
>      char                *devtype;
> +    bool                directiosafe;
>      const char          *fileproto;
>      const char          *filename;
>      int                 ring_ref;
> @@ -701,6 +702,7 @@ static int blk_init(struct XenDevice *xendev)
>  {
>      struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev);
>      int info = 0;
> +    char *directiosafe = NULL;
>  
>      /* read xenstore entries */
>      if (blkdev->params == NULL) {
> @@ -733,6 +735,8 @@ static int blk_init(struct XenDevice *xendev)
>      if (blkdev->devtype == NULL) {
>          blkdev->devtype = xenstore_read_be_str(&blkdev->xendev, "device-type");
>      }
> +    directiosafe = xenstore_read_be_str(&blkdev->xendev, "direct-io-safe");
> +    blkdev->directiosafe = (directiosafe && atoi(directiosafe));
>  
>      /* do we have all we need? */
>      if (blkdev->params == NULL ||
> @@ -760,6 +764,8 @@ static int blk_init(struct XenDevice *xendev)
>      xenstore_write_be_int(&blkdev->xendev, "feature-flush-cache", 1);
>      xenstore_write_be_int(&blkdev->xendev, "feature-persistent", 1);
>      xenstore_write_be_int(&blkdev->xendev, "info", info);
> +
> +    g_free(directiosafe);
>      return 0;
>  
>  out_error:
> @@ -773,6 +779,8 @@ out_error:
>      blkdev->dev = NULL;
>      g_free(blkdev->devtype);
>      blkdev->devtype = NULL;
> +    g_free(directiosafe);
> +    blkdev->directiosafe = false;
>      return -1;
>  }
>  
> @@ -783,7 +791,11 @@ static int blk_connect(struct XenDevice *xendev)
>      bool readonly = true;
>  
>      /* read-only ? */
> -    qflags = BDRV_O_CACHE_WB | BDRV_O_NATIVE_AIO;
> +    if (blkdev->directiosafe) {
> +        qflags = BDRV_O_NOCACHE | BDRV_O_NATIVE_AIO;
> +    } else {
> +        qflags = BDRV_O_CACHE_WB;
> +    }
>      if (strcmp(blkdev->mode, "w") == 0) {
>          qflags |= BDRV_O_RDWR;
>          readonly = false;
> 

  parent reply	other threads:[~2013-06-28 16:16 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-27 18:16 [Qemu-devel] [PATCH v2] xen_disk: support "direct-io-safe" backend option Stefano Stabellini
2013-06-27 18:16 ` Stefano Stabellini
2013-06-28  7:56 ` [Qemu-devel] " Paolo Bonzini
2013-06-28  7:56   ` Paolo Bonzini
2013-06-28 10:54   ` [Qemu-devel] " Ian Jackson
2013-06-28 10:54     ` Ian Jackson
2013-06-28 10:57   ` [Qemu-devel] " Stefano Stabellini
2013-06-28 10:57     ` Stefano Stabellini
2013-06-28  8:48 ` [Qemu-devel] " Alex Bligh
2013-06-28  8:48   ` Alex Bligh
2013-06-28 10:44   ` [Qemu-devel] " Ian Jackson
2013-06-28 10:44     ` Ian Jackson
2013-06-28 16:17     ` [Qemu-devel] " Alex Bligh
2013-06-28 16:17       ` Alex Bligh
2013-06-28 16:26       ` [Qemu-devel] " Paolo Bonzini
2013-06-28 16:26         ` Paolo Bonzini
2013-06-28 10:56   ` [Qemu-devel] " Stefano Stabellini
2013-06-28 10:56     ` Stefano Stabellini
2013-06-28 16:16 ` Stefano Stabellini [this message]
2013-06-28 16:51   ` [Qemu-devel] " George Dunlap

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.02.1306281715300.4782@kaball.uk.xensource.com \
    --to=stefano.stabellini@eu.citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=george.dunlap@eu.citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.