From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 66B8CC76186 for ; Wed, 24 Jul 2019 20:24:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1B60A21852 for ; Wed, 24 Jul 2019 20:24:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563999899; bh=sSCbBY9onOkZJNP/mDXIjY0gRF+zB9DFt+Wo8eVglXY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=wAkYXT10offD1fmsh7SrHMYZ+oAZncMHGSu/LVX3/VV40kmcVUNwMi9MUR3DQ0J8+ FlGhxIaxqAe5JHl5jR/okIcxVUCYUZ6bEaFY6nJuAYOqKf1rPoL+3SWZSV4ANw7CED jmYDB9h0IvhhP3iVyrQFbgH9aOlJ+qzl1p24S6OU= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389148AbfGXUYx (ORCPT ); Wed, 24 Jul 2019 16:24:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:41508 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389621AbfGXTkT (ORCPT ); Wed, 24 Jul 2019 15:40:19 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 90D4E214AF; Wed, 24 Jul 2019 19:40:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563997218; bh=sSCbBY9onOkZJNP/mDXIjY0gRF+zB9DFt+Wo8eVglXY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jqCQF3SYNjM7l5hIF1wPdbrFT6uOYSEr3cT5dBY5LokaOYbt81XfveFW3gXmQ63RJ Qyw0cir3jvAW+5rn1JL0qr0nOr3q+iSLCWHar2fc9EQMUIu16gxJtp3895qoPOmruc hckltKNWsZm/337/fzShTMDgLc9v0hNbo4NRnGLY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jason Gunthorpe , Leon Romanovsky , Doug Ledford Subject: [PATCH 5.2 362/413] RDMA/odp: Fix missed unlock in non-blocking invalidate_start Date: Wed, 24 Jul 2019 21:20:53 +0200 Message-Id: <20190724191801.425499375@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190724191735.096702571@linuxfoundation.org> References: <20190724191735.096702571@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Jason Gunthorpe commit 7608bf40cf2480057ec0da31456cc428791c32ef upstream. If invalidate_start returns with EAGAIN then the umem_rwsem needs to be unlocked as no invalidate_end will be called. Cc: Fixes: ca748c39ea3f ("RDMA/umem: Get rid of per_mm->notifier_count") Signed-off-by: Jason Gunthorpe Reviewed-by: Leon Romanovsky Signed-off-by: Doug Ledford Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/core/umem_odp.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) --- a/drivers/infiniband/core/umem_odp.c +++ b/drivers/infiniband/core/umem_odp.c @@ -151,6 +151,7 @@ static int ib_umem_notifier_invalidate_r { struct ib_ucontext_per_mm *per_mm = container_of(mn, struct ib_ucontext_per_mm, mn); + int rc; if (mmu_notifier_range_blockable(range)) down_read(&per_mm->umem_rwsem); @@ -167,11 +168,14 @@ static int ib_umem_notifier_invalidate_r return 0; } - return rbt_ib_umem_for_each_in_range(&per_mm->umem_tree, range->start, - range->end, - invalidate_range_start_trampoline, - mmu_notifier_range_blockable(range), - NULL); + rc = rbt_ib_umem_for_each_in_range(&per_mm->umem_tree, range->start, + range->end, + invalidate_range_start_trampoline, + mmu_notifier_range_blockable(range), + NULL); + if (rc) + up_read(&per_mm->umem_rwsem); + return rc; } static int invalidate_range_end_trampoline(struct ib_umem_odp *item, u64 start,