• A
    commit: reopen overlay_bs before base · 3db2bd55
    Alberto Garcia 提交于
    'block-commit' needs write access to two different nodes of the chain:
    
    - 'base', because that's where the data is written to.
    - the overlay of 'top', because it needs to update the backing file
      string to point to 'base' after the operation.
    
    Both images have to be opened in read-write mode, and commit_start()
    takes care of reopening them if necessary.
    
    With the current implementation, however, when overlay_bs is reopened
    in read-write mode it has the side effect of making 'base' read-only
    again, eventually making 'block-commit' fail.
    
    This needs to be fixed in bdrv_reopen(), but until we get to that it
    can be worked around simply by swapping the order of base and
    overlay_bs in the reopen queue.
    
    In order to reproduce this bug, overlay_bs needs to be initially in
    read-only mode. That is: the 'top' parameter of 'block-commit' cannot
    be the active layer nor its immediate backing chain.
    
    Cc: qemu-stable@nongnu.org
    Signed-off-by: NAlberto Garcia <berto@igalia.com>
    Reviewed-by: NMax Reitz <mreitz@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    3db2bd55
commit.c 7.7 KB