Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6389imu; Sun, 4 Nov 2018 17:35:13 -0800 (PST) X-Google-Smtp-Source: AJdET5cUIHIYbf5fSyLdhf7vV7VqPDmb9qruPRwL+qTCgIjfgca8POjltRilRZKWtjPXgVUsoRc7 X-Received: by 2002:a63:1258:: with SMTP id 24mr7666006pgs.114.1541381713524; Sun, 04 Nov 2018 17:35:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541381713; cv=none; d=google.com; s=arc-20160816; b=NmIui6XcfXG+AN6A0rCpbn686Kx5xHA3oo6p7uaW4gU2wiK3UF/RjwdeU18Aqzg4zx ZEfZ9Bc866dLUSx+z58Uuzl3ksvTR/aozuaO68kTyv4CepkWK5Ba4qFysL9c/RHOrBGW Z8jKb0R2Epre0p6GEM/sGhLCTbuzTo4mIoR2GCrcNsuQRWKgZtOwxy4K3VHKHAEAv+D4 uqq9wAGSoVJ2XbyjCtME6Gn8JEQortMwh6xveK+UYMFWs27kvTxRFLEBkkJuPIX+3IB7 zlBH6YczWGVyjmLpcR5HZ66fgHK9cikw975gpAV1DyRij4L0vs26pFW5xR3wonrxslBI HnsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:cc:subject:date:to :from; bh=ObFJ02MVudOwbSe7X3qGPlI6ng5iNIG2canshSeKlbw=; b=Jv3cbOsGT7bsMqEhjaSM/G9QLZk0fM4J+EnFF+XoZB0C/cyzF8vt/3dG+QIg1uxuVT 8MNzty6JXicc9BYkji3xx4BkQe7J/L+GXxwbybCU2bLkdB/+UDNOShPrmi0mXjMWbClL wZWtJhv6e64ss/8fpk48SlgevZo2WchejYynuGNNbE5P2ndVAnEOXBVenn8wfb+ux3NZ yhiKkpt6lX/ls/2pDbzjme8PYwnVikvuRTz7p6W/fwe+SESFYUz29tOiItXbE2hSuh7M asO3KWjAMTUq+pwT1WiH01iDO/NnXM2ThFf8mFegPQ9V4O7HhkhY0Vwsb+wBio4u0u2B Yf9w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e11-v6si44274675pln.21.2018.11.04.17.34.58; Sun, 04 Nov 2018 17:35:13 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728791AbeKEKth (ORCPT + 99 others); Mon, 5 Nov 2018 05:49:37 -0500 Received: from mx2.suse.de ([195.135.220.15]:60806 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726494AbeKEKth (ORCPT ); Mon, 5 Nov 2018 05:49:37 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 68849AFD9; Mon, 5 Nov 2018 01:32:29 +0000 (UTC) From: NeilBrown To: Jeff Layton , Alexander Viro Date: Mon, 05 Nov 2018 12:30:47 +1100 Subject: [PATCH 08/12] fs/locks: always delete_block after waiting. Cc: "J. Bruce Fields" , Martin Wilck , linux-fsdevel@vger.kernel.org, Frank Filz , linux-kernel@vger.kernel.org Message-ID: <154138144790.31651.6227385768009570694.stgit@noble> In-Reply-To: <154138128401.31651.1381177427603557514.stgit@noble> References: <154138128401.31651.1381177427603557514.stgit@noble> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now that requests can block other requests, we need to be careful to always clean up those blocked requests. Any time that we wait for a request, we might have other requests attached, and when we stop waiting, we must clean them up. If the lock was granted, the requests might have been moved to the new lock, though when merged with a pre-exiting lock, this might not happen. In all cases we don't want blocked locks to remain attached, so we remove them to be safe. Signed-off-by: NeilBrown --- fs/locks.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/fs/locks.c b/fs/locks.c index 7a6df4f25b8b..a323160290f6 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1268,12 +1268,10 @@ static int posix_lock_inode_wait(struct inode *inode, struct file_lock *fl) if (error != FILE_LOCK_DEFERRED) break; error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker); - if (!error) - continue; - - locks_delete_block(fl); - break; + if (error) + break; } + locks_delete_block(fl); return error; } @@ -1962,12 +1960,10 @@ static int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl) if (error != FILE_LOCK_DEFERRED) break; error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker); - if (!error) - continue; - - locks_delete_block(fl); - break; + if (error) + break; } + locks_delete_block(fl); return error; } @@ -2241,12 +2237,10 @@ static int do_lock_file_wait(struct file *filp, unsigned int cmd, if (error != FILE_LOCK_DEFERRED) break; error = wait_event_interruptible(fl->fl_wait, !fl->fl_blocker); - if (!error) - continue; - - locks_delete_block(fl); - break; + if (error) + break; } + locks_delete_block(fl); return error; }