mirror of https://github.com/xqemu/xqemu.git
Merge remote-tracking branch 'remotes/bonzini/scsi-next' into staging
* remotes/bonzini/scsi-next: iscsi: always query max WRITE SAME length iscsi: ignore flushes on scsi-generic devices iscsi: recognize "invalid field" ASCQ from WRITE SAME command scsi-bus: remove bogus assertion Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
784a5592c9
|
@ -417,6 +417,10 @@ static int coroutine_fn iscsi_co_flush(BlockDriverState *bs)
|
||||||
IscsiLun *iscsilun = bs->opaque;
|
IscsiLun *iscsilun = bs->opaque;
|
||||||
struct IscsiTask iTask;
|
struct IscsiTask iTask;
|
||||||
|
|
||||||
|
if (bs->sg) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
iscsi_co_init_iscsitask(iscsilun, &iTask);
|
iscsi_co_init_iscsitask(iscsilun, &iTask);
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
|
@ -838,7 +842,8 @@ retry:
|
||||||
|
|
||||||
if (iTask.status == SCSI_STATUS_CHECK_CONDITION &&
|
if (iTask.status == SCSI_STATUS_CHECK_CONDITION &&
|
||||||
iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
|
iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
|
||||||
iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE) {
|
(iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE ||
|
||||||
|
iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB)) {
|
||||||
/* WRITE SAME is not supported by the target */
|
/* WRITE SAME is not supported by the target */
|
||||||
iscsilun->has_write_same = false;
|
iscsilun->has_write_same = false;
|
||||||
scsi_free_scsi_task(iTask.task);
|
scsi_free_scsi_task(iTask.task);
|
||||||
|
@ -1330,18 +1335,20 @@ static int iscsi_refresh_limits(BlockDriverState *bs)
|
||||||
|
|
||||||
/* We don't actually refresh here, but just return data queried in
|
/* We don't actually refresh here, but just return data queried in
|
||||||
* iscsi_open(): iscsi targets don't change their limits. */
|
* iscsi_open(): iscsi targets don't change their limits. */
|
||||||
if (iscsilun->lbp.lbpu || iscsilun->lbp.lbpws) {
|
if (iscsilun->lbp.lbpu) {
|
||||||
if (iscsilun->bl.max_unmap < 0xffffffff) {
|
if (iscsilun->bl.max_unmap < 0xffffffff) {
|
||||||
bs->bl.max_discard = sector_lun2qemu(iscsilun->bl.max_unmap,
|
bs->bl.max_discard = sector_lun2qemu(iscsilun->bl.max_unmap,
|
||||||
iscsilun);
|
iscsilun);
|
||||||
}
|
}
|
||||||
bs->bl.discard_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran,
|
bs->bl.discard_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran,
|
||||||
iscsilun);
|
iscsilun);
|
||||||
|
}
|
||||||
|
|
||||||
if (iscsilun->bl.max_ws_len < 0xffffffff) {
|
if (iscsilun->bl.max_ws_len < 0xffffffff) {
|
||||||
bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len,
|
bs->bl.max_write_zeroes = sector_lun2qemu(iscsilun->bl.max_ws_len,
|
||||||
iscsilun);
|
iscsilun);
|
||||||
}
|
}
|
||||||
|
if (iscsilun->lbp.lbpws) {
|
||||||
bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran,
|
bs->bl.write_zeroes_alignment = sector_lun2qemu(iscsilun->bl.opt_unmap_gran,
|
||||||
iscsilun);
|
iscsilun);
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,6 @@ static void scsi_dma_restart_bh(void *opaque)
|
||||||
scsi_req_continue(req);
|
scsi_req_continue(req);
|
||||||
break;
|
break;
|
||||||
case SCSI_XFER_NONE:
|
case SCSI_XFER_NONE:
|
||||||
assert(!req->sg);
|
|
||||||
scsi_req_dequeue(req);
|
scsi_req_dequeue(req);
|
||||||
scsi_req_enqueue(req);
|
scsi_req_enqueue(req);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue