Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 177709c0 authored by Lin Yi's avatar Lin Yi Committed by Martin K. Petersen
Browse files

scsi: bnx2fc: fix bnx2fc_cmd refcount imbalance in send_rec



If cb_arg alloc failed, we can't release the struct orig_io_req refcount
before we take its refcount. As Saurav said, move the rec_err label down
to avoid unnecessary refcount release and nullptr free.

Signed-off-by: default avatarLin Yi <teroincn@163.com>
Acked-by: default avatarSaurav Kashyap <skashyap@marvell.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 10b3ef22
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -610,7 +610,6 @@ int bnx2fc_send_rec(struct bnx2fc_cmd *orig_io_req)
	rc = bnx2fc_initiate_els(tgt, ELS_REC, &rec, sizeof(rec),
	rc = bnx2fc_initiate_els(tgt, ELS_REC, &rec, sizeof(rec),
				 bnx2fc_rec_compl, cb_arg,
				 bnx2fc_rec_compl, cb_arg,
				 r_a_tov);
				 r_a_tov);
rec_err:
	if (rc) {
	if (rc) {
		BNX2FC_IO_DBG(orig_io_req, "REC failed - release\n");
		BNX2FC_IO_DBG(orig_io_req, "REC failed - release\n");
		spin_lock_bh(&tgt->tgt_lock);
		spin_lock_bh(&tgt->tgt_lock);
@@ -618,6 +617,7 @@ int bnx2fc_send_rec(struct bnx2fc_cmd *orig_io_req)
		spin_unlock_bh(&tgt->tgt_lock);
		spin_unlock_bh(&tgt->tgt_lock);
		kfree(cb_arg);
		kfree(cb_arg);
	}
	}
rec_err:
	return rc;
	return rc;
}
}