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

Re: [Xen-devel] [PATCH v2] introduce a cache options for PV disks



On Thu, 27 Jun 2013, Ian Jackson wrote:
> Here's the result.  I took Anthony Ligouri's ack off it.
> 
> Ian.
> 
> commit 21538601f7d4f2de4d518b92ec9212c99be829e8
> Author: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> Date:   Thu Jun 27 14:20:51 2013 +0000
> 
>     xen_disk: support "direct-io-safe" backend option
>     
>     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.
>     
>     Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>

I'll send to qemu-devel and add your signed-off-by if you are OK with
that


> diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
> index 247f32f..091284b 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(directiofsafe));
>  
>      /* 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;
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.