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: Yi Zou <yi.zou@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
Родитель
b32c8dcc33
Коммит
7aba7b077f
|
@ -416,8 +416,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
|
|||
if (!ddp->udl)
|
||||
goto ddp_out;
|
||||
|
||||
ddp->err = (fcerr | fceofe);
|
||||
if (ddp->err)
|
||||
if (fcerr | fceofe)
|
||||
goto ddp_out;
|
||||
|
||||
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) {
|
||||
pci_unmap_sg(adapter->pdev, ddp->sgl,
|
||||
ddp->sgc, DMA_FROM_DEVICE);
|
||||
ddp->err = (fcerr | fceofe);
|
||||
ddp->sgl = NULL;
|
||||
ddp->sgc = 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче