[Sheepdog] [RFC PATCH v3 2/3] block: call the snapshot handlers of the protocol drivers
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Mon May 17 14:19:25 CEST 2010
At Mon, 17 May 2010 13:08:08 +0200,
Kevin Wolf wrote:
>
> Am 17.05.2010 12:19, schrieb MORITA Kazutaka:
> >
> > int bdrv_snapshot_goto(BlockDriverState *bs,
> > const char *snapshot_id)
> > {
> > BlockDriver *drv = bs->drv;
> > + int ret, open_ret;
> > +
> > if (!drv)
> > return -ENOMEDIUM;
> > - if (!drv->bdrv_snapshot_goto)
> > - return -ENOTSUP;
> > - return drv->bdrv_snapshot_goto(bs, snapshot_id);
> > + if (drv->bdrv_snapshot_goto)
> > + return drv->bdrv_snapshot_goto(bs, snapshot_id);
> > +
> > + if (bs->file) {
> > + drv->bdrv_close(bs);
> > + ret = bdrv_snapshot_goto(bs->file, snapshot_id);
> > + open_ret = drv->bdrv_open(bs, bs->open_flags);
> > + if (open_ret < 0) {
> > + bdrv_delete(bs);
>
> I think you mean bs->file here.
>
> Kevin
This is an error of re-opening the format driver, so what we should
delete here is not bs->file but bs, isn't it? If we failed to open bs
here, the drive doesn't seem to work anymore.
Regards,
Kazutaka
> > + bs->drv = NULL;
> > + return open_ret;
> > + }
> > + return ret;
> > + }
> > +
> > + return -ENOTSUP;
> > }
More information about the sheepdog
mailing list