Is there any actual bug resulting from this that you're observing? As I read the spec, having a longer BAT is merely unconventional, not strictly wrong. So if another application fails to deal with such images, it's probably a bug in that application.
Of course, I can't see a reason for making the BAT longer than necessary either. We do, however, need to round up if the disk size is not a multiple of the image block size. So I think what it really should be is: num_bat_entries = DIV_ROUND_UP(total_sectors, block_size / 512) If you agree, please let me know if I should submit a patch or if you would like to do that yourself. (See https://wiki.qemu.org/Contribute/SubmitAPatch) -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1870098 Title: [block/vpc] cynamic disk header: off-by-one error for "num_bat_entries" Status in QEMU: New Bug description: In current qemu versions (observed in 5.0.0-rc1 as well as 2833ad487cfff7dc33703e4731b75facde1c561e), disk headers for dynamic VPCs are written with an incorrect "block allocation table entries" value. https://www.microsoft.com/en-us/download/details.aspx?id=23850 (the corresponding spec) states that: "Max Table Entries This field holds the maximum entries present in the BAT. This should be equal to the number of blocks in the disk (that is, the disk size divided by the block size)." Inside the qemu code, the value is "disk size divided by the block size *plus one*". Calculating "num_bat_entries" as "total_sectors/(block_size / 512)" *should* fix the issue. To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1870098/+subscriptions