cnic, bnx2i: Fix bug on some bnx2x devices that don't support iSCSI
PATCH 1/1 cnic, bnx2i: Fix bug on some bnx2x devices that don't support iSCSI
On some bnx2x devices, iSCSI is determined to be unsupported only after firmware is downloaded. We need to check max_iscsi_conn again after NETDEV_UP and block iSCSI init operations. Without this fix, iscsiadm can hang as the firmware will not respond to the iSCSI init message.
Signed-off-by Eddie Wai <[email protected]>
Signed-off-by Michael Chan <[email protected]>
--- drivers/net/ethernet/broadcom/cnic.c | 7 +++++++ drivers/scsi/bnx2i/bnx2i_init.c | 12 +++++------- 2 files changed, 12 insertions(+), 7 deletions(-)
drivers/net/ethernet/broadcom/cnic.c +7 -0
@@ -5276,6 +5276,13 @@ static int cnic_register_netdev(struct cnic_dev *dev)if (err)netdev_err (dev->netdev,"register_cnic failed\n" ); +/* Read iSCSI config again. On some bnx2x device, iSCSI config +* can change after firmware is downloaded. +*/ + dev->max_iscsi_conn = ethdev->max_iscsi_conn; +if (ethdev->drv_state &CNIC_DRV_STATE_NO_ISCSI ) + dev->max_iscsi_conn =0 ; +return err; }
drivers/scsi/bnx2i/bnx2i_init.c +5 -7
@@ -172,16 +172,14 @@ void bnx2i_start(void *handle)struct bnx2i_hba *hba = handle;int i =HZ ; -/* -* We should never register devices that don't support iSCSI -* (see bnx2i_init_one), so something is wrong if we try to -* start a iSCSI adapter on hardware with 0 supported iSCSI -* connections +/* On some bnx2x devices, it is possible that iSCSI is no +* longer supported after firmware is downloaded. In that +* case, the iscsi_init_msg will return failure. */ -BUG_ON (!hba->cnic->max_iscsi_conn);bnx2i_send_fw_iscsi_init_msg (hba); -while (!test_bit (ADAPTER_STATE_UP , &hba->adapter_state) && i--) +while (!test_bit (ADAPTER_STATE_UP , &hba->adapter_state) && + !test_bit (ADAPTER_STATE_INIT_FAILED , &hba->adapter_state) && i--)msleep (BNX2I_INIT_POLL_TIME ); }
Signature · 1 line
1.7.1
From: "Michael Chan" <[email protected]>
Date: Fri, 2 Aug 2013 11:28:23 -0700
Quoted 7 lines
On some bnx2x devices, iSCSI is determined to be unsupported only after firmware is downloaded. We need to check
max_iscsi_connagain afterNETDEV_UPand block iSCSI init operations. Without this fix, iscsiadm can hang as the firmware will not respond to the iSCSI init message.Signed-off-by Eddie Wai <[email protected]>Signed-off-by Michael Chan <[email protected]>
Applied, thanks.