mirror of https://github.com/xemu-project/xemu.git
ISCSI: Only call READCAPACITY16 for SBC devices, use READCAPACITY10 for MMC
Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
parent
dbfff6d776
commit
6bcd1346bb
|
@ -509,6 +509,42 @@ iscsi_readcapacity16_cb(struct iscsi_context *iscsi, int status,
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
iscsi_readcapacity10_cb(struct iscsi_context *iscsi, int status,
|
||||||
|
void *command_data, void *opaque)
|
||||||
|
{
|
||||||
|
struct IscsiTask *itask = opaque;
|
||||||
|
struct scsi_readcapacity10 *rc10;
|
||||||
|
struct scsi_task *task = command_data;
|
||||||
|
|
||||||
|
if (status != 0) {
|
||||||
|
error_report("iSCSI: Failed to read capacity of iSCSI lun. %s",
|
||||||
|
iscsi_get_error(iscsi));
|
||||||
|
itask->status = 1;
|
||||||
|
itask->complete = 1;
|
||||||
|
scsi_free_scsi_task(task);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc10 = scsi_datain_unmarshall(task);
|
||||||
|
if (rc10 == NULL) {
|
||||||
|
error_report("iSCSI: Failed to unmarshall readcapacity10 data.");
|
||||||
|
itask->status = 1;
|
||||||
|
itask->complete = 1;
|
||||||
|
scsi_free_scsi_task(task);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
itask->iscsilun->block_size = rc10->block_size;
|
||||||
|
itask->iscsilun->num_blocks = rc10->lba + 1;
|
||||||
|
itask->bs->total_sectors = itask->iscsilun->num_blocks *
|
||||||
|
itask->iscsilun->block_size / BDRV_SECTOR_SIZE ;
|
||||||
|
|
||||||
|
itask->status = 0;
|
||||||
|
itask->complete = 1;
|
||||||
|
scsi_free_scsi_task(task);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
iscsi_inquiry_cb(struct iscsi_context *iscsi, int status, void *command_data,
|
iscsi_inquiry_cb(struct iscsi_context *iscsi, int status, void *command_data,
|
||||||
void *opaque)
|
void *opaque)
|
||||||
|
@ -537,13 +573,31 @@ iscsi_inquiry_cb(struct iscsi_context *iscsi, int status, void *command_data,
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
|
|
||||||
task = iscsi_readcapacity16_task(iscsi, itask->iscsilun->lun,
|
switch (itask->iscsilun->type) {
|
||||||
|
case TYPE_DISK:
|
||||||
|
task = iscsi_readcapacity16_task(iscsi, itask->iscsilun->lun,
|
||||||
iscsi_readcapacity16_cb, opaque);
|
iscsi_readcapacity16_cb, opaque);
|
||||||
if (task == NULL) {
|
if (task == NULL) {
|
||||||
error_report("iSCSI: failed to send readcapacity16 command.");
|
error_report("iSCSI: failed to send readcapacity16 command.");
|
||||||
itask->status = 1;
|
itask->status = 1;
|
||||||
|
itask->complete = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_ROM:
|
||||||
|
task = iscsi_readcapacity10_task(iscsi, itask->iscsilun->lun,
|
||||||
|
0, 0,
|
||||||
|
iscsi_readcapacity10_cb, opaque);
|
||||||
|
if (task == NULL) {
|
||||||
|
error_report("iSCSI: failed to send readcapacity16 command.");
|
||||||
|
itask->status = 1;
|
||||||
|
itask->complete = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
itask->status = 0;
|
||||||
itask->complete = 1;
|
itask->complete = 1;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue