aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe/ixgbe_fcoe.c
diff options
context:
space:
mode:
authorYi Zou <yi.zou@intel.com>2011-04-09 04:34:12 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2011-04-27 05:18:04 -0400
commit7aba7b077f638deb9569e0b36256cd9ae76e468c (patch)
tree285f2bdcd12c06e371fa24d03921afdf4263b424 /drivers/net/ixgbe/ixgbe_fcoe.c
parentb32c8dcc33a74fb4f1e73ed2263504f5947ca76b (diff)
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>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_fcoe.c')
-rw-r--r--drivers/net/ixgbe/ixgbe_fcoe.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/ixgbe/ixgbe_fcoe.c b/drivers/net/ixgbe/ixgbe_fcoe.c
index dba7d77588ef..05920726e824 100644
--- a/drivers/net/ixgbe/ixgbe_fcoe.c
+++ b/drivers/net/ixgbe/ixgbe_fcoe.c
@@ -416,8 +416,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
416 if (!ddp->udl) 416 if (!ddp->udl)
417 goto ddp_out; 417 goto ddp_out;
418 418
419 ddp->err = (fcerr | fceofe); 419 if (fcerr | fceofe)
420 if (ddp->err)
421 goto ddp_out; 420 goto ddp_out;
422 421
423 fcstat = (sterr & IXGBE_RXDADV_STAT_FCSTAT); 422 fcstat = (sterr & IXGBE_RXDADV_STAT_FCSTAT);
@@ -428,6 +427,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
428 if (fcstat == IXGBE_RXDADV_STAT_FCSTAT_FCPRSP) { 427 if (fcstat == IXGBE_RXDADV_STAT_FCSTAT_FCPRSP) {
429 pci_unmap_sg(adapter->pdev, ddp->sgl, 428 pci_unmap_sg(adapter->pdev, ddp->sgl,
430 ddp->sgc, DMA_FROM_DEVICE); 429 ddp->sgc, DMA_FROM_DEVICE);
430 ddp->err = (fcerr | fceofe);
431 ddp->sgl = NULL; 431 ddp->sgl = NULL;
432 ddp->sgc = 0; 432 ddp->sgc = 0;
433 } 433 }