Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit efc7a288 authored by Anil Chintalapati (achintal)'s avatar Anil Chintalapati (achintal) Committed by Christoph Hellwig
Browse files

fnic: IOMMU Fault occurs when IO and abort IO is out of order



When I/O is aborted by mid-layer, fnic FW will complete the I/O before
completing the abort task. In some cases abort request is completed before
the I/O, which could lead to inconsistent driver and firmware states.
In this case firmware reset would clear the inconsistent state.

Signed-off-by: default avatarAnil Chintalapati <achintal@cisco.com>
Signed-off-by: default avatarSesidhar Baddela <sebaddel@cisco.com>
Signed-off-by: default avatarHiral Shah <hishah@cisco.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent e461338b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@

#define DRV_NAME		"fnic"
#define DRV_DESCRIPTION		"Cisco FCoE HBA Driver"
#define DRV_VERSION		"1.6.0.16"
#define DRV_VERSION		"1.6.0.17"
#define PFX			DRV_NAME ": "
#define DFX                     DRV_NAME "%d: "

+15 −0
Original line number Diff line number Diff line
@@ -1892,6 +1892,21 @@ int fnic_abort_cmd(struct scsi_cmnd *sc)
		goto fnic_abort_cmd_end;
	}

	/* IO out of order */

	if (!(CMD_FLAGS(sc) & (FNIC_IO_ABORTED | FNIC_IO_DONE))) {
		spin_unlock_irqrestore(io_lock, flags);
		FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
			"Issuing Host reset due to out of order IO\n");

		if (fnic_host_reset(sc) == FAILED) {
			FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
				"fnic_host_reset failed.\n");
		}
		ret = FAILED;
		goto fnic_abort_cmd_end;
	}

	CMD_STATE(sc) = FNIC_IOREQ_ABTS_COMPLETE;

	/*