diff options
author | Yi Zou <yi.zou@intel.com> | 2009-08-13 14:09:58 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-13 20:13:22 -0700 |
commit | 17e78b0655da20f2fc2bbde3b8252dac07c82914 (patch) | |
tree | f9952f1cce377713aa247269e0495a0d05f4fff2 /drivers/net/ixgbe/ixgbe_fcoe.c | |
parent | 232e7d68d50c9ac3a55d716e5ae215ecd1e043b9 (diff) | |
download | linux-stable-17e78b0655da20f2fc2bbde3b8252dac07c82914.tar.gz linux-stable-17e78b0655da20f2fc2bbde3b8252dac07c82914.tar.bz2 linux-stable-17e78b0655da20f2fc2bbde3b8252dac07c82914.zip |
ixgbe: Do not return 0 in ixgbe_fcoe_ddp() upon FCP_RSP in DDP completion
We return the ddp->len in ixgbe_fcoe_ddp() to indicate the length of data that
have been DDPed. However, it is possible that the length is 0, e.g., for SCSI
READ, the FCP_RSP may come back w/ SCSI status 0x28 as Task Set Full with no FCP
data for DDP. In ixgbe_fcoe_ddp(), we return 0 to indicate not passing DDPed
packets to upper layer. Therefore in the case of ddp->len being 0 upon FCP_RSP,
we do not want to return the 0 ddp->len as we want FCP_RSP to be always
delivered to the upper layer. This patch fixes this bug by setting rc only if
ddp->len is non-zero.
Signed-off-by: Yi Zou <yi.zou@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_fcoe.c')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_fcoe.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ixgbe/ixgbe_fcoe.c b/drivers/net/ixgbe/ixgbe_fcoe.c index fa9f24e23683..28cf104e36cc 100644 --- a/drivers/net/ixgbe/ixgbe_fcoe.c +++ b/drivers/net/ixgbe/ixgbe_fcoe.c @@ -336,7 +336,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter, /* return 0 to bypass going to ULD for DDPed data */ if (fcstat == IXGBE_RXDADV_STAT_FCSTAT_DDP) rc = 0; - else + else if (ddp->len) rc = ddp->len; } |