Skip to content

Commit

Permalink
be2net: Fix issues in error recovery due to wrong queue state
Browse files Browse the repository at this point in the history
During recovery from a FW error, destroy queue operation may fail.
Queue should be marked as destroyed so that recovery code can recreate
the queue. Also fix queue created state not getting checked at one instance.

Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Padmanabh Ratnakar authored and David S. Miller committed Oct 22, 2012
1 parent db15dfa commit aa790db
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions drivers/net/ethernet/emulex/benet/be_cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,9 @@ static struct be_mcc_wrb *wrb_from_mccq(struct be_adapter *adapter)
struct be_queue_info *mccq = &adapter->mcc_obj.q;
struct be_mcc_wrb *wrb;

if (!mccq->created)
return NULL;

if (atomic_read(&mccq->used) >= mccq->len) {
dev_err(&adapter->pdev->dev, "Out of MCCQ wrbs\n");
return NULL;
Expand Down Expand Up @@ -1235,8 +1238,7 @@ int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q,
req->id = cpu_to_le16(q->id);

status = be_mbox_notify_wait(adapter);
if (!status)
q->created = false;
q->created = false;

mutex_unlock(&adapter->mbox_lock);
return status;
Expand All @@ -1263,8 +1265,7 @@ int be_cmd_rxq_destroy(struct be_adapter *adapter, struct be_queue_info *q)
req->id = cpu_to_le16(q->id);

status = be_mcc_notify_wait(adapter);
if (!status)
q->created = false;
q->created = false;

err:
spin_unlock_bh(&adapter->mcc_lock);
Expand Down

0 comments on commit aa790db

Please sign in to comment.