Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp3652226pxb; Mon, 9 Nov 2020 17:41:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJykHjq1rZwgFsUCs7AvDzKIzmVOF1Xp6Uq/qPwkmtEevOID8JvzePlG79UxJ/49AvFJr3K6 X-Received: by 2002:a17:906:2818:: with SMTP id r24mr18755130ejc.100.1604972508623; Mon, 09 Nov 2020 17:41:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604972508; cv=none; d=google.com; s=arc-20160816; b=tNSGQcjVLlY5uwLceNvoowZnBiPINWj7Z7cXs0lK+o3cpQxm4uWdnpc2AOdHwt+LyI hsh7x5WsBcADpZNWt5oQs7PSUZe+COj0wQCf3wG6TXllsCYaKye1/Csrv3bvnd25JX8X vUGQHQiQwQAFxhYrL0x5UGcyaCFIdHqwyboRRdAJR5j/3P2U+765UvV7vDb6tHzv8mfW Fu4jY5QL9dV80DQE+EEgxFuhU8qTB21gjzj7H1hgxERtJdrwkm3cMvqzjbSQbXA1PM97 X9rj8SVDa9XStEJEJIbpw5J8YOq84Wm7PDF0d1A/4W4ohQjKk1c+49nNr9T0SwZMA7vO BM2g== 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:cc:to:from:dkim-signature; bh=Wuf5qls7r8K2jneK0GG5xYx1Smw/3UiCzX+IOcpMh74=; b=Ul79ulOWIEGtOKjZdnY7nIDRvpf+DWgiEbt1a5T0bd1hgnYYl7fA3rRKjB9a48/mR8 xpoMlxz8196nYTbvhs7NUgC+qrLiL+M4KMUs9kWn82YK+Zug2wg3hDNB9PTfyY0v/2df BtqZJvDGeLzCm+P8oi8MewoSm2pV/DbZeDBsK0BlVLUaH2mdvY8NAa0idogNapL4csOV 6NI9/w0XYd34QS6PSUQa+hZBOxKbeL0AVy6VXFvozEGi9hz45ibT3vx6AKfoTK+eFakr 5GsljKWqhe+w7r2C9hc8Q+4PhsLospDBLdeqdADcX3IdBv398MIZ9LclheKPOc0o/drG OzUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jWbPvz4s; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p2si8634764edj.119.2020.11.09.17.41.25; Mon, 09 Nov 2020 17:41:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-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=@gmail.com header.s=20161025 header.b=jWbPvz4s; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730932AbgKJBiB (ORCPT + 99 others); Mon, 9 Nov 2020 20:38:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730042AbgKJBiA (ORCPT ); Mon, 9 Nov 2020 20:38:00 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 663B3C0613CF; Mon, 9 Nov 2020 17:38:00 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id 7so3165599qtp.1; Mon, 09 Nov 2020 17:38:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Wuf5qls7r8K2jneK0GG5xYx1Smw/3UiCzX+IOcpMh74=; b=jWbPvz4sU1Bh6jIeg+ksMoOFSommY9IoXLnJKWs1ts63jKGgGPtwHOR2oxgX6Qs5wJ qprc6ZXed7ihKTRLcW1ZwppwjTjVYLh3L0yJWiSWcQ5jCTswF3KXqx/6b/1QJKqjH0Qv CHJFupmHN2mqCa4V5oaS6U5pvM18YYpBr+XKoJxQzxLm/qxtiHYdw1yUnIaWSDxoPNYi gRDfScZ9OYFPiya7Oe1HQHVr5jj5Hb2/6UmyZvKWytVnH/NPJgsnpM4KUy4CDs/Q5oBP 72SoG8ZqCFWsrs8RLD+LzuxC+TvMebA1lyEFgDqoO5v+1JiGRgCZ1XHM+6JjjDUOUU4/ bcdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Wuf5qls7r8K2jneK0GG5xYx1Smw/3UiCzX+IOcpMh74=; b=fSbNB4eAl1IrZ1l6SGdUaXogmv7yXxeoa7JemqA5HLL1HouuPZs+Qt6miRbzkJ9FJ3 bT18CC6J+ITIDTZPBe0zRtqyvlIpo1gTe4tdgbsX0eNTq90jhSISravLK/MJKZ92fa+C sElNVDb4MBLFUDyZ//sDR73S7AUP+WWk3qqLm5LgEjKI7ActY3a3asN1yTdC4EH4GhXP N1h4psYjpV5uoTFlyogu60hwdyE/CaA3C5CihGirtw4fwtrmXN6cKK7reI6I///HOQb6 PySPYDZrBnPViMqoNLyHJpzA2g3aXjmIF9J8RDqyvnsT43yXeBA3GpOVaa7lB50OR0oo iGwg== X-Gm-Message-State: AOAM530XX0UbJcaQsHkPvFfUKfFxga0QCyXLQfgu6s1H9l99Zp2rCu1X dGKWQzkrZMhRp+DAhKKIMGz8PTjDXL0= X-Received: by 2002:ac8:6f05:: with SMTP id g5mr5265849qtv.97.1604972279625; Mon, 09 Nov 2020 17:37:59 -0800 (PST) Received: from auth1-smtp.messagingengine.com (auth1-smtp.messagingengine.com. [66.111.4.227]) by smtp.gmail.com with ESMTPSA id z1sm6923870qtz.46.2020.11.09.17.37.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 09 Nov 2020 17:37:58 -0800 (PST) Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailauth.nyi.internal (Postfix) with ESMTP id AA9C427C0054; Mon, 9 Nov 2020 20:37:57 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Mon, 09 Nov 2020 20:37:57 -0500 X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudduiedgfeekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffoggfgsedtkeertdertddtnecuhfhrohhmpeeuohhquhhnucfh vghnghcuoegsohhquhhnrdhfvghnghesghhmrghilhdrtghomheqnecuggftrfgrthhtvg hrnhepieeuveejleehudetfeevfeelgfejteefhedvkedukefggedugefhudfhteevjedu necuffhomhgrihhnpehkvghrnhgvlhdrohhrghenucfkphepudefuddruddtjedrudegje druddvieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhm pegsohhquhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqdeiledvgeehtd eigedqudejjeekheehhedvqdgsohhquhhnrdhfvghngheppehgmhgrihhlrdgtohhmsehf ihigmhgvrdhnrghmvg X-ME-Proxy: Received: from localhost (unknown [131.107.147.126]) by mail.messagingengine.com (Postfix) with ESMTPA id ED3113063081; Mon, 9 Nov 2020 20:37:55 -0500 (EST) From: Boqun Feng To: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Boqun Feng , Filipe Manana , Peter Zijlstra , Jan Kara , David Sterba , Nikolay Borisov , "Darrick J. Wong" , Alexander Viro , Ingo Molnar Subject: [RFC] fs: Avoid to use lockdep information if it's turned off Date: Tue, 10 Nov 2020 09:37:37 +0800 Message-Id: <20201110013739.686731-1-boqun.feng@gmail.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Filipe Manana reported a warning followed by task hanging after attempts to freeze a filesystem[1]. The problem happened in a LOCKDEP=y kernel, and percpu_rwsem_is_held() provided incorrect results when debug_locks == 0. Although the behavior is caused by commit 4d004099a668 ("lockdep: Fix lockdep recursion"): after that lock_is_held() and its friends always return true if debug_locks == 0. However, one could argue that querying the lock holding information regardless if the lockdep turn-off status is inappropriate in the first place. Therefore instead of reverting lock_is_held() and its friends to the previous semantics, add the explicit checking in fs code to avoid use the lock holding information if lockdpe is turned off. And since the original problem also happened with a silent lockdep turn-off, put a warning if debug_locks is 0, which will help us spot the silent lockdep turn-offs. [1]: https://lore.kernel.org/lkml/a5cf643b-842f-7a60-73c7-85d738a9276f@suse.com/ Reported-by: Filipe Manana Fixes: 4d004099a668 ("lockdep: Fix lockdep recursion") Signed-off-by: Boqun Feng Cc: Peter Zijlstra Cc: Jan Kara Cc: David Sterba Cc: Nikolay Borisov Cc: "Darrick J. Wong" --- Hi Filipe, I use the slightly different approach to fix this problem, and I think it should have the similar effect with my previous fix[2], except that you will hit a warning if the problem happens now. The warning is added on purpose because I don't want to miss a silent lockdep turn-off. Could you and other fs folks give this a try? Regards, Boqun [2]: https://lore.kernel.org/lkml/20201103140828.GA2713762@boqun-archlinux/ fs/super.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/fs/super.c b/fs/super.c index a51c2083cd6b..1803c8d999e9 100644 --- a/fs/super.c +++ b/fs/super.c @@ -1659,12 +1659,23 @@ int __sb_start_write(struct super_block *sb, int level, bool wait) * twice in some cases, which is OK only because we already hold a * freeze protection also on higher level. Due to these cases we have * to use wait == F (trylock mode) which must not fail. + * + * Note: lockdep can only prove correct information if debug_locks != 0 */ if (wait) { int i; for (i = 0; i < level - 1; i++) if (percpu_rwsem_is_held(sb->s_writers.rw_sem + i)) { + /* + * XXX: the WARN_ON_ONCE() here is to help + * track down silent lockdep turn-off, i.e. + * this warning is triggered, but no lockdep + * splat is reported. + */ + if (WARN_ON_ONCE(!debug_locks)) + break; + force_trylock = true; break; } -- 2.29.2