Il 18/02/2013 13:58, Peter Lieven ha scritto:
- switch (iscsilun->type) {
- case TYPE_DISK:
- task = iscsi_readcapacity16_sync(iscsi, iscsilun->lun);
- if (task == NULL || task->status != SCSI_STATUS_GOOD) {
- error_report("iSCSI: failed to send readcapacity16 command.");
- ret = -EINVAL;
- goto out;
- }
- rc16 = scsi_datain_unmarshall(task);
- if (rc16 == NULL) {
- error_report("iSCSI: Failed to unmarshall readcapacity16
data.");
- ret = -EINVAL;
+ if (iscsilun->type == TYPE_DISK) {
+ if ((ret = iscsi_disk_readcapacity16_sync(iscsilun))) {
goto out;
}
- iscsilun->block_size = rc16->block_length;
- iscsilun->num_blocks = rc16->returned_lba + 1;
- break;
- case TYPE_ROM:
+ }
+ if (iscsilun->type == TYPE_ROM) {
task = iscsi_readcapacity10_sync(iscsi, iscsilun->lun, 0, 0);
if (task == NULL || task->status != SCSI_STATUS_GOOD) {
error_report("iSCSI: failed to send readcapacity10 command.");
@@ -964,10 +981,7 @@ static int iscsi_open(BlockDriverState *bs, const
char *filename, int flags)
} else {
iscsilun->num_blocks = rc10->lba + 1;
}
- break;
- default:
- break;
- }
+ }
I didn't write to *remove* the switch statement, I wrote to *move* it
into a new function and use it from iscsi_truncate.