From e074d20f9bce54f64dcb43eb2772fde4a4d68171 Mon Sep 17 00:00:00 2001 From: Jayamohan Kallickal Date: Sat, 28 Sep 2013 15:35:39 -0700 Subject: [PATCH] [SCSI] be2iscsi: Fix the MCCQ count leakage When MBX CMD is posted in MCCQ and if command times out,during mccq resource cleanup for the timed out command mccq->count was not decremented. The led to BUG_ON being hit. Signed-off-by: John Soni Jose Signed-off-by: Jayamohan Kallickal Signed-off-by: James Bottomley --- drivers/scsi/be2iscsi/be_cmds.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/be2iscsi/be_cmds.c b/drivers/scsi/be2iscsi/be_cmds.c index bb70dcb493c6..f7788e59c3f2 100644 --- a/drivers/scsi/be2iscsi/be_cmds.c +++ b/drivers/scsi/be2iscsi/be_cmds.c @@ -174,6 +174,10 @@ int beiscsi_mccq_compl(struct beiscsi_hba *phba, BEISCSI_LOG_CONFIG, "BC_%d : MBX Cmd Completion timed out\n"); rc = -EAGAIN; + + /* decrement the mccq used count */ + atomic_dec(&phba->ctrl.mcc_obj.q.used); + goto release_mcc_tag; } else rc = 0; @@ -699,7 +703,7 @@ struct be_mcc_wrb *wrb_from_mccq(struct beiscsi_hba *phba) struct be_queue_info *mccq = &phba->ctrl.mcc_obj.q; struct be_mcc_wrb *wrb; - BUG_ON(atomic_read(&mccq->used) >= mccq->len); + WARN_ON(atomic_read(&mccq->used) >= mccq->len); wrb = queue_head_node(mccq); memset(wrb, 0, sizeof(*wrb)); wrb->tag0 = (mccq->head & 0x000000FF) << 16;