From patchwork Wed Mar 12 07:56:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakie Kim X-Patchwork-Id: 14013065 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B8F1C28B28 for ; Wed, 12 Mar 2025 07:56:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A48D7280005; Wed, 12 Mar 2025 03:56:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9AB35280001; Wed, 12 Mar 2025 03:56:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7DAA1280005; Wed, 12 Mar 2025 03:56:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 60446280001 for ; Wed, 12 Mar 2025 03:56:47 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 876F6A92B5 for ; Wed, 12 Mar 2025 07:56:49 +0000 (UTC) X-FDA: 83212142538.23.04C5615 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id A0A05100003 for ; Wed, 12 Mar 2025 07:56:47 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741766208; a=rsa-sha256; cv=none; b=uYfspsN1X6SUh8eYq1DTPFyQxTBzf5pQqNrtR+7PWVdGdI4y21AAcKN9a1dK1t0fzXE4Kq miZqp65F+bdhiD9wtWQgMDoRgIVSvd/fReFOiwQGyuNnKOwVtGuiymvvy3Pmo1w5p30bQK GVF90tEb+tbM/VgOvGBkdWwm3kpSQAc= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741766208; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Hn0s9XMNnzdHinq6vgh+OHdzg0VXAF8PM1GiCV98GjA=; b=FPumuGBShB9i2FG0+BqXoyA0/ZroSc/QAeg7yQz0irvbpViW+i9Frn6lH0CZPo31i5TOUS m1d3w3TAUvrtUrploMucgm+x/YfhFyidKoO8jLwRM2YJ8tWd1g9eHYRf4rreCVvkbia2u4 4i6mq+DmxgHcnopa2gdrwMjpHUM5pY8= X-AuditID: a67dfc5b-669ff7000002311f-17-67d13e3b6a68 From: Rakie Kim To: gourry@gourry.net Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, joshua.hahnjy@gmail.com, dan.j.williams@intel.com, ying.huang@linux.alibaba.com, kernel_team@skhynix.com, honggyu.kim@sk.com, yunjeong.mun@sk.com, rakie.kim@sk.com Subject: [PATCH v2 4/4] mm/mempolicy: Fix duplicate node addition in sysfs for weighted interleave Date: Wed, 12 Mar 2025 16:56:27 +0900 Message-ID: <20250312075628.648-4-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250312075628.648-1-rakie.kim@sk.com> References: <20250312075628.648-1-rakie.kim@sk.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrLLMWRmVeSWpSXmKPExsXC9ZZnka613cV0g3+LBCzmrF/DZjF96gVG i593j7NbHN86j93i/KxTLBaXd81hs7i35j+rxeo1GQ4cHjtn3WX36G67zO6xeM9LJo9Nnyax e5yY8ZvFY+dDS4/Pm+QC2KO4bFJSczLLUov07RK4Mv6fmMdc8Fym4kPrDPYGxjfiXYycHBIC JhJtE66xwNjTHnYxdjFycLAJKEkc2xsDEhYREJWYd3Q2UAkXB7PAYiaJhYfXM4EkhAWSJHo/ P2cGsVkEVCUOPXrICGLzChhLXH47lxFipqZEw6V7YPWcQPNffL4GZgsB1SxfNx2qXlDi5Mwn YDcwC8hLNG+dzQyyTELgBJvEw4u7WSEGSUocXHGDZQIj/ywkPbOQ9CxgZFrFKJSZV5abmJlj opdRmZdZoZecn7uJERjIy2r/RO9g/HQh+BCjAAejEg+vQM6FdCHWxLLiytxDjBIczEoivKtt gUK8KYmVValF+fFFpTmpxYcYpTlYlMR5jb6VpwgJpCeWpGanphakFsFkmTg4pRoYixdz5s00 Wtp58klRe+3XNcfVMltvqO1XXG6xts7o8mLGfnfNt2+E3mu9iY4/bn3w5uQTzysqPrF8maJ7 9q9vrX5Zw8V/l9R1PXb4trfO9Lq9NuPxvYZ9hzaHMC9flLCzuEUy+s+nR/4fHzfU9sTO2Lh3 8pKwDwsrrs6JfbnSwM5d89imdG6NI0osxRmJhlrMRcWJAM+avFBgAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrOLMWRmVeSWpSXmKPExsXCNUNNS9fa7mK6wZXtHBZz1q9hs5g+9QKj xc+7x9ktPj97zWxxfOs8dovDc0+yWpyfdYrF4vKuOWwW99b8Z7U4dO05q8XqNRkWv7etYHPg 8dg56y67R3fbZXaPxXteMnls+jSJ3ePEjN8sHjsfWnp8u+3hsfjFByaPz5vkAjijuGxSUnMy y1KL9O0SuDL+n5jHXPBcpuJD6wz2BsY34l2MnBwSAiYS0x52MXYxcnCwCShJHNsbAxIWERCV mHd0NksXIxcHs8BiJomFh9czgSSEBZIkej8/ZwaxWQRUJQ49esgIYvMKGEtcfjuXEWKmpkTD pXtg9ZxA8198vgZmCwHVLF83HapeUOLkzCcsIDazgLxE89bZzBMYeWYhSc1CklrAyLSKUSQz ryw3MTPHVK84O6MyL7NCLzk/dxMjMHiX1f6ZuIPxy2X3Q4wCHIxKPLwHVC+kC7EmlhVX5h5i lOBgVhLhXW0LFOJNSaysSi3Kjy8qzUktPsQozcGiJM7rFZ6aICSQnliSmp2aWpBaBJNl4uCU amAsc6q5P0t43c7S+AsqSelhaa7nfkwNNe4plGMv2V0jq/jpBE/xpUfia5cqfpNPdC/4LXDu 5YJo9kDm3uRnV5Mz56dVP2nfvKq34o7VhdjrR26sNVDaXirHOnv7HN1stewuFv7yvQ+SPNcs 62A8Jbaj0rZiY8uLWTV3FvxbzXav1WCRXM3d5lolluKMREMt5qLiRACMy050WgIAAA== X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Queue-Id: A0A05100003 X-Rspamd-Server: rspam05 X-Stat-Signature: nd9wrjnbrtra51dagom6e5apb446g9k1 X-HE-Tag: 1741766207-489307 X-HE-Meta: U2FsdGVkX1+4QqVEjhpU9kOg6OyJiEc1SH81XmE+TUiAZcV8jKK1DcJ4nZmMSEabLz4C2fZV0gAdUJzAHIXvcitGFqVu7LGkGgd4cJVnj+4ycczoTJnQkGxFjSM/kmb08e3vkIQ25AoTDPg1sPXjx/zCp9cf04l20EtK7O3nfzAzRxHmkxTvgMGlluyuCs6Vmy9X5P+5b9F73FzPg0F2R7/s2hXAZhdpi13sxqXVIQyH2HxI9goO5meldp1FJTJaAz9190nAIp05WcHFsAeE99s5VtciM8BkNYTF7AzVvembc6rk5PKHs06nXjwVyGs/WneW3K/j5A87IOf8DoNB4VqvB0JcsDL9gleVHJNzZx+WVna75v2+e6qxgMWgi1d4rxu16B6qKIe2fYhLm76i2n0fAt3up+2f9DIv951pRtztd8ct666BIcVBXVQT9BFV9TPkZLD8JDSCXxM4eKqDQjTHVjsJCuZXoPYUCQ3BKpOcUVR7ezhCycIoEdeky6g0kaULxgObf1YDnAAJR8B75U3nREg27FN8yYz6IoYAVrpuTGN4hcTxtfEhlLLUc0lMYPp1AUtMlnS/8V6KUw7ov2LupqmYK2GNbu/NtLa/P8002V6ezeCQ1/sMr4oz5MQrLjhsn5YthOJnY75M78ZW8eXAo4WJWu8pQyQhI7JzCATwBoBrCKGVuLVEsErGV45npPFR99FiFyutYMEl3KDoAlpMD1X9B+lbgoyyt9EJtbC8pgqC3HiC5JaA6enYx8v45MIW1IkjOnQ4T2if9oKLH9piGvb+Hfael2aZYKCKDegXPuHKvlA6eFlDa6rQwFls89hIOiHcNFlAVQFZK+5y+Yk5n2hSchYGow8D2hu1I1vA2ZW2zwQ5ZKBvZm9RybP2+iNejkCKDbCPkO1EkNcUizwNOdsX6xVmCcUWroKaENmRlHQ/2pvfAErTcDGTS0drzwbC8IV6xtRbORsHldh Ij0ymHuH m84pvBeZpWjew1xfkbt7loXB7wnneSN2Q2LFt43oRy1Gqws7nCJGMFH7yQTZWz3za0hFdO6rM4g1+5q+NDRAupKNeCllI/85s7i/v X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Sysfs attributes for interleave control were registered both at initialization and when new nodes were detected via hotplug, leading to potential duplicates. This patch ensures that each node is registered only once, preventing conflicts and redundant sysfs entries. Signed-off-by: Rakie Kim --- mm/mempolicy.c | 66 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 71aff1276d4d..5f20521036ec 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -3391,6 +3391,7 @@ struct iw_node_attr { struct iw_node_group { struct kobject *wi_kobj; + struct mutex kobj_lock; struct iw_node_attr **nattrs; }; @@ -3440,12 +3441,17 @@ static ssize_t node_store(struct kobject *kobj, struct kobj_attribute *attr, static void sysfs_wi_node_release(int nid) { - if (!ngrp->nattrs[nid]) + mutex_lock(&ngrp->kobj_lock); + if (!ngrp->nattrs[nid]) { + mutex_unlock(&ngrp->kobj_lock); return; + } sysfs_remove_file(ngrp->wi_kobj, &ngrp->nattrs[nid]->kobj_attr.attr); kfree(ngrp->nattrs[nid]->kobj_attr.attr.name); kfree(ngrp->nattrs[nid]); + ngrp->nattrs[nid] = NULL; + mutex_unlock(&ngrp->kobj_lock); } static void sysfs_wi_release(struct kobject *wi_kobj) @@ -3464,35 +3470,54 @@ static const struct kobj_type wi_ktype = { static int sysfs_wi_node_add(int nid) { - struct iw_node_attr *node_attr; + int ret = 0; char *name; - node_attr = kzalloc(sizeof(*node_attr), GFP_KERNEL); - if (!node_attr) - return -ENOMEM; + if (nid < 0 || nid >= nr_node_ids) { + pr_err("Invalid node id: %d\n", nid); + ret = -EINVAL; + goto out; + } + + mutex_lock(&ngrp->kobj_lock); + if (!ngrp->nattrs[nid]) { + ngrp->nattrs[nid] = kzalloc(sizeof(struct iw_node_attr), GFP_KERNEL); + } else { + mutex_unlock(&ngrp->kobj_lock); + pr_info("Node [%d] is already existed\n", nid); + goto out; + } + mutex_unlock(&ngrp->kobj_lock); + + if (!ngrp->nattrs[nid]) { + ret = -ENOMEM; + goto out; + } name = kasprintf(GFP_KERNEL, "node%d", nid); if (!name) { - kfree(node_attr); - return -ENOMEM; + kfree(ngrp->nattrs[nid]); + ret = -ENOMEM; + goto out; } - sysfs_attr_init(&node_attr->kobj_attr.attr); - node_attr->kobj_attr.attr.name = name; - node_attr->kobj_attr.attr.mode = 0644; - node_attr->kobj_attr.show = node_show; - node_attr->kobj_attr.store = node_store; - node_attr->nid = nid; + sysfs_attr_init(&ngrp->nattrs[nid]->kobj_attr.attr); + ngrp->nattrs[nid]->kobj_attr.attr.name = name; + ngrp->nattrs[nid]->kobj_attr.attr.mode = 0644; + ngrp->nattrs[nid]->kobj_attr.show = node_show; + ngrp->nattrs[nid]->kobj_attr.store = node_store; + ngrp->nattrs[nid]->nid = nid; - if (sysfs_create_file(ngrp->wi_kobj, &node_attr->kobj_attr.attr)) { - kfree(node_attr->kobj_attr.attr.name); - kfree(node_attr); - pr_err("failed to add attribute to weighted_interleave\n"); - return -ENOMEM; + ret = sysfs_create_file(ngrp->wi_kobj, &ngrp->nattrs[nid]->kobj_attr.attr); + if (ret) { + kfree(ngrp->nattrs[nid]->kobj_attr.attr.name); + kfree(ngrp->nattrs[nid]); + pr_err("failed to add attribute to weighted_interleave: %d\n", ret); + goto out; } - ngrp->nattrs[nid] = node_attr; - return 0; +out: + return ret; } static int wi_node_notifier(struct notifier_block *nb, @@ -3588,6 +3613,7 @@ static int __init mempolicy_sysfs_init(void) err = -ENOMEM; goto err_out; } + mutex_init(&ngrp->kobj_lock); ngrp->nattrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), GFP_KERNEL);