• E
    dirty-bitmap: Avoid size query failure during truncate · 1b6cc579
    Eric Blake 提交于
    We've previously fixed several places where we failed to account
    for possible errors from bdrv_nb_sectors().  Fix another one by
    making bdrv_dirty_bitmap_truncate() take the new size from the
    caller instead of querying itself; then adjust the sole caller
    bdrv_truncate() to pass the size just determined by a successful
    resize, or to reuse the size given to the original truncate
    operation when refresh_total_sectors() was not able to confirm the
    actual size (the two sizes can potentially differ according to
    rounding constraints), thus avoiding sizing the bitmaps to -1.
    This also fixes a bug where not all failure paths in
    bdrv_truncate() would set errp.
    
    Note that bdrv_truncate() is still a bit awkward.  We may want
    to revisit it later and clean up things to better guarantee that
    a resize attempt either fails cleanly up front, or cannot fail
    after guest-visible changes have been made (if temporary changes
    are made, then they need to be cleanly rolled back).  But that
    is a task for another day; for now, the goal is the bare minimum
    fix to ensure that just bdrv_dirty_bitmap_truncate() cannot fail.
    Signed-off-by: NEric Blake <eblake@redhat.com>
    Reviewed-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    Reviewed-by: NJohn Snow <jsnow@redhat.com>
    Reviewed-by: NFam Zheng <famz@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    1b6cc579
block.c 148.1 KB