|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-users] storage driver domains
Hello,
On 31/07/14 19:10, Kuba wrote:
> W dniu 2014-07-26 13:42, Kuba pisze:
>> Thank you for your help, but unfortunately I cannot get it to work (Xen
>> 4.4 compiled from sources with Debian 7 Dom0 with kernel 3.10.33). I'm
>> trying to provide storage from one FreeBSD 10 DomU (provider.conf) to
>> another FreeBSD 10 DomU (consumer.conf). I boot provider DomU in livecd
>> mode and create a zvol (tank/test). Long story short, I can get consumer
>> DomU's kernel to see the storage (when booted in livecd mode), but
>> cannot get the bios to see it too (and boot from it).
>>
>> When I try to boot consumer DomU with this in consumer.conf:
>>
>> #device_model_version="qemu-xen-traditional"
>> device_model_stubdomain_override=0
>> disk=[
>> 'format=raw,backendtype=phy,backend=provider,vdev=xvdb,target=/dev/zvol/tank/test',
>>
>>
>> 'file:/root/fbsd.iso,xvda,r,devtype=cdrom'
AFAICT, if you use qemu-traditional stubdomains you should use hdb and
hda instead of xvdb and xvda.
>> ]
>> boot='d'
>>
>> I get:
>>
>> # xl create consumer.conf
>> Parsing config from consumer.conf
>> libxl: error: libxl_dm.c:1371:device_model_spawn_outcome: domain 47
>> device model: spawn failed (rc=-3)
>> libxl: error: libxl_create.c:1186:domcreate_devmodel_started: device
>> model did not start: -3
>> libxl: error: libxl_dm.c:1475:kill_device_model: Device Model already
>> exited
>> libxl: error: libxl_device.c:1115:device_destroy_be_timeout_cb: timed
>> out while waiting for /local/domain/31/backend/vbd/47/51728 to be removed
>> libxl: error: libxl.c:1457:devices_destroy_cb: libxl__devices_destroy
>> failed for 47
>>
>>
>> And in qemu-dm-consumer.log:
>> qemu-system-i386: -drive
>> file=/dev/zvol/tank/test,if=ide,index=1,media=disk,format=raw,cache=writeback:
>>
>> could not open disk image /dev/zvol/tank/test: No such file or directory
>>
>>
>> But when I use a stubdomain:
>>
>> #device_model_version="qemu-xen-traditional"
>> device_model_stubdomain_override=1
>>
>> consumer DomU boots fine and I see /dev/xbd1 properly (and I'm sure its
>> the tank/test zvol from provider DomU). However qemu-dm-consumer.log
>> contains:
>>
>> frontend `/local/domain/49/device/vbd/51728' devtype `vbd' expected
>> backend `/local/domain/0/backend/qdisk/49/51728' got
>> `/local/domain/31/backend/vbd/49/51728', ignoring
>> frontend `/local/domain/49/device/vbd/51728' devtype `vbd' expected
>> backend `/local/domain/0/backend/qdisk/49/51728' got
>> `/local/domain/31/backend/vbd/49/51728', ignoring
Yes, not sure why, but qemu-traditional stubdomains were not able to
use disks from driver domains. The following patch solved the problem
for me, you should apply it to tools/qemu-xen-traditional-dir:
---
diff --git a/xenstore.c b/xenstore.c
index b0d6f77..44fe99d 100644
--- a/xenstore.c
+++ b/xenstore.c
@@ -247,8 +247,11 @@ static void xenstore_get_backend_path(char **backend,
const char *devtype,
char *backend_dompath=0;
char *expected_backend=0;
char *frontend_backend_path=0;
+ char *frontend_domid_path=0;
char *backend_frontend_path=0;
char *frontend_doublecheck=0;
+ char *backend_domid_str=0;
+ int backend_domid;
int len;
const char *frontend_idpath_slash;
@@ -270,13 +273,21 @@ static void xenstore_get_backend_path(char **backend,
const char *devtype,
frontend_path)
== -1) goto out;
+ if (pasprintf(&frontend_domid_path, "%s/backend-id",
+ frontend_path)
+ == -1) goto out;
+
bpath = xs_read(xsh, XBT_NULL, frontend_backend_path, &len);
+ backend_domid_str = xs_read(xsh, XBT_NULL, frontend_domid_path, &len);
+ if (!backend_domid_str) goto out;
+ backend_domid = atoi(backend_domid_str);
+
/* now we must check that the backend is intended for use
* by this frontend, since the frontend's /backend xenstore node
* is writeable by the untrustworthy guest. */
- backend_dompath = xs_get_domain_path(xsh, domid_backend);
+ backend_dompath = xs_get_domain_path(xsh, backend_domid);
if (!backend_dompath) goto out;
const char *expected_devtypes[4];
@@ -336,6 +347,8 @@ static void xenstore_get_backend_path(char **backend, const
char *devtype,
free(frontend_backend_path);
free(backend_frontend_path);
free(frontend_doublecheck);
+ free(frontend_domid_path);
+ free(backend_domid_str);
}
static const char *xenstore_get_guest_uuid(void)
_______________________________________________
Xen-users mailing list
Xen-users@xxxxxxxxxxxxx
http://lists.xen.org/xen-users
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |