Am 22.10.2015 um 10:17 hat Fam Zheng geschrieben: > Previously we return -EIO blindly when anything goes wrong. Add a helper > function to parse sense fields and try to make the return code more > meaningful. > > Signed-off-by: Fam Zheng <f...@redhat.com> > --- > block/iscsi.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 55 insertions(+), 1 deletion(-) > > diff --git a/block/iscsi.c b/block/iscsi.c > index 93f1ee4..f3e20ae 100644 > --- a/block/iscsi.c > +++ b/block/iscsi.c > @@ -84,6 +84,7 @@ typedef struct IscsiTask { > IscsiLun *iscsilun; > QEMUTimer retry_timer; > bool force_next_flush; > + int err_code; > } IscsiTask; > > typedef struct IscsiAIOCB { > @@ -182,6 +183,58 @@ static inline unsigned exp_random(double mean) > #define QEMU_SCSI_STATUS_TIMEOUT SCSI_STATUS_TIMEOUT > #endif > > +static int iscsi_translate_sense(struct scsi_sense *sense) > +{ > + int ret = 0; > + > + switch (sense->key) { > + case SCSI_SENSE_NO_SENSE: > + return 0; > + break; > + case SCSI_SENSE_NOT_READY: > + return -EBUSY; > + break; > + case SCSI_SENSE_DATA_PROTECTION: > + return -EACCES; > + break; > + case SCSI_SENSE_COMMAND_ABORTED: > + return -ECANCELED; > + break; > + case SCSI_SENSE_ILLEGAL_REQUEST: > + /* Parse ASCQ */ > + break; > + default: > + return -EIO; > + break; > + }
break after return is dead code. Kevin