Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp4732534pxb; Tue, 5 Oct 2021 09:11:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJygqYe5Fm+WiUGqZZxk4763PuIDoyEw+kVO0bIGUUkmuM3KnsH+yAxSoid6Bza55VDO8brp X-Received: by 2002:a17:906:608e:: with SMTP id t14mr25331247ejj.441.1633450276714; Tue, 05 Oct 2021 09:11:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633450276; cv=none; d=google.com; s=arc-20160816; b=OPFhXlqMcjN3dMX1TYi2bjwf3Wf9OewgU6IsDjb1nTlHkN3SZEOS6iCKvM4rgkotE+ mQsdgt2T0Sf4urIl1GG5YN45S+wHNwpsr4yEIhm5B+JiYU0+faP01at7oQ1MoWMIiPn4 804gWZBAw7FgSHNaayIh9YFMG5f43QCdttD6Y+/qG8WgGXNDrkD+YRUdghWwbZZensoR NsZgNHCT4UObKH+kbIksG5X+HyQXO2cAIt/bh7y1aliHbAxj+HBj0QXDSXBEXIndidWA ZiLsTDvuFcQ9FrLeVaQniL+X0AR9xREj5Gi3FrY6aJMtmnvReS4TyQ8U8SGCUKph6d3j qQNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:to:from:dkim-signature; bh=846bLS9emvo5frscf8svDZ0WGNiKbNl8VHzqSsF4cmE=; b=iEDVfKRLLZDouey/cFp7Mf8PQDlJRo6O0zZkdkC+LgUrIlEekUn1qBwxj2jI4Zppoy VRBMV/jFXspkY0WNR+kgM0lkNFolo5WeD1Dv7YMZS0LmblvDKfNzHskkhgKszrRh2lLx aEQxmFXi2cylfzmpOZqQjuDMM5PcuSo6cq1a6Qkvauo4XdufrrWhGh+PAd0YqDQp3+pX whc+C41K21FqBNmfZxRmS27mmtB2OCSOcf8oMBw+94hcuoSgF2K7wFuLO7VhrgmtIGCS kmHmRbp3wY2R5z/qwcTjOgOpMRxFSDJA9muHniYEplcyA++d4rU2UHxaZQ/ori8iUMX/ cqkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=owi1PDiE; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lr22si14002075ejb.55.2021.10.05.09.10.49; Tue, 05 Oct 2021 09:11:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=owi1PDiE; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236285AbhJEQMg (ORCPT + 99 others); Tue, 5 Oct 2021 12:12:36 -0400 Received: from mail.kernel.org ([198.145.29.99]:53128 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236227AbhJEQMg (ORCPT ); Tue, 5 Oct 2021 12:12:36 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 13FF561354 for ; Tue, 5 Oct 2021 16:10:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1633450245; bh=zKwFiq2DF0F7CKkpZ3b8H7IyiJMIJZ3jWAMENIfe1z8=; h=From:To:Subject:Date:From; b=owi1PDiEgTykKhXK6mcprcy6CS6ulL/dwTmzYigWglZEhwPCPkf75GInmNKTtO8IN xIRVY/ortArZQYFNoH6lMXd8eAS8mHAeuftgHY+XS7gQ6DA6jVy4lfa/dnPbvyJHRV rItIzHyYI076/YenjVkmJaUiXRjoDkuj1U6iWwmgD4B+1sJw8BuIJ835i7byVx8QIK Rd7cEVoEqonQ9vZ0bvK9oMhxdS1QRAsxRv99Ukwgq7vio6aMrOwoH0bxQIyKwvKqA5 wOT+P6AhduU6KRcxtM8FjVrgMYTTqHnhD56yKCNlK8/cj3iOkKb43w8q8hU8+XlwG5 V6vF4kOgR1ynA== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 1/2] NFS: Fix deadlocks in nfs_scan_commit_list() Date: Tue, 5 Oct 2021 12:10:35 -0400 Message-Id: <20211005161036.1054428-1-trondmy@kernel.org> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust Partially revert commit 2ce209c42c01 ("NFS: Wait for requests that are locked on the commit list"), since it can lead to deadlocks between commit requests and nfs_join_page_group(). For now we should assume that any locked requests on the commit list are either about to be removed and committed by another task, or the writes they describe are about to be retransmitted. In either case, we should not need to worry. Fixes: 2ce209c42c01 ("NFS: Wait for requests that are locked on the commit list") Signed-off-by: Trond Myklebust --- fs/nfs/write.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/fs/nfs/write.c b/fs/nfs/write.c index b89d5ef3af0e..38f181e1343a 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -1039,25 +1039,11 @@ nfs_scan_commit_list(struct list_head *src, struct list_head *dst, struct nfs_page *req, *tmp; int ret = 0; -restart: list_for_each_entry_safe(req, tmp, src, wb_list) { kref_get(&req->wb_kref); if (!nfs_lock_request(req)) { - int status; - - /* Prevent deadlock with nfs_lock_and_join_requests */ - if (!list_empty(dst)) { - nfs_release_request(req); - continue; - } - /* Ensure we make progress to prevent livelock */ - mutex_unlock(&NFS_I(cinfo->inode)->commit_mutex); - status = nfs_wait_on_request(req); nfs_release_request(req); - mutex_lock(&NFS_I(cinfo->inode)->commit_mutex); - if (status < 0) - break; - goto restart; + continue; } nfs_request_remove_commit_list(req, cinfo); clear_bit(PG_COMMIT_TO_DS, &req->wb_flags); @@ -1952,6 +1938,7 @@ static int __nfs_commit_inode(struct inode *inode, int how, int may_wait = how & FLUSH_SYNC; int ret, nscan; + how &= ~FLUSH_SYNC; nfs_init_cinfo_from_inode(&cinfo, inode); nfs_commit_begin(cinfo.mds); for (;;) { -- 2.31.1