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=-9.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham 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 A2567C43381 for ; Thu, 21 Mar 2019 11:27:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6995A218D8 for ; Thu, 21 Mar 2019 11:27:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553167667; bh=2mrgRSb2qvL6teprtf4L1Iq8A7MYeXZHV2IO83rclgY=; h=From:To:Cc:Subject:Date:List-ID:From; b=eXyhzG8IithlqRlPK7AHeaVXvR0CNTCA+yssrYp7D0LvafAF1nOB3fklEYTQqsZPN +usgqsa5TlxA6x8rOBIizB7+RJkzgSqJJSEUMbQhNE3KLgN7/BtNxwlapuWyHbhypW O+FwXJ7u8HrCt21oXO5FbfofAz0LjaypFya96dCY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727870AbfCUL1q (ORCPT ); Thu, 21 Mar 2019 07:27:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:60820 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727859AbfCUL1q (ORCPT ); Thu, 21 Mar 2019 07:27:46 -0400 Received: from tleilax.poochiereds.net (cpe-71-70-156-158.nc.res.rr.com [71.70.156.158]) (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 71FD7218E2; Thu, 21 Mar 2019 11:27:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553167666; bh=2mrgRSb2qvL6teprtf4L1Iq8A7MYeXZHV2IO83rclgY=; h=From:To:Cc:Subject:Date:From; b=HWTb5Jjo56V7tSzc9ukY8yGDhN2B+kyDYoACokcrf4v/tUWqgeE2bEgy5ZSQBNurL 464Rx1qnxXHpf9F/J7o74hLmsHPSMR6m7lv1XOYwi+waIsx3Q3UwFfefSoWHxL5tlw GiGcMLqYlsCA/d92LN/GhSWCsYML+UAe1hJYl3q0= From: Jeff Layton To: linux-fsdevel@vger.kernel.org Cc: neilb@suse.com, bfields@fieldses.org, asn@redhat.com Subject: [PATCH] locks: ignore same lock in blocked_lock_hash Date: Thu, 21 Mar 2019 07:27:44 -0400 Message-Id: <20190321112744.7832-1-jlayton@kernel.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Andreas reported that he was seeing the tdbtorture test fail in some cases with -EDEADLCK when it wasn't before. Some debugging showed that deadlock detection was sometimes discovering the caller's lock request itself in a dependency chain. If posix_locks_deadlock() fails to find a deadlock, the caller_fl will be passed to __locks_insert_block(), and this wakes up all locks that are blocked on caller_fl, clearing the fl_blocker link. So if posix_locks_deadlock() finds caller_fl while searching for a deadlock, it can be sure that link in the cycle is about to be broken and it need not treat it as the cause of a deadlock. More details here: https://bugzilla.kernel.org/show_bug.cgi?id=202975 Cc: stable@vger.kernel.org Fixes: 5946c4319ebb ("fs/locks: allow a lock request to block other requests.") Reported-by: Andreas Schneider Signed-off-by: Neil Brown Signed-off-by: Jeff Layton --- fs/locks.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/locks.c b/fs/locks.c index eaa1cfaf73b0..b074f6d7fd2d 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1023,6 +1023,10 @@ static int posix_locks_deadlock(struct file_lock *caller_fl, while ((block_fl = what_owner_is_waiting_for(block_fl))) { if (i++ > MAX_DEADLK_ITERATIONS) return 0; + + if (caller_fl == block_fl) + return 0; + if (posix_same_owner(caller_fl, block_fl)) return 1; } -- 2.20.1