]> git.proxmox.com Git - mirror_qemu.git/commit - blockjob.c
block: Cancel jobs first in bdrv_close_all()
authorKevin Wolf <kwolf@redhat.com>
Fri, 8 Apr 2016 16:26:37 +0000 (18:26 +0200)
committerKevin Wolf <kwolf@redhat.com>
Wed, 25 May 2016 17:04:21 +0000 (19:04 +0200)
commita1a2af075647bb61e1435ce4c78d99e3f36d928b
treef7278838924299de61dac499e820d7e18c0accce
parenta7112795c14d99b81600f8809fda5ce18b430830
block: Cancel jobs first in bdrv_close_all()

So far, bdrv_close_all() first removed all root BlockDriverStates of
BlockBackends and monitor owned BDSes, and then assumed that the
remaining BDSes must be related to jobs and cancelled these jobs.

This order doesn't work that well any more when block jobs use
BlockBackends internally because then they will lose their BDS before
being cancelled.

This patch changes bdrv_close_all() to first cancel all jobs and then
remove all root BDSes from the remaining BBs.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
block.c
blockjob.c
include/block/blockjob.h