From patchwork Tue Oct 31 18:47:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 160310 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b90f:0:b0:403:3b70:6f57 with SMTP id t15csp443551vqg; Tue, 31 Oct 2023 11:47:17 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHvElFMsvQvkb9bnnWLrSvYtTudK/v1eG0JQ1KbnljdWwKNxPqYx7I4Txu1IB1TOpq8tw7g X-Received: by 2002:a05:6a21:7983:b0:181:5f5:11a4 with SMTP id bh3-20020a056a21798300b0018105f511a4mr2297728pzc.36.1698778037453; Tue, 31 Oct 2023 11:47:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698778037; cv=none; d=google.com; s=arc-20160816; b=SUdp0+XCSQLEaG7weeujSU1CJR7uZfNqi7r70cEafLYxun3Zw3qh40F9s2EQQ1bcXN GkeVYtin6n8Tz/PvDySOfCJPWK4aLHPEitrEI91Oq/y08vV+klCvy6ZtaZyG7feVKVUo AgTjrJEjQ3oabnQh6eW7YRT+1aYeTQvqnZnA4MdGMU9bblBd5q+gq8KXu5mn6+HVODpH OTA4/okbCH4G2Xcaw62condk18TUusPHcCkkJrdH8eq8ogeAHdR+niyB8t08ImWfpHq+ WhOJjeLHhTtSb3jUczpW8qpmL5sZUSh8G22jkyy8OUbfuNvw6nNsvxsPUZNef4Ab4Twc z8mA== 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:subject:cc:to:from:date; bh=dP+XioRCXKD+H9yNjoo/u2B6kZmkCoQZqcr21PYVfiQ=; fh=wGJl00tUx4ntuM1Kupp7lU8lW/1h+k/aF9RVbfShnds=; b=VcQX5ZqWVT9NorCXVUrTiJxs9ZE1Ce9h91Xw7HmmNk5pmQAHPtpxltfgkFWtAHVfSb vMEYjvxgb2c0WsDzPG+yU2z6v0uuR+hpt7W4S8Gqa+JK5thw8MX6nqksWNhgT3BC33Vi tnXcoP11ngEbIBddVrpati5US0GqPfpM+YVIbaSzejBxPefhjGuJlmjfxCbm+AY9NHu+ 66gxpQd43rLEIn6EYJXhvjHxBwMz4xEF9RW86f7KBgUDm4/gS3A5vDnHfhLeTpVvL0m8 ukx+DzAOIcpzmJ0hw3KIeE6TOgSypXowRDw6M+Gj/JIkatDCB/YtFQHoerl+CugyZPIS GjCw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id e3-20020a170902e0c300b001b9c992945fsi1267605pla.555.2023.10.31.11.47.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Oct 2023 11:47:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 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 snail.vger.email (Postfix) with ESMTP id EA7A180EE0EC; Tue, 31 Oct 2023 11:47:15 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233231AbjJaSrN (ORCPT + 33 others); Tue, 31 Oct 2023 14:47:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231676AbjJaSrL (ORCPT ); Tue, 31 Oct 2023 14:47:11 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2DCCB8E for ; Tue, 31 Oct 2023 11:47:09 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2B737C433C7; Tue, 31 Oct 2023 18:47:08 +0000 (UTC) Date: Tue, 31 Oct 2023 14:47:03 -0400 From: Steven Rostedt To: LKML , Linux Trace Kernel Cc: Masami Hiramatsu , Mark Rutland , Ajay Kaher Subject: [PATCH] eventfs: Process deletion of dentry more thoroughly Message-ID: <20231031144703.71eef3a0@gandalf.local.home> X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 31 Oct 2023 11:47:16 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781297879555698897 X-GMAIL-MSGID: 1781297879555698897 From: "Steven Rostedt (Google)" Looking at how dentry is removed via the tracefs system, I found that eventfs does not do everything that it did under tracefs. The tracefs removal of a dentry calls simple_recursive_removal() that does a lot more than a simple d_invalidate(). Have the same done on eventfs dentry: 1. Set S_DEAD for directories 2. Call clear_nlink() on the dentry inode 3. Call any notifiers about the dentry removal Cc: stable@vger.kernel.org Fixes: 5bdcd5f5331a2 ("eventfs: Implement removal of meta data from eventfs") Signed-off-by: Steven Rostedt (Google) --- fs/tracefs/event_inode.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/fs/tracefs/event_inode.c b/fs/tracefs/event_inode.c index 4d2da7480e5f..ab807edaf538 100644 --- a/fs/tracefs/event_inode.c +++ b/fs/tracefs/event_inode.c @@ -856,6 +856,7 @@ static void unhook_dentry(struct dentry **dentry, struct dentry **list) *dentry = NULL; } } + /** * eventfs_remove_dir - remove eventfs dir or file from list * @ei: eventfs_inode to be removed. @@ -868,6 +869,7 @@ void eventfs_remove_dir(struct eventfs_inode *ei) LIST_HEAD(ei_del_list); struct dentry *dentry_list = NULL; struct dentry *dentry; + struct inode *inode; int i; if (!ei) @@ -891,7 +893,28 @@ void eventfs_remove_dir(struct eventfs_inode *ei) ptr = (unsigned long)dentry->d_fsdata & ~1UL; dentry_list = (struct dentry *)ptr; dentry->d_fsdata = NULL; + + inode = dentry->d_inode; + inode_lock(inode); + if (d_is_dir(dentry)) + inode->i_flags |= S_DEAD; + clear_nlink(inode); + inode_unlock(inode); + + inode = dentry->d_parent->d_inode; + inode_lock(inode); + + /* Remove its visibility */ d_invalidate(dentry); + if (d_is_dir(dentry)) + fsnotify_rmdir(inode, dentry); + else + fsnotify_unlink(inode, dentry); + + if (d_is_dir(dentry)) + drop_nlink(inode); + inode_unlock(inode); + mutex_lock(&eventfs_mutex); /* dentry should now have at least a single reference */ WARN_ONCE((int)d_count(dentry) < 1,