[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.