[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 5/6] ISCSI: Only call READCAPACITY16 for SBC devices
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 5/6] ISCSI: Only call READCAPACITY16 for SBC devices, use READCAPACITY10 for MMC |
Date: |
Tue, 29 May 2012 11:20:11 +0200 |
From: Ronnie Sahlberg <address@hidden>
Signed-off-by: Ronnie Sahlberg <address@hidden>
---
block/iscsi.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 59 insertions(+), 5 deletions(-)
diff --git a/block/iscsi.c b/block/iscsi.c
index 91cca83..472c853 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -510,6 +510,42 @@ iscsi_readcapacity16_cb(struct iscsi_context *iscsi, int
status,
}
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
iscsi_inquiry_cb(struct iscsi_context *iscsi, int status, void *command_data,
void *opaque)
{
@@ -537,13 +573,31 @@ iscsi_inquiry_cb(struct iscsi_context *iscsi, int status,
void *command_data,
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);
- if (task == NULL) {
- error_report("iSCSI: failed to send readcapacity16 command.");
- itask->status = 1;
+ if (task == NULL) {
+ error_report("iSCSI: failed to send readcapacity16 command.");
+ 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;
- return;
}
}
--
1.7.10.1
- [Qemu-devel] [PULL 0/6] updated SCSI changes for 1.1.0-rc4, Paolo Bonzini, 2012/05/29
- [Qemu-devel] [PATCH 2/6] ISCSI: redo how we set up the events, Paolo Bonzini, 2012/05/29
- [Qemu-devel] [PATCH 1/6] scsi: declare vmstate_info_scsi_requests to be static, Paolo Bonzini, 2012/05/29
- [Qemu-devel] [PATCH 3/6] ISCSI: change num_blocks to 64-bit, Paolo Bonzini, 2012/05/29
- [Qemu-devel] [PATCH 4/6] ISCSI: get device type at connection time, Paolo Bonzini, 2012/05/29
- [Qemu-devel] [PATCH 5/6] ISCSI: Only call READCAPACITY16 for SBC devices, use READCAPACITY10 for MMC,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 6/6] ISCSI: Switch to using READ16/WRITE16 for I/O to the LUN, Paolo Bonzini, 2012/05/29
- Re: [Qemu-devel] [PULL 0/6] updated SCSI changes for 1.1.0-rc4, Anthony Liguori, 2012/05/29