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.
Paolo