The bmap size in block/vdi.c may exceed INT_MAX. Using bdrv_pwrite_sync() (which takes an int byte count) is therefore not a good idea. The second patch of this series fixes this by replacing bdrv_pwrite_sync() by bdrv_write()+bdrv_flush() (we don't need the p in pwrite here).
The first patch employs ROUND_UP() and DIV_ROUND_UP() in block/vdi.c, so you are reminded that bmap_size is aligned to BDRV_SECTOR_SIZE for the second patch. See https://bugzilla.redhat.com/show_bug.cgi?id=1154940 for a bug report. I will not include an iotest in this series because this would require qemu to allocate and then write about 2G of data; yes, test 1 in 084 fails for me because qemu cannot allocate 4G for the bmap. In fact, I can only test this once I'm home where I have more RAM available (I made the mistake of activating swap space to test this only once). Max Reitz (2): block/vdi: Use {DIV_,}ROUND_UP block/vdi: Do not use bdrv_pwrite_sync() for bmap block/vdi.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) -- 1.9.3