On 02.02.2016 02:33, Jeff Cody wrote: > This fixes a regression introduced with commit 3f09bfbc7. Multiple > bugs arise in conjunction with live snapshots and mirroring operations > (which include active layer commit). > > After a live snapshot occurs, the active layer and the base layer both > have a non-NULL tqe_prev field in the device_list, although the base > node's tqe_prev field points to a NULL entry. This non-NULL tqe_prev > field occurs after the bdrv_append() in the external snapshot calls > change_parent_backing_link(). > > In change_parent_backing_link(), when the previous active layer is > removed from device_list, the device_list.tqe_prev pointer is not > set to NULL. > > The operating scheme in the block layer is to indicate that a BDS belongs > in the bdrv_states device_list iff the device_list.tqe_prev pointer > is non-NULL. > > This patch does two things: > > 1.) Introduces a new block layer helper bdrv_device_remove() to remove a > BDS from the device_list, and > 2.) uses that new API, which also fixes the regression once used in > change_parent_backing_link(). > > Signed-off-by: Jeff Cody <jc...@redhat.com> > --- > block.c | 24 ++++++++++++++---------- > blockdev.c | 3 +-- > include/block/block.h | 1 + > 3 files changed, 16 insertions(+), 12 deletions(-)
Reviewed-by: Max Reitz <mre...@redhat.com>
signature.asc
Description: OpenPGP digital signature