Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

IB/mthca: Fix error path in mthca_alloc_memfree()

The garbled logic in mthca_alloc_memfree() causes it to return 0, even
if it fails to allocate all doorbell records. Fix it to return -ENOMEM
when it fails.

Signed-off-by: Roland Dreier <rolandd@cisco.com>

+5 -5
+5 -5
drivers/infiniband/hw/mthca/mthca_qp.c
··· 1088 1088 static int mthca_alloc_memfree(struct mthca_dev *dev, 1089 1089 struct mthca_qp *qp) 1090 1090 { 1091 - int ret = 0; 1092 - 1093 1091 if (mthca_is_memfree(dev)) { 1094 1092 qp->rq.db_index = mthca_alloc_db(dev, MTHCA_DB_TYPE_RQ, 1095 1093 qp->qpn, &qp->rq.db); 1096 1094 if (qp->rq.db_index < 0) 1097 - return ret; 1095 + return -ENOMEM; 1098 1096 1099 1097 qp->sq.db_index = mthca_alloc_db(dev, MTHCA_DB_TYPE_SQ, 1100 1098 qp->qpn, &qp->sq.db); 1101 - if (qp->sq.db_index < 0) 1099 + if (qp->sq.db_index < 0) { 1102 1100 mthca_free_db(dev, MTHCA_DB_TYPE_RQ, qp->rq.db_index); 1101 + return -ENOMEM; 1102 + } 1103 1103 } 1104 1104 1105 - return ret; 1105 + return 0; 1106 1106 } 1107 1107 1108 1108 static void mthca_free_memfree(struct mthca_dev *dev,