On Tue, 05/24 20:20, Max Reitz wrote: > On 17.05.2016 09:35, Fam Zheng wrote: > > In sync=none the backing image of s->target is s->common.bs, which could > > be exclusively locked, the image locking wouldn't work here. > > Why is the backing image s->common.bs when the bdrv_open() call > explicitly specifies BDRV_O_NO_BACKING?
BDRV_O_NO_BACKING is cleared in mirror_complete where the backing image is opened, we cannot use lock there as the backing is already open rw as source. Fam > > Max > > > Later we can update completion code to lock it after the replaced node > > has dropped its lock. > > > > Signed-off-by: Fam Zheng <f...@redhat.com> > > --- > > blockdev.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/blockdev.c b/blockdev.c > > index 250e3d2..3de54f0 100644 > > --- a/blockdev.c > > +++ b/blockdev.c > > @@ -3626,6 +3626,12 @@ void qmp_drive_mirror(const char *device, const char > > *target, > > * file. > > */ > > target_bs = NULL; > > + if (sync == MIRROR_SYNC_MODE_NONE) { > > + flags |= BDRV_O_NO_LOCK; > > + } > > + /* TODO: in mirror complete, after target_bs is switched to and the > > + * original BDS's lock is dropped, we should enable the lock on > > target_bs. > > + * */ > > ret = bdrv_open(&target_bs, target, NULL, options, > > flags | BDRV_O_NO_BACKING, &local_err); > > if (ret < 0) { > > > >