[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] can't boot from iso on cifs mount
Failed again. may be in xenstore.c in this code i need to delete O_DIRECT flag? In strace before i get messages about fallback without O_DIRECT (provided with patch) i get this: write(2, "Using file /var/storage/iso/SW_D"..., 130) = 130 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"..., 216) = 216 My be in this code i append fallback? if (bdrv_open2(bs, params, flags|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"); } else { char* snapshot = get_snapshot_name(atoi(e_danger[i])); if (snapshot) { fprintf(stderr, "Using snapshot %s\n", snapshot); ret = bdrv_snapshot_goto(bs, snapshot); switch (ret) { case 0: /* Success */ break; case -ENOTSUP: /* Don't abort here (could be read-only ISO) */ fprintf(stderr, "Snapshots are not supported for " "this image file format\n"); break; case -ENOENT: fprintf(stderr, "No such snapshot, skipping this " "image file\n"); continue; default: fprintf(stderr, "Could not load snapshot, skipping" " this image file\n"); continue; } } } 2013/1/30 Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>: > Sorry that was my stupid mistake. > This should work: > > diff --git a/hw/xen_disk.c b/hw/xen_disk.c > index 33a5531..1786db8 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; > > On Wed, 30 Jan 2013, Vasiliy Tolstov wrote: >> Strace shows that qemu after O_DIRECT next try with O_DIRECT >> open("/var/storage/iso/winpe_amd64.iso", O_RDONLY|O_DIRECT) = -1 >> EINVAL (Invalid argument) >> write(2, "xen be: qdisk-832: ", 19) = 19 >> write(2, "xen be: qdisk-832: ", 19) = 19 >> write(2, "opening /var/storage/iso/winpe_a"..., 85) = 85 >> write(2, "opening /var/storage/iso/winpe_a"..., 85) = 85 >> open("/var/storage/iso/winpe_amd64.iso", O_RDONLY|O_DIRECT) = -1 >> EINVAL (Invalid argument) >> >> 2013/1/30 Vasiliy Tolstov <v.tolstov@xxxxxxxxx>: >> > Thanks for patch. But it not solve problem: >> > Now i have : >> > domid: 6 >> > Using file /dev/disk/vbd/21-828 in read-write mode >> > Strip off blktap sub-type prefix to (drv 'aio') >> > Watching /local/domain/0/device-model/6/logdirty/cmd >> > Watching /local/domain/0/device-model/6/command >> > Watching /local/domain/6/cpu >> > char device redirected to /dev/pts/5 >> > qemu_map_cache_init nr_buckets = 10000 size 4194304 >> > Could not open /var/run/tap/qemu-read-6 >> > shared page at pfn feffd >> > buffered io page at pfn feffb >> > Guest uuid = c98c33c8-1891-41ec-96a0-984f3df80def >> > xen be: qdisk-5632: xen be: qdisk-5632: opening with O_DIRECT failed, >> > trying write-through. >> > opening with O_DIRECT failed, trying write-through. >> > populating video RAM at ff000000 >> > mapping video RAM from ff000000 >> > Register xen platform. >> > Done register platform. >> > platform_fixed_ioport: changed ro/rw state of ROM memory area. now is rw >> > state. >> > xs_read(/local/domain/0/device-model/6/xen_extended_power_mgmt): read error >> > medium change watch on `hdc' (index: 1): aio: >> > I/O request not ready: 0, ptr: 0, port: 0, data: 0, count: 0, size: 0 >> > Log-dirty: no command yet. >> > I/O request not ready: 0, ptr: 0, port: 0, data: 0, count: 0, size: 0 >> > I/O request not ready: 0, ptr: 0, port: 0, data: 0, count: 0, size: 0 >> > vcpu-set: watch node error. >> > I/O request not ready: 0, ptr: 0, port: 0, data: 0, count: 0, size: 0 >> > xs_read(/local/domain/6/log-throttling): read error >> > qemu: ignoring not-understood drive `/local/domain/6/log-throttling' >> > medium change watch on `/local/domain/6/log-throttling' - unknown >> > device, ignored >> > xen be: qdisk-5632: xen be: qdisk-5632: opening with O_DIRECT failed, >> > trying write-through. >> > opening with O_DIRECT failed, trying write-through. >> > log_throttling disabled >> > qemu: ignoring not-understood drive `/local/domain/6/log-throttling' >> > medium change watch on `/local/domain/6/log-throttling' - unknown >> > device, ignored >> > vga s->lfb_addr = f0000000 s->lfb_end = f1000000 >> > platform_fixed_ioport: changed ro/rw state of ROM memory area. now is rw >> > state. >> > platform_fixed_ioport: changed ro/rw state of ROM memory area. now is ro >> > state. >> > >> > >> > (XEN) HVM6: VGABios $Id: vgabios.c,v 1.67 2008/01/27 09:44:12 vruppert Exp >> > $ >> > (XEN) HVM6: VBE Bios $Id: vbe.c,v 1.60 2008/03/02 07:47:21 vruppert Exp $ >> > (XEN) HVM6: Bochs BIOS - build: 06/23/99 >> > (XEN) HVM6: $Revision: 1.221 $ $Date: 2008/12/07 17:32:29 $ >> > (XEN) HVM6: Options: apmbios pcibios eltorito PMM >> > (XEN) HVM6: >> > (XEN) HVM6: ata0-0: PCHS=16383/16/63 translation=lba LCHS=1024/255/63 >> > (XEN) HVM6: ata0 master: QEMU HARDDISK ATA-7 Hard-Disk (10246 MBytes) >> > (XEN) HVM6: IDE time out >> > (XEN) HVM6: ata1 master: QEMU DVD-ROM ATAPI-4 CD-Rom/DVD-Rom >> > (XEN) HVM6: IDE time out >> > (XEN) HVM6: >> > (XEN) HVM6: >> > (XEN) HVM6: >> > (XEN) HVM6: Press F12 for boot menu. >> > (XEN) HVM6: >> > (XEN) HVM6: Booting from Hard Disk... >> > (XEN) HVM6: Boot from Hard Disk failed: not a bootable disk >> > (XEN) HVM6: >> > (XEN) HVM6: >> > (XEN) HVM6: No bootable device. >> > (XEN) HVM6: Powering off in 30 seconds. >> > (XEN) hvm.c:1080:d6 All CPUs offline -- powering off. >> > >> > 2013/1/22 Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>: >> >> 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; >> >> >> > >> > >> > >> > -- >> > Vasiliy Tolstov, >> > Clodo.ru >> > e-mail: v.tolstov@xxxxxxxxx >> > jabber: vase@xxxxxxxxx >> >> >> >> -- >> Vasiliy Tolstov, >> Clodo.ru >> e-mail: v.tolstov@xxxxxxxxx >> jabber: vase@xxxxxxxxx >> -- Vasiliy Tolstov, Clodo.ru e-mail: v.tolstov@xxxxxxxxx jabber: vase@xxxxxxxxx _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |