From patchwork Fri Mar 7 06:35:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rakie Kim X-Patchwork-Id: 14006007 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 38A63C282D0 for ; Fri, 7 Mar 2025 06:35:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1B469280009; Fri, 7 Mar 2025 01:35:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 166CF280003; Fri, 7 Mar 2025 01:35:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 004AF280009; Fri, 7 Mar 2025 01:35:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id CCF45280003 for ; Fri, 7 Mar 2025 01:35:53 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id E26A9120506 for ; Fri, 7 Mar 2025 06:35:54 +0000 (UTC) X-FDA: 83193794628.14.4B66628 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf13.hostedemail.com (Postfix) with ESMTP id 045F120006 for ; Fri, 7 Mar 2025 06:35:52 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf13.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=1741329353; 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=ZFuBLCt8RoIVsDhdJbkXcp/xNnk4Gs41zitEidELpLs=; b=Q2ptbg5liKbb3fT+znZVKhTrUQT/RoyJKBghFLnxF7efCwcOXxFssovBHV1WwviFqKt5iD Rc8OeF9cv6dcXBQJn9Hl+jVyhRyGeZOQLFEDemh2hUbS3ytVcoTlLcaDVodKoVhmytuv1f 73I/s8RgPuMwkX2+PcDkMhNGjgO5Cmc= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf13.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=1741329353; a=rsa-sha256; cv=none; b=OMN+cLyx3i5QKGk6BknDmALwYFTHOffGDRuBoO4DEKtpJbufIDLqVMUf5EJu2HiVXJEmWz n+cvRgVR9f6PygdKi+mERhbOSrw9R4fUwnAH44n2aYmBvXD4baO2HqOhEwtWs1DULxvUKF TvgvbjszW7v08ct9O88fmxJOvcuM8wU= X-AuditID: a67dfc5b-3c9ff7000001d7ae-95-67ca93c79c08 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 3/4] mm/mempolicy: Fix duplicate node addition in sysfs for weighted interleave Date: Fri, 7 Mar 2025 15:35:32 +0900 Message-ID: <20250307063534.540-4-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250307063534.540-1-rakie.kim@sk.com> References: <20250307063534.540-1-rakie.kim@sk.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrDLMWRmVeSWpSXmKPExsXC9ZZnke7xyafSDZ7+NLCYs34Nm8X0qRcY LX7ePc5ucXzrPHaL87NOsVhc3jWHzeLemv+sFqvXZDhweOycdZfdo7vtMrvH4j0vmTw2fZrE 7nFixm8Wj50PLT0+b5ILYI/isklJzcksSy3St0vgylg/9QRTwQ2ZigVvjzI1MN4W72Lk5JAQ MJGYdXwhK4zd/O0mYxcjBwebgJLEsb0xIGERAVGJeUdns3QxcnEwCyxmklh4eD0TSEJYIF7i +ve1zCA2i4CqxP2rDewgNq+AscSEBZNYIGZqSjRcugdWzwk0//iqR2DzhYBq/u4qhSgXlDg5 8wlYObOAvETz1tnMILskBE6wSbS//cMMMUdS4uCKGywTGPlnIemZhaRnASPTKkahzLyy3MTM HBO9jMq8zAq95PzcTYzAMF5W+yd6B+OnC8GHGAU4GJV4eD2mnkwXYk0sK67MPcQowcGsJMIr uBkoxJuSWFmVWpQfX1Sak1p8iFGag0VJnNfoW3mKkEB6YklqdmpqQWoRTJaJg1OqgXG5Yr3O vOWy6ZuWlM+LtFVn6dJZLVh6fOmRXXG75ST8k/gEmOZUF52+YV35LTOk9bfs5hNlbNrFhgFr 51dqeq+YEVTyL5rv+lv5yVmtpo+bNzs/yj8j6ROvGeXqWVOzQOmt5nP+/7pF02NF5i9yWpdu eLPRcN48Jot3ESlp53vv+u14NUd6rRJLcUaioRZzUXEiAEYemsBfAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrGLMWRmVeSWpSXmKPExsXCNUNNS/f45FPpBqfWaFjMWb+GzWL61AuM Fj/vHme3+PzsNbPF8a3z2C0Ozz3JanF+1ikWi8u75rBZ3Fvzn9Xi0LXnrBar12RY/N62gs2B x2PnrLvsHt1tl9k9Fu95yeSx6dMkdo8TM36zeOx8aOnx7baHx+IXH5g8Pm+SC+CM4rJJSc3J LEst0rdL4MpYP/UEU8ENmYoFb48yNTDeFu9i5OSQEDCRaP52k7GLkYODTUBJ4tjeGJCwiICo xLyjs1m6GLk4mAUWM0ksPLyeCSQhLBAvcf37WmYQm0VAVeL+1QZ2EJtXwFhiwoJJLBAzNSUa Lt0Dq+cEmn981SOw+UJANX93lUKUC0qcnPkErJxZQF6ieets5gmMPLOQpGYhSS1gZFrFKJKZ V5abmJljqlecnVGZl1mhl5yfu4kRGLrLav9M3MH45bL7IUYBDkYlHl6PqSfThVgTy4orcw8x SnAwK4nwCm4GCvGmJFZWpRblxxeV5qQWH2KU5mBREuf1Ck9NEBJITyxJzU5NLUgtgskycXBK NTDatp25+lR98sMWZ+XFsSp8r38xvV7x1vX+lNjs+cXnzTxqy45fKp+mvfCeR26u44dFl7LC PrnP/3Eou8c17M9iNfYjB9vbltdpp0XE5+5z6VW/qZfaIX1410OWmfmS3c2neRl2+ou+ErAQ WXb7eGaBo4dV0ts58h57PdKmtUsIHGM7pr9la6kSS3FGoqEWc1FxIgAn+We5WQIAAA== X-CFilter-Loop: Reflected X-Stat-Signature: pfy9fkeiqwubdz5wahd6tx6c69qyrogu X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 045F120006 X-Rspam-User: X-HE-Tag: 1741329352-292628 X-HE-Meta: U2FsdGVkX18HhjowVweaFu+l8r16oojnUXkUyClpG4v0zf2w3dHhhuK7RqE+ah430o3UIQsviZIBygR+08LzuqaGTeOdnOd69APZ2PK0IK9T37g75Rbo+rFfF+jIMbMw6lldnko/gUztexLzLZKYmfhx/AK0QEG3noaKws7tsNHVO4+bg6yLx5u2muUNVfImFUbA9hUPqIgrx3FnyChhnd8lu14xmyVtUah+GD/999uqZtroG6WXCdHM6SnEyFR9K7bVVZETFhHtmHSdQ48jY7VKjpzpTWjtUO+0zIPm7T4Su5CBNsRL3ejgDr7pqH0JFESTOdkj6PE0psyyYDv9u/RxA+M8uP3tvTamJosy1d/xQpLSAvUvSIZTqrRKOmnYP9P6O0rxTzkyLhEHB0ds6XJLjPmar1NohRVtYx5qhFZ00KPGHzPda09A/Qq5SY2tONLTnUvj9orEQf1RSMBjiGH++j1ssy0yj/gYEZRAJcjvwwZl3m8Aov+vfKUcGwiPZGXyV71rRiwjcF0f1mWSdeYUAdIPVm8V3xGy6bDG3/3bwK6OunQyTxD/KO3kMLWvt1Sq6raZf7bgN9Fg3sC2XLbSui0ni58280ONp5Ev9n6qJbuw/HOzrLtXr7inoAtHts+bYz05J7o4PpVJY9dB+qaiiJv2TMsVlCR+6n9/MkXcLy60pLVcH9Fm/ha2n5MDMSEl2c54pejFMHB042iAZGYKRmNHaU3sYxyC3r768RN1EnRH6nXBJhwANwb7j6PH0E0VfEtC8wa/RGr0fif2aHNwk5lUoqlfljgyonkJIinFrY1rpYCT2NJhks96iGFidvbS04bg4PKuqROMgIYBgYgURrIjOTkMMd5VcpVruMar/w0FzGBq0XhvbYBJnKYuiAWS7nhu3gqONPNdNsU+g1DjmzPT+pDevyTl+LdH2PNgbM8FmfxN3zINx5+XXwgQHIpjjfHJ9rnSDja6+yD xNKI6U5M bvW2sO5RJHgtX8irCx2UeuAt3ZQmZCuzRdcjHsfqywRRMzJse+YIGCR9eC7CTvjcUjTn2VJCDjfvmk948wsmHNSWAm+TJeXzB3oHZ 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 | 65 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index fc10a9a4be86..2d19434c61ed 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; }; @@ -3441,11 +3442,15 @@ static ssize_t node_store(struct kobject *kobj, struct kobj_attribute *attr, static void sysfs_wi_node_release(struct iw_node_attr *node_attr, struct kobject *parent) { - if (!node_attr) + mutex_lock(&ngrp->kobj_lock); + if (!node_attr) { + mutex_unlock(&ngrp->kobj_lock); return; + } sysfs_remove_file(parent, &node_attr->kobj_attr.attr); kfree(node_attr->kobj_attr.attr.name); kfree(node_attr); + mutex_unlock(&ngrp->kobj_lock); } static void sysfs_wi_release(struct kobject *wi_kobj) @@ -3464,35 +3469,54 @@ static const struct kobj_type wi_ktype = { static int add_weight_node(int nid, struct kobject *wi_kobj) { - 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(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(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, @@ -3591,6 +3615,7 @@ static int __init mempolicy_sysfs_init(void) err = -ENOMEM; goto mempol_out; } + mutex_init(&ngrp->kobj_lock); ngrp->nattrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), GFP_KERNEL);