qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] To support scsi Virtual Adapter while creating


From: Andreas Färber
Subject: Re: [Qemu-devel] [PATCH] To support scsi Virtual Adapter while creating VMDK images
Date: Fri, 27 Jan 2012 17:19:39 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:9.0) Gecko/20111220 Thunderbird/9.0

Am 27.01.2012 00:46, schrieb address@hidden:
> According to VMDK specification, while using virtual scsi adapter, the value 
> of adapterType has to be set to "lsilogic" or "buslogic". When the user adds 
> "scsi" to the list of qemu-img options (Example: qemu-img create -f vmdk foo 
> -o scsi,size=100M) this patch will set the value of adapterType to "lsilogic".
> 
> When the "scsi" is not passed, the default "ide" value is used.

> Signed-off-by: Praveen K Paladugu <address@hidden>

SoB should be above the patch so that it gets committed. Please cc the
block maintainer, scripts/get_maintainer.pl can help with that.

We're carrying a pretty similar patch from 2009 in OBS:

https://build.opensuse.org/package/view_file?file=qemu-img-vmdk-scsi.patch&package=virt-utils&project=Virtualization&rev=34c58db02d6bfdb1a9dd49fc3c7fa9d4

There were also patches by Soren Hansen and Kevin Wolf back in 2008, by
Pantelis Koukousoulas in 2009, by Aaron Mason and Alex Graf in 2010; are
these all independent or is someone's SoB missing here?

There were some issues raised about BLOCK_FLAG_SCSI that I don't see
addressed here.

Google found these other versions for reference (there may be more):

http://patchwork.ozlabs.org/patch/60730/
http://patchwork.ozlabs.org/patch/60080/
http://copilotco.com/mail-archives/qemu.2008/msg04541.html
http://lists.gnu.org/archive/html/qemu-devel/2009-07/msg02509.html
http://www.mail-archive.com/address@hidden/msg15054.html

Regards,
Andreas

> diff --git a/block.c b/block.c
> index 3f072f6..2a2e725 100644
> --- a/block.c
> +++ b/block.c
> @@ -3690,7 +3690,7 @@ int bdrv_img_create(const char *filename, const char 
> *fmt,
>                      char *options, uint64_t img_size, int flags)
>  {
>      QEMUOptionParameter *param = NULL, *create_options = NULL;
> -    QEMUOptionParameter *backing_fmt, *backing_file, *size;
> +    QEMUOptionParameter *backing_fmt, *backing_file, *size, *scsi;
>      BlockDriverState *bs = NULL;
>      BlockDriver *drv, *proto_drv;
>      BlockDriver *backing_drv = NULL;
> @@ -3797,6 +3797,12 @@ int bdrv_img_create(const char *filename, const char 
> *fmt,
>              goto out;
>          }
>      }
> +    scsi = get_option_parameter(param, BLOCK_OPT_SCSI);
> +    if (scsi && scsi->value.n && strcmp(drv->format_name, "vmdk")) {
> +        error_report("SCSI devices not supported for this file format");
> +        ret = -1;
> +        goto out;
> +   }
>  
>      printf("Formatting '%s', fmt=%s ", filename, fmt);
>      print_option_parameters(param);
> diff --git a/block/vmdk.c b/block/vmdk.c
> index 5623ac1..fc1ac65 100644
> --- a/block/vmdk.c
> +++ b/block/vmdk.c
> @@ -1377,7 +1377,7 @@ static int vmdk_create(const char *filename, 
> QEMUOptionParameter *options)
>          "ddb.geometry.cylinders = \"%" PRId64 "\"\n"
>          "ddb.geometry.heads = \"16\"\n"
>          "ddb.geometry.sectors = \"63\"\n"
> -        "ddb.adapterType = \"ide\"\n";
> +        "ddb.adapterType = \"%s\"\n";
>  
>      if (filename_decompose(filename, path, prefix, postfix, PATH_MAX)) {
>          return -EINVAL;
> @@ -1390,6 +1390,8 @@ static int vmdk_create(const char *filename, 
> QEMUOptionParameter *options)
>              backing_file = options->value.s;
>          } else if (!strcmp(options->name, BLOCK_OPT_COMPAT6)) {
>              flags |= options->value.n ? BLOCK_FLAG_COMPAT6 : 0;
> +        } else if (!strcmp(options->name, BLOCK_OPT_SCSI)) {
> +            flags |= options->value.n ? BLOCK_FLAG_SCSI : 0;
>          } else if (!strcmp(options->name, BLOCK_OPT_SUBFMT)) {
>              fmt = options->value.s;
>          }
> @@ -1482,7 +1484,8 @@ static int vmdk_create(const char *filename, 
> QEMUOptionParameter *options)
>              parent_desc_line,
>              ext_desc_lines,
>              (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4),
> -            total_size / (int64_t)(63 * 16 * 512));
> +            total_size / (int64_t)(63 * 16 * 512),
> +            (flags & BLOCK_FLAG_SCSI ? "lsilogic" : "ide"));
>      if (split || flat) {
>          fd = open(
>                  filename,
> @@ -1585,6 +1588,12 @@ static QEMUOptionParameter vmdk_create_options[] = {
>              "VMDK flat extent format, can be one of "
>              "{monolithicSparse (default) | monolithicFlat | 
> twoGbMaxExtentSparse | twoGbMaxExtentFlat | streamOptimized} "
>      },
> +    {
> +        .name = BLOCK_OPT_SCSI,
> +        .type = OPT_FLAG,
> +        .help = "Virtual SCSI Adapter"
> +    },
> +
>      { NULL }
>  };
>  
> diff --git a/block_int.h b/block_int.h
> index 311bd2a..5e332fb 100644
> --- a/block_int.h
> +++ b/block_int.h
> @@ -33,6 +33,7 @@
>  
>  #define BLOCK_FLAG_ENCRYPT   1
>  #define BLOCK_FLAG_COMPAT6   4
> +#define BLOCK_FLAG_SCSI         8
>  
>  #define BLOCK_IO_LIMIT_READ     0
>  #define BLOCK_IO_LIMIT_WRITE    1
> @@ -44,6 +45,7 @@
>  #define BLOCK_OPT_SIZE          "size"
>  #define BLOCK_OPT_ENCRYPT       "encryption"
>  #define BLOCK_OPT_COMPAT6       "compat6"
> +#define BLOCK_OPT_SCSI          "scsi"
>  #define BLOCK_OPT_BACKING_FILE  "backing_file"
>  #define BLOCK_OPT_BACKING_FMT   "backing_fmt"
>  #define BLOCK_OPT_CLUSTER_SIZE  "cluster_size"

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg



reply via email to

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