[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] can't boot from iso on cifs mount
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 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |