scsi: fnic: Avoid false out-of-order detection for aborted command
If SCSI-ML has already issued abort on a command i.e FNIC_IOREQ_ABTS_PENDING is set and we get a IO completion, avoid this being flagged as out-of-order completion by setting the FNIC_IO_DONE flag in fnic_fcpio_icmnd_cmpl_handler Signed-off-by: Satish Kharat <satishkh@cisco.com> Signed-off-by: Sesidhar Baddela <sebaddel@cisco.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
7ef539c88d
Коммит
b9202b4ae8
|
@ -876,32 +876,28 @@ static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if SCSI-ML has already issued abort on this command,
|
* if SCSI-ML has already issued abort on this command,
|
||||||
* ignore completion of the IO. The abts path will clean it up
|
* set completion of the IO. The abts path will clean it up
|
||||||
*/
|
*/
|
||||||
if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) {
|
if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) {
|
||||||
spin_unlock_irqrestore(io_lock, flags);
|
|
||||||
|
/*
|
||||||
|
* set the FNIC_IO_DONE so that this doesn't get
|
||||||
|
* flagged as 'out of order' if it was not aborted
|
||||||
|
*/
|
||||||
|
CMD_FLAGS(sc) |= FNIC_IO_DONE;
|
||||||
CMD_FLAGS(sc) |= FNIC_IO_ABTS_PENDING;
|
CMD_FLAGS(sc) |= FNIC_IO_ABTS_PENDING;
|
||||||
switch (hdr_status) {
|
spin_unlock_irqrestore(io_lock, flags);
|
||||||
case FCPIO_SUCCESS:
|
if(FCPIO_ABORTED == hdr_status)
|
||||||
CMD_FLAGS(sc) |= FNIC_IO_DONE;
|
|
||||||
FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
|
|
||||||
"icmnd_cmpl ABTS pending hdr status = %s "
|
|
||||||
"sc 0x%p scsi_status %x residual %d\n",
|
|
||||||
fnic_fcpio_status_to_str(hdr_status), sc,
|
|
||||||
icmnd_cmpl->scsi_status,
|
|
||||||
icmnd_cmpl->residual);
|
|
||||||
break;
|
|
||||||
case FCPIO_ABORTED:
|
|
||||||
CMD_FLAGS(sc) |= FNIC_IO_ABORTED;
|
CMD_FLAGS(sc) |= FNIC_IO_ABORTED;
|
||||||
break;
|
|
||||||
default:
|
FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
|
||||||
FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
|
"icmnd_cmpl abts pending "
|
||||||
"icmnd_cmpl abts pending "
|
"hdr status = %s tag = 0x%x sc = 0x%p"
|
||||||
"hdr status = %s tag = 0x%x sc = 0x%p\n",
|
"scsi_status = %x residual = %d\n",
|
||||||
fnic_fcpio_status_to_str(hdr_status),
|
fnic_fcpio_status_to_str(hdr_status),
|
||||||
id, sc);
|
id, sc,
|
||||||
break;
|
icmnd_cmpl->scsi_status,
|
||||||
}
|
icmnd_cmpl->residual);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче