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

Re: [Xen-devel] [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks



On 08/07/2012 05:36 AM, Ian Campbell wrote:
> On Mon, 2012-08-06 at 22:51 +0100, Daniel De Graaf wrote:
>> Allow specification of backend domains for disks, either in the config
>> file or via xl block-attach.
>>
>> A version of this patch was submitted in October 2011 but was not
>> suitable at the time because libxl did not support the "script=" option
>> for disks in libxl. Now that this option exists, it is possible to
>> specify a backend domain without needing to duplicate the device tree of
>> domain providing the disk in the domain using libxl; just specify
>> script=/bin/true (or any more useful script) to prevent the block script
>> from running in the domain using libxl.
> 
> You can also set run_hotplug_scripts=0 in /etc/xen/xl.conf which causes
> the scripts to be run from udev again -- which means they should run in
> the appropriate domain automatically. (although I confess I don't
> understand the reliance on script= here, so perhaps I've got the totally
> wrong end of the stick)

No, I just missed that setting that option would also do this.

> Given that this patch was originally posted so long ago, that the
> script= stuff just went in, that driver domains were on the TODO at one
> point (I think) and the relative simplicity of this patch I'm leaning
> towards taking this in 4.2.
> 
>> In order to support named backend domains like network-attach, the
>> prototype of xlu_disk_parse in libxlutil.h needs a libxl_ctx. Without
>> this parameter, it would only be only possible to support numeric domain
>> IDs in the block device specification.
> 
> I'm not sure if using libxl in libxlu is a layering violation or not
> (perhaps Ian J has an opinion), but I suppose it is acceptable (the
> alternative is a twisty maze of callbacks).
> 
> If we are going to expose libxl down to libxlu maybe we should go all
> the way and add the ctx to the XLU_Config?
> 
>> Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
>>
>> ---
>>
>> This patch does not include the changes to tools/libxl/libxlu_disk_l.c
>> and tools/libxl/libxlu_disk_l.h because the diffs contain unrelated
>> changes due to different generator versions.
> 
> I'm afraid it did, but I've ignored them.
> 
>>  tools/libxl/libxlu_disk.c   |   3 +-
>>  tools/libxl/libxlu_disk_i.h |   3 +-
>>  tools/libxl/libxlu_disk_l.c | 581 
>> ++++++++++++++++++++++----------------------
>>  tools/libxl/libxlu_disk_l.h |  24 +-
>>  tools/libxl/libxlu_disk_l.l |   8 +
>>  tools/libxl/libxlutil.h     |   2 +-
>>  tools/libxl/xl_cmdimpl.c    |   6 +-
> 
> This patch should also touch docs/misc/xl-disk-configuration.txt.

I'll add that in v2.

> [...]
>> @@ -169,6 +176,7 @@ devtype=[^,]*,?     { xlu__disk_err(DPC,yytext,"unknown 
>> value for type"); }
>>
>>  access=[^,]*,? { STRIP(','); setaccess(DPC, FROMEQUALS); }
>>  backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
>> +backenddomain=[^,]*,? { STRIP(','); setbackend(DPC,FROMEQUALS); }
> 
> Is this compatible with xend? Grep doesn't show the string
> "backenddomain" at all. Maybe xend simply didn't have this
> functionality?

The implementation I have for xend was in the comma-separated syntax only,
but I think that may have been due to non-upstreamed patches.
 
> xl seems to use just backend for network devices. They probably ought to
> match.

Originally I had the patch using "backend" but received comments that it could
be confused with backendtype. Matching the network device specification is a
good idea, and I'm fine with either name.
 
>>  vdev=[^,]*,?   { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
>>  script=[^,]*,? { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
>> diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h
>> index 0333e55..87eb399 100644
>> --- a/tools/libxl/libxlutil.h
>> +++ b/tools/libxl/libxlutil.h
>> @@ -72,7 +72,7 @@ const char *xlu_cfg_get_listitem(const XLU_ConfigList*, 
>> int entry);
>>   */
>>
>>  int xlu_disk_parse(XLU_Config *cfg, int nspecs, const char *const *specs,
>> -                   libxl_device_disk *disk);
>> +                   libxl_device_disk *disk, libxl_ctx *ctx);
>>    /* disk must have been initialised.
>>     *
>>     * On error, returns errno value.  Bad strings cause EINVAL and
>> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
>> index 138cd72..fd00d61 100644
>> --- a/tools/libxl/xl_cmdimpl.c
>> +++ b/tools/libxl/xl_cmdimpl.c
>> @@ -420,7 +420,7 @@ static void parse_disk_config_multistring(XLU_Config 
>> **config,
>>          if (!*config) { perror("xlu_cfg_init"); exit(-1); }
>>      }
>>
>> -    e = xlu_disk_parse(*config, nspecs, specs, disk);
>> +    e = xlu_disk_parse(*config, nspecs, specs, disk, ctx);
>>      if (e == EINVAL) exit(-1);
>>      if (e) {
>>          fprintf(stderr,"xlu_disk_parse failed: %s\n",strerror(errno));
>> @@ -5335,7 +5335,7 @@ int main_networkdetach(int argc, char **argv)
>>  int main_blockattach(int argc, char **argv)
>>  {
>>      int opt;
>> -    uint32_t fe_domid, be_domid = 0;
>> +    uint32_t fe_domid;
>>      libxl_device_disk disk = { 0 };
>>      XLU_Config *config = 0;
>>
>> @@ -5351,8 +5351,6 @@ int main_blockattach(int argc, char **argv)
>>      parse_disk_config_multistring
>>          (&config, argc-optind, (const char* const*)argv + optind, &disk);
>>
>> -    disk.backend_domid = be_domid;
>> -
> 
> xm block-attach's syntax was (allegedly): 
>         Usage: xm block-attach <Domain> <BackDev> <FrontDev> <Mode> 
> [BackDomain]
> 
> i.e. it accepted backdomain on the command line. Do we want/need to
> support that? I'd be happy enough not to.
> 
>>      if (dryrun_only) {
>>          char *json = libxl_device_disk_to_json(ctx, &disk);
>>          printf("disk: %s\n", json);
>> --
>> 1.7.11.2
>>
> 
> 
> 


-- 
Daniel De Graaf
National Security Agency

_______________________________________________
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®.