Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp2007313rwn; Fri, 9 Sep 2022 07:19:10 -0700 (PDT) X-Google-Smtp-Source: AA6agR5muDO6dBcwR/mXykYJz4br+82hCt/CuwKH4gBam8NNmueevh5ZcVpUFu216rJzZFiEl7xZ X-Received: by 2002:ac2:4e66:0:b0:48c:e34c:69b4 with SMTP id y6-20020ac24e66000000b0048ce34c69b4mr4359215lfs.85.1662733150331; Fri, 09 Sep 2022 07:19:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662733150; cv=none; d=google.com; s=arc-20160816; b=vDTzIu6CcG8blVPVtADB9QqaCSS2Y7in8fG55Bbv56RI5inruSyyx6oLUSjClCjNw/ qqyxjdSzmrx+h4THNA+b397I7WFd9nL50mbIg1YCa2/WzI+/jHUgHUlmoBsvQvfIFxgb BHhUb8bsMgP9ucKRilniXB+XBUse/jIFct0a5uATxrFoIlWvgUmpxsapvZVJ0rTokb3y x8OOy4wKVwwhqqzvIvvcalPxRz7or2YseUjxMpnecotKNjN5MkhGMs+LGnxz6c3fYejb JaJMG2kVScfNriuPGS/Cjzu2JAm2+0wtDj2BwMXN9O6Os1FCGWYOLXxnG1K7OZbUoptl VVIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=gcWh1TCgrHt56LhGM5/FqvCB9ztWauERAJTs/QzpBcc=; b=C3cyETfT0ySUMFZNSh0ptRR2K8w6QN92g7cA9CTlWx5m0zgfLe8p41/z7lsjYW+cYL W83LsQMblZ6DGRArsH3Cdz8QYcgolO1+NcAxfpPOrFf5X33FITYoF12/Ru+J+j5MVcY5 0E+ux5FH/xF0PsrzwMYkbyh53Ofya1G0LliVC/CqTdqBjO9jJg75ky2Bj5LVC7q0+3Si Rjm7+CxEGWRqsEkYAvc049sLkD5pwHW2vFhSg57rfKfDhiQfLosP9rAqDE6QY/L71vH5 BtzP+GGpafSiF2/wC2ILk15DD4MAauf78VaOazSJVUzOphDGj/eQm1GSLxzpX2KGxwRh p/YA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b="YwoI0Y/4"; dkim=neutral (no key) header.i=@linutronix.de; 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=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z26-20020a2e351a000000b00269560eee5esi246948ljz.472.2022.09.09.07.18.27; Fri, 09 Sep 2022 07:19:10 -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=@linutronix.de header.s=2020 header.b="YwoI0Y/4"; dkim=neutral (no key) header.i=@linutronix.de; 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=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232239AbiIIOBm (ORCPT + 99 others); Fri, 9 Sep 2022 10:01:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231942AbiIIOAe (ORCPT ); Fri, 9 Sep 2022 10:00:34 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AC058895C6; Fri, 9 Sep 2022 07:00:31 -0700 (PDT) Date: Fri, 09 Sep 2022 14:00:28 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1662732029; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gcWh1TCgrHt56LhGM5/FqvCB9ztWauERAJTs/QzpBcc=; b=YwoI0Y/4CzLalDEi4qpQaKoUb1mOVGGPbQrfdUwfBy/OuP5VpWJv14i/wtSt3n2rRAxKQ3 QJGoWZcnv9SPjxB+polKjgOnFmkTZ3ORRCISl0m5sZqUW6Pmegp0XGWQIJE6Opb9w87gwK Lr6oqRUy0rLqTIfyU+7ubiGrm1ynyPJaqVseS1rxHsCwhipILClDE+HqJ4qmLMggO0x9ct KOijXhGHAFnagquBnE8nUkQmY4cMQlodVccGZumMBGWXaKc47bwKwlggzHGjwtJrAU5MNI j+EqM5k8NSF9JXYch5mIhBsXh2ZpS13wLL+EjYcwDEfn5Si7jnpYEC4jW18mRA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1662732029; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gcWh1TCgrHt56LhGM5/FqvCB9ztWauERAJTs/QzpBcc=; b=ARgeA3irjXUkC8yHlZLGMl6gIE7ruCiWL4P7e91DILDzGZmKL0Btyk4uaSq7miSFHKPXJ3 2MGgf772bCJEfOCA== From: "tip-bot2 for Tejun Heo" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: sched/psi] kernfs: Add KERNFS_REMOVING flags Cc: Chengming Zhou , Tejun Heo , "Greg Kroah-Hartman" , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20220828050440.734579-7-tj@kernel.org> References: <20220828050440.734579-7-tj@kernel.org> MIME-Version: 1.0 Message-ID: <166273202866.401.12020095971904286257.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,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 The following commit has been merged into the sched/psi branch of tip: Commit-ID: c25491747b21536bd56dccb82a109754bbc8d52c Gitweb: https://git.kernel.org/tip/c25491747b21536bd56dccb82a109754bbc8d52c Author: Tejun Heo AuthorDate: Sat, 27 Aug 2022 19:04:37 -10:00 Committer: Greg Kroah-Hartman CommitterDate: Thu, 01 Sep 2022 18:08:44 +02:00 kernfs: Add KERNFS_REMOVING flags KERNFS_ACTIVATED tracks whether a given node has ever been activated. As a node was only deactivated on removal, this was used for 1. Drain optimization (removed by the previous patch). 2. To hide !activated nodes 3. To avoid double activations 4. Reject adding children to a node being removed 5. Skip activaing a node which is being removed. We want to decouple deactivation from removal so that nodes can be deactivated and hidden dynamically, which makes KERNFS_ACTIVATED useless for all of the above purposes. #1 is already gone. #2 and #3 can instead test whether the node is currently active. A new flag KERNFS_REMOVING is added to explicitly mark nodes which are being removed for #4 and #5. While this leaves KERNFS_ACTIVATED with no users, leave it be as it will be used in a following patch. Cc: Chengming Zhou Tested-by: Chengming Zhou Reviewed-by: Chengming Zhou Signed-off-by: Tejun Heo Link: https://lore.kernel.org/r/20220828050440.734579-7-tj@kernel.org Signed-off-by: Greg Kroah-Hartman --- fs/kernfs/dir.c | 21 +++++++-------------- include/linux/kernfs.h | 1 + 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index b3d2018..f8cbd05 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c @@ -705,13 +705,7 @@ struct kernfs_node *kernfs_find_and_get_node_by_id(struct kernfs_root *root, goto err_unlock; } - /* - * ACTIVATED is protected with kernfs_mutex but it was clear when - * @kn was added to idr and we just wanna see it set. No need to - * grab kernfs_mutex. - */ - if (unlikely(!(kn->flags & KERNFS_ACTIVATED) || - !atomic_inc_not_zero(&kn->count))) + if (unlikely(!kernfs_active(kn) || !atomic_inc_not_zero(&kn->count))) goto err_unlock; spin_unlock(&kernfs_idr_lock); @@ -753,10 +747,7 @@ int kernfs_add_one(struct kernfs_node *kn) goto out_unlock; ret = -ENOENT; - if (parent->flags & KERNFS_EMPTY_DIR) - goto out_unlock; - - if ((parent->flags & KERNFS_ACTIVATED) && !kernfs_active(parent)) + if (parent->flags & (KERNFS_REMOVING | KERNFS_EMPTY_DIR)) goto out_unlock; kn->hash = kernfs_name_hash(kn->name, kn->ns); @@ -1336,7 +1327,7 @@ void kernfs_activate(struct kernfs_node *kn) pos = NULL; while ((pos = kernfs_next_descendant_post(pos, kn))) { - if (pos->flags & KERNFS_ACTIVATED) + if (kernfs_active(pos) || (pos->flags & KERNFS_REMOVING)) continue; WARN_ON_ONCE(pos->parent && RB_EMPTY_NODE(&pos->rb)); @@ -1368,11 +1359,13 @@ static void __kernfs_remove(struct kernfs_node *kn) pr_debug("kernfs %s: removing\n", kn->name); - /* prevent any new usage under @kn by deactivating all nodes */ + /* prevent new usage by marking all nodes removing and deactivating */ pos = NULL; - while ((pos = kernfs_next_descendant_post(pos, kn))) + while ((pos = kernfs_next_descendant_post(pos, kn))) { + pos->flags |= KERNFS_REMOVING; if (kernfs_active(pos)) atomic_add(KN_DEACTIVATED_BIAS, &pos->active); + } /* deactivate and unlink the subtree node-by-node */ do { diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h index 367044d..b77d257 100644 --- a/include/linux/kernfs.h +++ b/include/linux/kernfs.h @@ -112,6 +112,7 @@ enum kernfs_node_flag { KERNFS_SUICIDED = 0x0800, KERNFS_EMPTY_DIR = 0x1000, KERNFS_HAS_RELEASE = 0x2000, + KERNFS_REMOVING = 0x4000, }; /* @flags for kernfs_create_root() */