aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2012-08-17 12:36:20 +1000
committerPaolo Bonzini <pbonzini@redhat.com>2012-08-28 14:50:08 +0200
commit135b9088780d7d8e5eae027b4fba6b33562f7006 (patch)
tree4059c8c4d7ce60614056e5c6a51fa4d8459464c9
parent0f1da449ec65403bc5c028eb9618d0ee598a3615 (diff)
downloadqemu-arm-135b9088780d7d8e5eae027b4fba6b33562f7006.tar.gz
iscsi: Set number of blocks to 0 for blank CDROM devices
The number of blocks of the device is used to compute the device size in bdrv_getlength()/iscsi_getlength(). For MMC devices, the ReturnedLogicalBlockAddress in the READCAPACITY10 has a special meaning when it is 0. In this case it does not mean that LBA 0 is the last accessible LBA, and thus the device has 1 readable block, but instead it means that the disc is blank and there are no readable blocks. This change ensures that when the iSCSI LUN is loaded with a blank DVD-R disk or similar that bdrv_getlength() will return the correct size of the device as 0 bytes. Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
-rw-r--r--block/iscsi.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/block/iscsi.c b/block/iscsi.c
index 4828b83927..0b96165ec2 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -721,7 +721,12 @@ iscsi_readcapacity10_cb(struct iscsi_context *iscsi, int status,
}
itask->iscsilun->block_size = rc10->block_size;
- itask->iscsilun->num_blocks = rc10->lba + 1;
+ if (rc10->lba == 0) {
+ /* blank disk loaded */
+ itask->iscsilun->num_blocks = 0;
+ } else {
+ itask->iscsilun->num_blocks = rc10->lba + 1;
+ }
itask->bs->total_sectors = itask->iscsilun->num_blocks *
itask->iscsilun->block_size / BDRV_SECTOR_SIZE ;