On Sat, Sep 11, 2010 at 3:04 PM, Anthony Liguori <aligu...@us.ibm.com> wrote: > This fixes a couple nasty problems relating to live migration. > > 1) When dealing with shared storage with weak coherence (i.e. NFS), even if > we re-read, we may end up with undesired caching. By delaying any reads > until we absolutely have to, we decrease the likelihood of any undesirable > caching. > > 2) When dealing with copy-on-read, the local storage acts as a cache. We need > to make sure to avoid any reads to avoid polluting the local cache. > > Signed-off-by: Anthony Liguori <aligu...@us.ibm.com> > > diff --git a/hw/ide/core.c b/hw/ide/core.c > index 1e466d1..57d8db3 100644 > --- a/hw/ide/core.c > +++ b/hw/ide/core.c > @@ -105,6 +132,8 @@ static void ide_identify(IDEState *s) > return; > } > > + guess_geometry(s); > +
Does the same change need to be made in ide_cfata_identify()? I quickly checked the VMStateDescription and don't see cylinders, heads, sectors being saved for migration. I am concerned that IDE will break after migration if the following happens: 1. Guest resumes and does not issue ATA IDENTIFY so cylinders, heads, sectors are not initialized. 2. Normal I/O is performed, invoking ide_get_sector() which uses geometry information that has not been initialized. Did I miss something? > diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c > index bd6bbe6..0bf17ec 100644 > --- a/hw/virtio-blk.c > +++ b/hw/virtio-blk.c > @@ -427,6 +427,10 @@ static void virtio_blk_update_config(VirtIODevice *vdev, > uint8_t *config) > > bdrv_get_geometry(s->bs, &capacity); > bdrv_get_geometry_hint(s->bs, &cylinders, &heads, &secs); > + if (cylinders == 0) { > + bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs); > + } > + bdrv_guess_geometry() can be called unconditionally. The call to bdrv_get_geometry_hint() can be eliminated. bdrv_guess_geometry() updates the geometry hint and does not probe the boot sector after the first time. Stefan