iSCSI: We need to support SG_IO also from iscsi_ioctl()
We need to support SG_IO from the synchronous iscsi_ioctl() since scsi-block uses this to do an INQ to the device to discover its properties This patch makes scsi-block work with iscsi. Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
c26032b2c9
commit
f1a12821d7
|
@ -628,9 +628,17 @@ static BlockDriverAIOCB *iscsi_aio_ioctl(BlockDriverState *bs,
|
||||||
return &acb->common;
|
return &acb->common;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void ioctl_cb(void *opaque, int status)
|
||||||
|
{
|
||||||
|
int *p_status = opaque;
|
||||||
|
*p_status = status;
|
||||||
|
}
|
||||||
|
|
||||||
static int iscsi_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
|
static int iscsi_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
|
||||||
{
|
{
|
||||||
IscsiLun *iscsilun = bs->opaque;
|
IscsiLun *iscsilun = bs->opaque;
|
||||||
|
int status;
|
||||||
|
|
||||||
switch (req) {
|
switch (req) {
|
||||||
case SG_GET_VERSION_NUM:
|
case SG_GET_VERSION_NUM:
|
||||||
|
@ -639,6 +647,15 @@ static int iscsi_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
|
||||||
case SG_GET_SCSI_ID:
|
case SG_GET_SCSI_ID:
|
||||||
((struct sg_scsi_id *)buf)->scsi_type = iscsilun->type;
|
((struct sg_scsi_id *)buf)->scsi_type = iscsilun->type;
|
||||||
break;
|
break;
|
||||||
|
case SG_IO:
|
||||||
|
status = -EINPROGRESS;
|
||||||
|
iscsi_aio_ioctl(bs, req, buf, ioctl_cb, &status);
|
||||||
|
|
||||||
|
while (status == -EINPROGRESS) {
|
||||||
|
qemu_aio_wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue