On 13.09.18 22:55, Max Reitz wrote: > On 13.09.18 14:52, Kevin Wolf wrote: >> When starting an active commit job, other callbacks can run before >> mirror_start_job() calls bdrv_ref() where needed and cause the nodes to >> go away. Add another pair of bdrv_ref/unref() around it to protect >> against this case. >> >> Signed-off-by: Kevin Wolf <[email protected]> >> --- >> block/mirror.c | 11 +++++++++++ >> 1 file changed, 11 insertions(+) > > Reviewed-by: Max Reitz <[email protected]> > > But... How? > > Like... You mirror to some target (in an iothread), then you give that > target a backing file, then you cancel the mirror and immediately commit > the target?
The only way I got this to work was to allow commit to accept a non-root BDS as @device. I can't imagine a way where @device can go away, but isn't currently in use by something that would make it a non-root BDS. (Because the only reason someone can make it go away is because that someone uses it right now.) But if commit accepts non-root BDSs as @device, I get a segfault even after this commit... Max
signature.asc
Description: OpenPGP digital signature
