Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp569503iog; Mon, 13 Jun 2022 08:19:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJykA17KwwDdP9J8SmQSAj5cDBeEIehcdUN6KBUXzrD2tZEemlYwG2d7d0tw/fx13suOkCkd X-Received: by 2002:a17:907:da2:b0:711:f408:f098 with SMTP id go34-20020a1709070da200b00711f408f098mr347610ejc.208.1655133553221; Mon, 13 Jun 2022 08:19:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655133553; cv=none; d=google.com; s=arc-20160816; b=eSD/yNH6FJlqUbg83icY39pIq8LENSiXvEK41/ut+EyHkIeebCynIJr0Y55U34JN+e RVB+gaGJ+R1gU73cIt0CFcmEt59Kc8a1Ob3M84VJDyqDOcylnxiT+yr4MLCxg3F405CH 7t0XicwYnIiNmfk+VWtuxnKGxWuFHuWKzKN3GqC3EAuP6XQzAW0Yj1MWee40Dnfq47oq EPRtN2aEUThrZxuPn6KaGBG82LY+ljn+0Tqw50dXQnlj/StX6guHYxAkbbEWuW02Dtxo 0G8fC1u1kXsrxT+TZMKhZeJW/Txq9/2hwUwsIeW7Qs0yXq9LJaqNaEz90F6C1sbTYG6i 2plw== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=LGuY8gPc5r6cNS0YnK41Q0xEHu85sbt8G3P8IP3Cjxs=; b=WxL3TdLQaPkB3jhBcpZLnqZK1i+jQFXhdHGQN0BpvF9Zel68t6LLygv/GqY4HzwgDj dw22L+PbxE54hqKQWFFLVEVP6jDuT3Tj7OFTb7VZFV9dGpwmEs4xGy38fw7bN6XsdTiN aJCHbIPayhHrqB5+4cjAEaDMT8p/GrMby+BJTvdOq+ZLvRFiL6SHHEYGxUf6P/yF36Fu eGwmUdeCiNOWGSIoCuHYlD5nQRx7nVMyj3iiE51NSOHdX0WJtddBvgJmU6wwf9GW1Pf9 TKZ90Y/oPXmUYqAypL2SpdwKrDk/IqZgLknSQ73cvMehCFPgMJW6lqQuxs0PslPyjJj1 dnCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=aOgMXkLN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f22-20020a0564021e9600b0042be3591e27si9268200edf.509.2022.06.13.08.18.48; Mon, 13 Jun 2022 08:19:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=aOgMXkLN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352771AbiFMLUk (ORCPT + 99 others); Mon, 13 Jun 2022 07:20:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352674AbiFMLOL (ORCPT ); Mon, 13 Jun 2022 07:14:11 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 669D6369C5; Mon, 13 Jun 2022 03:36:43 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id A94BA60F9A; Mon, 13 Jun 2022 10:36:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id ADF7DC34114; Mon, 13 Jun 2022 10:36:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1655116602; bh=XVSoAvg7sdojQeSCxSirYiBES8HFf/XbwpEDw9qI3GA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aOgMXkLNRfsSfRYdjY/fL5jyGRnBB2JG5nuIQeXAYlx9JetQpw8dvesdpxawOL7ZK hJJSCsIZIfxbHJPFuFrIWjuIya5/Tcyx9cYuo0NsHJqmGwzccmTEbFwztxiLr1nU0h jgJQHffr9zLlsPBRGyJHIdtOGoW4dVKJ8bsFY5qA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Khazhismel Kumykov , Amir Goldstein , Jan Kara , Sasha Levin Subject: [PATCH 5.4 106/411] fsnotify: fix wrong lockdep annotations Date: Mon, 13 Jun 2022 12:06:19 +0200 Message-Id: <20220613094931.855046885@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220613094928.482772422@linuxfoundation.org> References: <20220613094928.482772422@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Amir Goldstein [ Upstream commit 623af4f538b5df9b416e1b82f720af7371b4c771 ] Commit 6960b0d909cd ("fsnotify: change locking order") changed some of the mark_mutex locks in direct reclaim path to use: mutex_lock_nested(&group->mark_mutex, SINGLE_DEPTH_NESTING); This change is explained: "...It uses nested locking to avoid deadlock in case we do the final iput() on an inode which still holds marks and thus would take the mutex again when calling fsnotify_inode_delete() in destroy_inode()." The problem is that the mutex_lock_nested() is not a nested lock at all. In fact, it has the opposite effect of preventing lockdep from warning about a very possible deadlock. Due to these wrong annotations, a deadlock that was introduced with nfsd filecache in kernel v5.4 went unnoticed in v5.4.y for over two years until it was reported recently by Khazhismel Kumykov, only to find out that the deadlock was already fixed in kernel v5.5. Fix the wrong lockdep annotations. Cc: Khazhismel Kumykov Fixes: 6960b0d909cd ("fsnotify: change locking order") Link: https://lore.kernel.org/r/20220321112310.vpr7oxro2xkz5llh@quack3.lan/ Link: https://lore.kernel.org/r/20220422120327.3459282-4-amir73il@gmail.com Signed-off-by: Amir Goldstein Signed-off-by: Jan Kara Signed-off-by: Sasha Levin --- fs/notify/mark.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/notify/mark.c b/fs/notify/mark.c index 1d96216dffd1..fdf8e03bf3df 100644 --- a/fs/notify/mark.c +++ b/fs/notify/mark.c @@ -426,7 +426,7 @@ void fsnotify_free_mark(struct fsnotify_mark *mark) void fsnotify_destroy_mark(struct fsnotify_mark *mark, struct fsnotify_group *group) { - mutex_lock_nested(&group->mark_mutex, SINGLE_DEPTH_NESTING); + mutex_lock(&group->mark_mutex); fsnotify_detach_mark(mark); mutex_unlock(&group->mark_mutex); fsnotify_free_mark(mark); @@ -738,7 +738,7 @@ void fsnotify_clear_marks_by_group(struct fsnotify_group *group, * move marks to free to to_free list in one go and then free marks in * to_free list one by one. */ - mutex_lock_nested(&group->mark_mutex, SINGLE_DEPTH_NESTING); + mutex_lock(&group->mark_mutex); list_for_each_entry_safe(mark, lmark, &group->marks_list, g_list) { if ((1U << mark->connector->type) & type_mask) list_move(&mark->g_list, &to_free); @@ -747,7 +747,7 @@ void fsnotify_clear_marks_by_group(struct fsnotify_group *group, clear: while (1) { - mutex_lock_nested(&group->mark_mutex, SINGLE_DEPTH_NESTING); + mutex_lock(&group->mark_mutex); if (list_empty(head)) { mutex_unlock(&group->mark_mutex); break; -- 2.35.1