Skip to content
  • Eric Blake's avatar
    49d741b5
    qcow2: Switch store_bitmap_data() to byte-based iteration · 49d741b5
    Eric Blake authored
    
    
    Now that we have adjusted the majority of the calls this function
    makes to be byte-based, it is easier to read the code if it makes
    passes over the image using bytes rather than sectors.
    
    iotests 165 was rather weak - on a default 64k-cluster image, where
    bitmap granularity also defaults to 64k bytes, a single cluster of
    the bitmap table thus covers (64*1024*8) bits which each cover 64k
    bytes, or 32G of image space.  But the test only uses a 1G image,
    so it cannot trigger any more than one loop of the code in
    store_bitmap_data(); and it was writing to the first cluster.  In
    order to test that we are properly aligning which portions of the
    bitmap are being written to the file, we really want to test a case
    where the first dirty bit returned by bdrv_dirty_iter_next() is not
    aligned to the start of a cluster, which we can do by modifying the
    test to write data that doesn't happen to fall in the first cluster
    of the image.
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
    Reviewed-by: default avatarFam Zheng <famz@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    49d741b5
    qcow2: Switch store_bitmap_data() to byte-based iteration
    Eric Blake authored
    
    
    Now that we have adjusted the majority of the calls this function
    makes to be byte-based, it is easier to read the code if it makes
    passes over the image using bytes rather than sectors.
    
    iotests 165 was rather weak - on a default 64k-cluster image, where
    bitmap granularity also defaults to 64k bytes, a single cluster of
    the bitmap table thus covers (64*1024*8) bits which each cover 64k
    bytes, or 32G of image space.  But the test only uses a 1G image,
    so it cannot trigger any more than one loop of the code in
    store_bitmap_data(); and it was writing to the first cluster.  In
    order to test that we are properly aligning which portions of the
    bitmap are being written to the file, we really want to test a case
    where the first dirty bit returned by bdrv_dirty_iter_next() is not
    aligned to the start of a cluster, which we can do by modifying the
    test to write data that doesn't happen to fall in the first cluster
    of the image.
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
    Reviewed-by: default avatarFam Zheng <famz@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Loading