From patchwork Thu Nov 23 17:25:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 169063 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce62:0:b0:403:3b70:6f57 with SMTP id o2csp603775vqx; Thu, 23 Nov 2023 09:30:41 -0800 (PST) X-Google-Smtp-Source: AGHT+IH1CRkoZrW2Wl6r2NG10IVU5vjx+pnxl/n75Yf1iv0VruVYZHpvmN+0qJJYaBrOYk0W3ow5 X-Received: by 2002:a05:6808:494:b0:3b8:4614:8b27 with SMTP id z20-20020a056808049400b003b846148b27mr13656oid.50.1700760641280; Thu, 23 Nov 2023 09:30:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700760641; cv=none; d=google.com; s=arc-20160816; b=bgQ+7EFrMayx4qX/VMRwLH4YfhchrHx9QEbgnDxcK6p8jxBdhfCfFZxJWt5qlWilbk gih6nPMYu8BExHrrtFKcsDoOWcvYk5M8rOK2L0hY6+dK/9MSSoQV8+0hI+DOWZg0f1Vl j0AVT2jUCDHGATJni8WTnE7DETZJ+6hJwyga6KSwa1lag55yIj0fSJqu1Mmvl//TwCr6 ZC81voFi4LHORmTmuQQZlasbLKHyAOHCz3Sf2ZWIEyqRCoXEgoP2QJAQiB8bad4YfMbj HjTAqAlpBEkuu2uUYweuuh03Umv61rf/ew9WwUh/IaHbvOT82aZaJ5+0TY1xuiE6R/K3 k4ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=Rc83a4iOi5lSzIP31HQMJsqs+n4Ui2GRvQ+MXL+rwnI=; fh=mgEK3u4FNCVZrw2eK4ElottVljJzztdE8jidxZTIxyU=; b=EdWT7XFijeC1XsCTyd/hmNnjIo3IMuWCG8DHjlazqFf5/D6+DHb3ECkQiVHQFmB1WE H8lEhXWI3BH7nH9jn34Wz2JF7p0s10NJHV8EqPGtCJ43Ll60F1dnS0nDbyhUiZtaDf/V 5zQv2UUCYCFujpECTvIKVQvbScCvVasD5usnz45igzasKHzEmoWoHN1/DxGt0AUTm+G2 AG0rQ0w/HNuyHp2C0SVEHdp/3bgkTY1eRZg4XjduLyKWkBROu0v06enudxLRq9kK+js9 rRpCQg1EhY1e18GZvFdQllUWrRwRDf20qXox41bxz8vtlZU767m+eQYzLvI4x+f/HEY1 RUKA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id bp6-20020a056808238600b003b842e26108si656422oib.57.2023.11.23.09.30.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Nov 2023 09:30:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id F41408083A86; Thu, 23 Nov 2023 09:30:34 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345539AbjKWRaT (ORCPT + 99 others); Thu, 23 Nov 2023 12:30:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229929AbjKWRaL (ORCPT ); Thu, 23 Nov 2023 12:30:11 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E1651BE for ; Thu, 23 Nov 2023 09:30:17 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4202FC433CC; Thu, 23 Nov 2023 17:30:17 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97-RC3) (envelope-from ) id 1r6DX8-0000000366d-3kxu; Thu, 23 Nov 2023 12:30:34 -0500 Message-ID: <20231123173034.759631168@goodmis.org> User-Agent: quilt/0.67 Date: Thu, 23 Nov 2023 12:25:41 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Josef Bacik Subject: [for-linus][PATCH 2/5] eventfs: Move taking of inode_lock into dcache_dir_open_wrapper() References: <20231123172539.582640797@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Thu, 23 Nov 2023 09:30:35 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783376790010664074 X-GMAIL-MSGID: 1783376790010664074 From: "Steven Rostedt (Google)" The both create_file_dentry() and create_dir_dentry() takes a boolean parameter "lookup", as on lookup the inode_lock should already be taken, but for dcache_dir_open_wrapper() it is not taken. There's no reason that the dcache_dir_open_wrapper() can't take the inode_lock before calling these functions. In fact, it's better if it does, as the lock can be held throughout both directory and file creations. This also simplifies the code, and possibly prevents unexpected race conditions when the lock is released. Link: https://lkml.kernel.org/r/20231121231112.528544825@goodmis.org Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Andrew Morton Fixes: 5790b1fb3d672 ("eventfs: Remove eventfs_file and just use eventfs_inode") Reviewed-by: Josef Bacik Signed-off-by: Steven Rostedt (Google) --- fs/tracefs/event_inode.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/fs/tracefs/event_inode.c b/fs/tracefs/event_inode.c index 56d192f0ead8..590e8176449b 100644 --- a/fs/tracefs/event_inode.c +++ b/fs/tracefs/event_inode.c @@ -347,15 +347,8 @@ create_file_dentry(struct eventfs_inode *ei, int idx, mutex_unlock(&eventfs_mutex); - /* The lookup already has the parent->d_inode locked */ - if (!lookup) - inode_lock(parent->d_inode); - dentry = create_file(name, mode, attr, parent, data, fops); - if (!lookup) - inode_unlock(parent->d_inode); - mutex_lock(&eventfs_mutex); if (IS_ERR_OR_NULL(dentry)) { @@ -453,15 +446,8 @@ create_dir_dentry(struct eventfs_inode *pei, struct eventfs_inode *ei, } mutex_unlock(&eventfs_mutex); - /* The lookup already has the parent->d_inode locked */ - if (!lookup) - inode_lock(parent->d_inode); - dentry = create_dir(ei, parent); - if (!lookup) - inode_unlock(parent->d_inode); - mutex_lock(&eventfs_mutex); if (IS_ERR_OR_NULL(dentry) && !ei->is_freed) { @@ -693,6 +679,7 @@ static int dcache_dir_open_wrapper(struct inode *inode, struct file *file) return -ENOMEM; } + inode_lock(parent->d_inode); list_for_each_entry_srcu(ei_child, &ei->children, list, srcu_read_lock_held(&eventfs_srcu)) { d = create_dir_dentry(ei, ei_child, parent, false); @@ -725,6 +712,7 @@ static int dcache_dir_open_wrapper(struct inode *inode, struct file *file) cnt++; } } + inode_unlock(parent->d_inode); srcu_read_unlock(&eventfs_srcu, idx); ret = dcache_dir_open(inode, file);