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

Commit 7aba7b07 authored by Yi Zou's avatar Yi Zou Committed by Jeff Kirsher
Browse files

ixgbe: do not clear FCoE DDP error status for received ABTS



The ddp->err is initialized to be 1 to make sure outstanding DDP context is
guaranteed to be invalidated when HW is not auto-invalidating it. However,
in case of receiving ABTS response for a DDPed I/O, the ddp->err was cleared,
bypassing the invalidating of the DDP context from upper protocol stack when
ixgbe_fcoe_ddp_put() is called. This bug is fixed here by updating the error
only when FCP_RSP is received.

Signed-off-by: default avatarYi Zou <yi.zou@intel.com>
Tested-by: default avatarRoss Brattain <ross.b.brattain@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent b32c8dcc
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -416,8 +416,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
	if (!ddp->udl)
	if (!ddp->udl)
		goto ddp_out;
		goto ddp_out;


	ddp->err = (fcerr | fceofe);
	if (fcerr | fceofe)
	if (ddp->err)
		goto ddp_out;
		goto ddp_out;


	fcstat = (sterr & IXGBE_RXDADV_STAT_FCSTAT);
	fcstat = (sterr & IXGBE_RXDADV_STAT_FCSTAT);
@@ -428,6 +427,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
		if (fcstat == IXGBE_RXDADV_STAT_FCSTAT_FCPRSP) {
		if (fcstat == IXGBE_RXDADV_STAT_FCSTAT_FCPRSP) {
			pci_unmap_sg(adapter->pdev, ddp->sgl,
			pci_unmap_sg(adapter->pdev, ddp->sgl,
				     ddp->sgc, DMA_FROM_DEVICE);
				     ddp->sgc, DMA_FROM_DEVICE);
			ddp->err = (fcerr | fceofe);
			ddp->sgl = NULL;
			ddp->sgl = NULL;
			ddp->sgc = 0;
			ddp->sgc = 0;
		}
		}