From patchwork Tue Jan 24 03:55:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 9534021 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A0FDA60434 for ; Tue, 24 Jan 2017 03:55:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 90F10205AD for ; Tue, 24 Jan 2017 03:55:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8443F205F6; Tue, 24 Jan 2017 03:55:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1F94E205AD for ; Tue, 24 Jan 2017 03:55:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750718AbdAXDzi (ORCPT ); Mon, 23 Jan 2017 22:55:38 -0500 Received: from mail-it0-f67.google.com ([209.85.214.67]:34485 "EHLO mail-it0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750703AbdAXDzh (ORCPT ); Mon, 23 Jan 2017 22:55:37 -0500 Received: by mail-it0-f67.google.com with SMTP id o185so12571361itb.1 for ; Mon, 23 Jan 2017 19:55:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id; bh=GaLfCgQKMzmPghyk3HgdtiGSvicfP9LyaJkfUf89WzI=; b=Q0aQeCppTOuJTiC7AAajUDqT9XWZjAXVzlzBG3FqQIrYCSXm9Llp7orle5JB6RHH74 J3cSMP0gEtgFjGTgKanO+bK5aEtpLDaHV+np9uG6RyWSSTpAU2xhSxTALzspZAGI4foG O3sNKIHVlSiS4+prpAbzO2deF+retn1U81egkX89C8G6xYLQx8JfcdlL+FVunVjHWxBi 67kLQ3Qqj5jTWmqUJJqiZVhb5qzQMwnCgiA2tRIl5odNcFEtLi8tiYp/kxCI8d32R9oj IfLy9qanuJdc/q29zKWBU5JrXOFHdWzc/HrEPWbEwYAGrMOpn1Al/JloKPuBtiKZnAUQ zBOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id; bh=GaLfCgQKMzmPghyk3HgdtiGSvicfP9LyaJkfUf89WzI=; b=oqYMs+htDoZhvKcEPvaa2PWa32nXFVw0S/pKFmj1Kz262dPhdkdoXhBoeS+Ye6KYJ6 XxGkThUgW5/CfJnja8rGuz1yU7MXbGorWj7wimo9nijYFFL7hyuzXt4ZJrqif/wb8e5o HlxdtTXDYvMLfIBiPDkwVeb1BG0pTyFuhRM4NOWOdsKIVCpYwyKrg7ZeiO+WJwErjdJ8 wuXy4ABHDW9ZeDLeo7iDKHlk7pAez8LBMCQtG2FES4yI6WPcTVTCbtjRd1yNVxTLrdob ponCN737+LA3uGtlMA9gwE3kM3A60FbGxYcton/+4tClM7SsNe5HrKYRvwEC9zV5ewpY F3HA== X-Gm-Message-State: AIkVDXLMYwHRVmR0J3sqADsYNEx/umBdz7I2HGb8BJFA9TyipNbaJRRAra91y9MFEtJfVg== X-Received: by 10.36.82.22 with SMTP id d22mr18938097itb.0.1485230136802; Mon, 23 Jan 2017 19:55:36 -0800 (PST) Received: from localhost.localdomain (c-68-49-162-121.hsd1.mi.comcast.net. [68.49.162.121]) by smtp.gmail.com with ESMTPSA id j79sm7381478itb.0.2017.01.23.19.55.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Jan 2017 19:55:35 -0800 (PST) From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH] NFSv4.1: Fix a deadlock in layoutget Date: Mon, 23 Jan 2017 22:55:33 -0500 Message-Id: <20170124035533.11212-1-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.9.3 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP We cannot call nfs4_handle_exception() without first ensuring that the slot has been freed. If not, we end up deadlocking with the process waiting for recovery to complete, and recovery waiting for the slot table to drain. Fixes: 2e80dbe7ac51 ("NFSv4.1: Close callback races for OPEN, LAYOUTGET...") Cc: stable@vger.kernel.org # v4.8+ Signed-off-by: Trond Myklebust --- fs/nfs/nfs4proc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index ecc151697fd4..59bb574d7d7c 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -8490,6 +8490,7 @@ nfs4_layoutget_handle_exception(struct rpc_task *task, goto out; } + nfs4_sequence_free_slot(&lgp->res.seq_res); err = nfs4_handle_exception(server, nfs4err, exception); if (!status) { if (exception->retry)