|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] can't boot from iso on cifs mount
On Tue, 22 Jan 2013, Ian Campbell wrote:
> Please don't top post.
>
> On Tue, 2013-01-22 at 05:38 +0000, Vasiliy Tolstov wrote:
> > Thanks!
> > I found, that now xl tries to open iso with O_DIRECT flag.
> > open("/var/storage/iso/SW_DVD5_Windows_Svr_DC_EE_SE_Web_2008_R2_64Bit_Russian_w_SP1_MLF_X17-22616_vase.iso",
> > O_RDONLY|O_DIRECT) = -1 EINVAL (Invalid argument)
> > write(2, "qemu: could not open vbd '/local"..., 217) = 217
xl? I guess you mean QEMU tries to open the ISO with O_DIRECT.
> I guess CIFS doesn't support O_DIRECT. It looks like it does have mount
> -o directio though, worth a try.
>
> I'm not sure what options exist to turn this off from the qemu side --
> Stefano? I also have a feeling something changed in this regard in 4.2.x
Given that you are not passing any device_model_version option to xl, I
assume that you are running qemu-xen-traditional (ps should show that a
binary called qemu-dm is running).
If that is the case, there is currently no way to specify any flags.
However the interesting bit is that qemu-xen-traditional opens files
corresponding to emulated devices with BDRV_O_CACHE_WB and opens files
corresponding to PV interfaces using BDRV_O_NOCACHE (this means
O_DIRECT).
This means that the failure should be caused by hw/xen_disk.c trying to
opening the iso O_DIRECT. Paradoxically the PV inteface for a cdrom
drive is usually never used AFAIK.
Did the Windows PV drivers start using the PV cdrom interface all of a
sudden?
In any case I think that the best thing we could do it fall back to
write-through (or should it be write-back? It might not be safe..) in
case O_DIRECT fails. This is what qemu-xen does in such cases.
Try this patch:
---
diff --git a/hw/xen_disk.c b/hw/xen_disk.c
index 33a5531..d6d71fe 100644
--- a/hw/xen_disk.c
+++ b/hw/xen_disk.c
@@ -659,9 +659,16 @@ static int blk_init(struct XenDevice *xendev)
if (blkdev->bs) {
if (bdrv_open2(blkdev->bs, blkdev->filename, qflags,
bdrv_find_format(blkdev->fileproto)) != 0) {
- bdrv_delete(blkdev->bs);
- blkdev->bs = NULL;
- }
+ /* try without O_DIRECT */
+ xen_be_printf(&blkdev->xendev, 0, "opening %s with O_DIRECT
failed, trying write-through.\n",
+ blkdev->filename);
+ qflags &= BDRV_O_NOCACHE;
+ if (bdrv_open2(blkdev->bs, blkdev->filename, qflags,
+ bdrv_find_format(blkdev->fileproto)) != 0) {
+ bdrv_delete(blkdev->bs);
+ blkdev->bs = NULL;
+ }
+ }
}
if (!blkdev->bs)
return -1;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |