Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752394AbYHLMuc (ORCPT ); Tue, 12 Aug 2008 08:50:32 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752382AbYHLMt4 (ORCPT ); Tue, 12 Aug 2008 08:49:56 -0400 Received: from mtagate3.de.ibm.com ([195.212.29.152]:63156 "EHLO mtagate3.de.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752154AbYHLMtz (ORCPT ); Tue, 12 Aug 2008 08:49:55 -0400 Date: Tue, 12 Aug 2008 14:49:46 +0200 From: Alexander Schmidt To: linuxppc-dev , lkml , of-ewg , of-general , Roland Dreier Cc: Christoph Raisch , Hoang-Nam Nguyen , Joachim Fenkes , Stefan Roscher Subject: [PATCH 4/5] ib/ehca: check idr_find() return value Message-ID: <20080812144946.5e2499f8@BL3D1974.boeblingen.de.ibm.com> In-Reply-To: <20080812143542.0cbde755@BL3D1974.boeblingen.de.ibm.com> References: <20080812143542.0cbde755@BL3D1974.boeblingen.de.ibm.com> X-Mailer: Claws Mail 3.5.0 (GTK+ 2.12.11; i386-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1149 Lines: 30 The idr_find() function may fail when trying to get the QP that is associated with a CQE, e.g. when a QP has been destroyed between the generation of a CQE and the poll request for it. In consequence, the return value of idr_find() must be checked and the CQE must be discarded when the QP cannot be found. Signed-off-by: Alexander Schmidt --- drivers/infiniband/hw/ehca/ehca_reqs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- infiniband.git.orig/drivers/infiniband/hw/ehca/ehca_reqs.c +++ infiniband.git/drivers/infiniband/hw/ehca/ehca_reqs.c @@ -680,8 +680,10 @@ repoll: read_lock(&ehca_qp_idr_lock); my_qp = idr_find(&ehca_qp_idr, cqe->qp_token); - wc->qp = &my_qp->ib_qp; read_unlock(&ehca_qp_idr_lock); + if (!my_qp) + goto repoll; + wc->qp = &my_qp->ib_qp; wc->byte_len = cqe->nr_bytes_transferred; wc->pkey_index = cqe->pkey_index; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/