* Race condition in /etc/xen/scripts/block
@ 2010-07-16 9:59 Bastian de Groot
2010-07-16 10:07 ` James Harper
0 siblings, 1 reply; 5+ messages in thread
From: Bastian de Groot @ 2010-07-16 9:59 UTC (permalink / raw)
To: xen-devel
Hello,
I am trying to figure out the behavior of the hook-script for block devices
(/etc/xen/scripts/block).
Here is the problem:
I want to start a VM. It shall boot from a dm-device, which is setup by a
script executed in the script /etc/xen/scripts/block. The dm-device doesn't
exist when "xm start " is executed .
When I place the setup script at the top of the block-script, everything
works fine (http://pastebin.com/UYYbGupC). But when the script is placed in
the phy case branch of the block-script, the VM won't start
(http://pastebin.com/iPdJ65AH).
Whether the VM starts or not, also depends on the runtime of the setup script.
When the script is executed fast, it is much more likely that the VM starts.
So, is there a way to setup a device in the hook-script?
My configuration: Xen 3.4 on a 2.6.32 Kernel
I would appreciate your help on that very much,
Bastian
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: Race condition in /etc/xen/scripts/block
2010-07-16 9:59 Race condition in /etc/xen/scripts/block Bastian de Groot
@ 2010-07-16 10:07 ` James Harper
2010-07-16 11:28 ` Bastian de Groot
0 siblings, 1 reply; 5+ messages in thread
From: James Harper @ 2010-07-16 10:07 UTC (permalink / raw)
To: Bastian de Groot, xen-devel
> Hello,
>
> I am trying to figure out the behavior of the hook-script for block
devices
> (/etc/xen/scripts/block).
>
> Here is the problem:
> I want to start a VM. It shall boot from a dm-device, which is setup
by a
> script executed in the script /etc/xen/scripts/block. The dm-device
doesn't
> exist when "xm start " is executed .
>
> When I place the setup script at the top of the block-script,
everything
> works fine (http://pastebin.com/UYYbGupC). But when the script is
placed in
> the phy case branch of the block-script, the VM won't start
> (http://pastebin.com/iPdJ65AH).
>
> Whether the VM starts or not, also depends on the runtime of the setup
script.
> When the script is executed fast, it is much more likely that the VM
starts.
>
> So, is there a way to setup a device in the hook-script?
>
> My configuration: Xen 3.4 on a 2.6.32 Kernel
>
> I would appreciate your help on that very much,
> Bastian
>
I've seen a similar thing when using drbd. When you run 'xm start' the
drbd device is 'secondary' and one of the things the block setup script
does is make it 'primary' which means it can be opened/accessed.
Unfortunately most of the time qemu-dm has already tried to open it and
failed by then.
In that case I solved it by having qemu-dm try to open in a loop with a
sleep each time. Not the most elegant solution but it works.
I don't think the same problem exists with PV domains so if you are
using a PV DomU then I've probably not been much help...
James
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Race condition in /etc/xen/scripts/block
2010-07-16 10:07 ` James Harper
@ 2010-07-16 11:28 ` Bastian de Groot
2010-07-16 11:35 ` James Harper
0 siblings, 1 reply; 5+ messages in thread
From: Bastian de Groot @ 2010-07-16 11:28 UTC (permalink / raw)
To: James Harper; +Cc: xen-devel
Hi James,
thank you for your fast reply. The VMs are not PV domains, so the problem
seems to be pretty much the same as yours. I would be very glad if you could
publish the patch, so that I can test if it works for me.
Thanks again,
Bastian
Am Freitag 16 Juli 2010 12:07:29 schrieben Sie:
> > Hello,
> >
> > I am trying to figure out the behavior of the hook-script for block
>
> devices
>
> > (/etc/xen/scripts/block).
> >
> > Here is the problem:
> > I want to start a VM. It shall boot from a dm-device, which is setup
>
> by a
>
> > script executed in the script /etc/xen/scripts/block. The dm-device
>
> doesn't
>
> > exist when "xm start " is executed .
> >
> > When I place the setup script at the top of the block-script,
>
> everything
>
> > works fine (http://pastebin.com/UYYbGupC). But when the script is
>
> placed in
>
> > the phy case branch of the block-script, the VM won't start
> > (http://pastebin.com/iPdJ65AH).
> >
> > Whether the VM starts or not, also depends on the runtime of the setup
>
> script.
>
> > When the script is executed fast, it is much more likely that the VM
>
> starts.
>
> > So, is there a way to setup a device in the hook-script?
> >
> > My configuration: Xen 3.4 on a 2.6.32 Kernel
> >
> > I would appreciate your help on that very much,
> > Bastian
>
> I've seen a similar thing when using drbd. When you run 'xm start' the
> drbd device is 'secondary' and one of the things the block setup script
> does is make it 'primary' which means it can be opened/accessed.
> Unfortunately most of the time qemu-dm has already tried to open it and
> failed by then.
>
> In that case I solved it by having qemu-dm try to open in a loop with a
> sleep each time. Not the most elegant solution but it works.
>
> I don't think the same problem exists with PV domains so if you are
> using a PV DomU then I've probably not been much help...
>
> James
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: Race condition in /etc/xen/scripts/block
2010-07-16 11:28 ` Bastian de Groot
@ 2010-07-16 11:35 ` James Harper
2010-07-20 11:56 ` Bastian de Groot
0 siblings, 1 reply; 5+ messages in thread
From: James Harper @ 2010-07-16 11:35 UTC (permalink / raw)
To: Bastian de Groot; +Cc: xen-devel
>
> Hi James,
>
> thank you for your fast reply. The VMs are not PV domains, so the
problem
> seems to be pretty much the same as yours. I would be very glad if you
could
> publish the patch, so that I can test if it works for me.
>
This is the patch I'm using for drbd. You can probably remove the drbd
bit if it doesn't interest you. If line wrapping makes the patch
unusable let me know and I'll attach it as a file. It's against 3.4.x
but is simple enough that you should be able to re-invent it for a later
or earlier version. Obviously if qemu isn't the thing that's having
problems then this patch won't help.
James
diff --git a/xenstore.c b/xenstore.c
index 9360771..bd0b5e0 100644
--- a/xenstore.c
+++ b/xenstore.c
@@ -317,6 +317,7 @@ void xenstore_parse_domain_config(int hvm_domid)
unsigned int len, num, hd_index, pci_devid = 0;
BlockDriverState *bs;
BlockDriver *format;
+ int retry_count;
/* paths controlled by untrustworthy guest, and values read from
them */
char *danger_path;
@@ -428,6 +429,14 @@ void xenstore_parse_domain_config(int hvm_domid)
params = newparams;
format = &bdrv_raw;
}
+ /* handle drbd mapping */
+ if (!strcmp(drv, "drbd")) {
+ char *newparams = malloc(17 + strlen(params) + 1);
+ sprintf(newparams, "/dev/drbd/by-res/%s", params);
+ free(params);
+ params = newparams;
+ format = &bdrv_raw;
+ }
#if 0
/* Phantom VBDs are disabled because the use of paths
@@ -500,8 +509,15 @@ void xenstore_parse_domain_config(int hvm_domid)
}
}
pstrcpy(bs->filename, sizeof(bs->filename), params);
- if (bdrv_open2(bs, params, BDRV_O_CACHE_WB /* snapshot and
write-back */, format) < 0)
- fprintf(stderr, "qemu: could not open vbd '%s' or hard
disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?",
format ? format->format_name : "0");
+ retry_count = 0;
+ while ((ret = bdrv_open2(bs, params, BDRV_O_CACHE_WB /*
snapshot and write-back */, format)) < 0)
+ {
+ if (retry_count++ > 10)
+ break;
+ sleep(1);
+ }
+ if (ret < 0)
+ fprintf(stderr, "qemu: could not open vbd '%s' or hard
disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?",
format ? format->format_name : "0");
}
drives_table[nb_drives].bdrv = bs;
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: Race condition in /etc/xen/scripts/block
2010-07-16 11:35 ` James Harper
@ 2010-07-20 11:56 ` Bastian de Groot
0 siblings, 0 replies; 5+ messages in thread
From: Bastian de Groot @ 2010-07-20 11:56 UTC (permalink / raw)
To: James Harper; +Cc: xen-devel
Hi James,
thanks again for the fast reply. I've tested the patch over the last few days
and it seems to work just fine.
As you said, it's not the most elegant way, but it looks like there is no
other simple way around this problem.
Does anyone know whether xen 4.x also has this bug?
Bastian
Am Freitag 16 Juli 2010 13:35:03 schrieben Sie:
> This is the patch I'm using for drbd. You can probably remove the drbd
> bit if it doesn't interest you. If line wrapping makes the patch
> unusable let me know and I'll attach it as a file. It's against 3.4.x
> but is simple enough that you should be able to re-invent it for a later
> or earlier version. Obviously if qemu isn't the thing that's having
> problems then this patch won't help.
>
> James
>
>
> diff --git a/xenstore.c b/xenstore.c
> index 9360771..bd0b5e0 100644
> --- a/xenstore.c
> +++ b/xenstore.c
> @@ -317,6 +317,7 @@ void xenstore_parse_domain_config(int hvm_domid)
> unsigned int len, num, hd_index, pci_devid = 0;
> BlockDriverState *bs;
> BlockDriver *format;
> + int retry_count;
>
> /* paths controlled by untrustworthy guest, and values read from
> them */
> char *danger_path;
> @@ -428,6 +429,14 @@ void xenstore_parse_domain_config(int hvm_domid)
> params = newparams;
> format = &bdrv_raw;
> }
> + /* handle drbd mapping */
> + if (!strcmp(drv, "drbd")) {
> + char *newparams = malloc(17 + strlen(params) + 1);
> + sprintf(newparams, "/dev/drbd/by-res/%s", params);
> + free(params);
> + params = newparams;
> + format = &bdrv_raw;
> + }
>
> #if 0
> /* Phantom VBDs are disabled because the use of paths
> @@ -500,8 +509,15 @@ void xenstore_parse_domain_config(int hvm_domid)
> }
> }
> pstrcpy(bs->filename, sizeof(bs->filename), params);
> - if (bdrv_open2(bs, params, BDRV_O_CACHE_WB /* snapshot and
> write-back */, format) < 0)
> - fprintf(stderr, "qemu: could not open vbd '%s' or hard
> disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?",
> format ? format->format_name : "0");
> + retry_count = 0;
> + while ((ret = bdrv_open2(bs, params, BDRV_O_CACHE_WB /*
> snapshot and write-back */, format)) < 0)
> + {
> + if (retry_count++ > 10)
> + break;
> + sleep(1);
> + }
> + if (ret < 0)
> + fprintf(stderr, "qemu: could not open vbd '%s' or hard
> disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?",
> format ? format->format_name : "0");
> }
>
> drives_table[nb_drives].bdrv = bs;
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-07-20 11:56 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-16 9:59 Race condition in /etc/xen/scripts/block Bastian de Groot
2010-07-16 10:07 ` James Harper
2010-07-16 11:28 ` Bastian de Groot
2010-07-16 11:35 ` James Harper
2010-07-20 11:56 ` Bastian de Groot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).