From nobody Mon Jun 8 07:26:01 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15C3337F735 for ; Fri, 5 Jun 2026 22:45:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780699561; cv=none; b=exShG60ugntA7RIxp179v9L1n4T7/hdXyB56emJBLmg5qvBT07Zk6p9bi1sc7SGBhOY44kCOoZGAohaMpWWlnBJVdpk/0g/CVI3h9wW5e6KZDyiUdnUdXqGc14jYcNbeToO+K+ZdOZYn8KG0Y9gF7AWZvaHrxgX0XxmAI+Aap5I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780699561; c=relaxed/simple; bh=DSA/lhu9ZaTXbGt/Dy/7AnuFFkOEAsrvmPfCMetX+vc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=RpBjLk4/Tly/9FDftWH8U/talHTTl/glRpJxIRp4gYoZ4JrrjLkW2rWXMx2/Fil1dUnY82SYOMHPzNoZaYFvswgSISkWgiMJAcKy7C8jlR7VJcTo+lCvAXN0c2Nf2HT98PfhdJoWgudJNrK6d0DO75CIXmbw0TTdmcyBlKPANOY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=ceUAvQxO; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=W0yMXwmD; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ceUAvQxO"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="W0yMXwmD" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780699559; h=from:from: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; bh=dV6PAZLoEmUptgQeuUHBOKnlcyuL3OCus7UUkvZbeZI=; b=ceUAvQxOp5H18OlkY1J/6imhvCxHDEWhducMUPGv1KTs0MgeN5btqqGnXPvw9iLRjrWFAK Qx7ki3T8uG7TG4mKMo2B/mLfqWnFwwN737oq0xxvYWgtuMhOjM7u0ykMpw+KUtW78Q2TCa 5Y7lnmuwnriv28cntLDD5/d189BJ6so= Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-489-VhhqvO5NOLaQ_qaEmUliPw-1; Fri, 05 Jun 2026 18:45:57 -0400 X-MC-Unique: VhhqvO5NOLaQ_qaEmUliPw-1 X-Mimecast-MFC-AGG-ID: VhhqvO5NOLaQ_qaEmUliPw_1780699557 Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-8ced08f46b0so68601336d6.0 for ; Fri, 05 Jun 2026 15:45:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1780699557; x=1781304357; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=dV6PAZLoEmUptgQeuUHBOKnlcyuL3OCus7UUkvZbeZI=; b=W0yMXwmD9yupTejuuTvyxiN/bO3OyHrVmJJOsVfT3Zy6l2I61SmfriKxFMrRkZGl2Z sQnndPVvjYZjmBqLXyNNW0DlVvDdDOgfGW9dpf8aXGhEFLDC8RgOST5jV0OEe2u5/9Ko AkyIxZoX7fSynSFgxAs4v5M5R3RDdCWiTIeFt4vDyh3RIRPvM1LybrTRnmICpI7MIgtH 1w6NacfF5rQjx2HqX/O73qTbWfXsS+gmvpHaJoUJCiHbjo4p02Fe/NeKiMEiyiTDjP7W /XPUACi0hoL/qTV7Si7g3NP8iTCIb8iIiGKMW6cMaWpnSGXoGgEnyeV1KL9TSgxO65s9 L1PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780699557; x=1781304357; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=dV6PAZLoEmUptgQeuUHBOKnlcyuL3OCus7UUkvZbeZI=; b=os6Snu+yY//fICWqruKdGJVIDYOy4jwNf4dNyWWzjyJXhRAF7R/A+92pZD5E0yHC7l 54FimYg6QBY1qRJ+5hDdrgbwqjYtMHsYn4bCCD/V726V6LzDFYoG6RrhQuAGzWVtPZiq 7eO4K7YKAOawVEW1FBXAKd8RFHE+VBMq0RpTHlJFWvaN34DeOsH3hZb0Q1eAsvi0iB1q A0MaLwwFBafLeunsP7RcLc809RsAI1NRpGflvLRAUiUl2LgRzH8GKFATuUkUFwS3DLjV ZOZeNL4sqDEfpvsCFflbUE9NPdFUTJ5Qyp94C2rhm23t9jxkounLWcOuaQ71QNGz5E57 Flhw== X-Forwarded-Encrypted: i=1; AFNElJ9ZbidLE19LbOKgGKH3pmpfuvARWZhrD3golAFajoge0DZ/VHnnxCuX5+irlhSMtOPajzw2breHHzCceJY=@vger.kernel.org X-Gm-Message-State: AOJu0YzsbgC0UVsX+yVsosS8OAslkmCnZ7e4WVTDQ6E7bG62g9J30N8R Ye+KWoLKH2DrQSw8qsEdtEUOdSnnIIblaQUvBCtWTQcq0KxokgbbOlhAFZK3apNBiT/SjhqIm1P gu8DcYXGp1ZtAKaokwKya7mNuK7wUn6SAqfPTrNdG7jXZFIv87RQwVmbasnU4fBAMhw== X-Gm-Gg: Acq92OFB+OBDvHTgyWmFzcs3gwGmjbGEfQ+dkwLomrVTeYv4AOPwAJ2wTPanakZHVJ2 dGrdTVsE/I4cuudYye4QZhmi4x0uMXDuGWJypSmB6osZZpefReV58HonuPLqbO9hFnA3BTYXzAY sCZJGunvi76QZi7BL0V+pA42g2KXSOp5v6sYyQWYqMqzgBke/qYQ6u8pScSObmS+tu6HPGVnDIg vrp3a1Zvqnumg8J4qMTBWJ1KSvD2bBpQxw7IxSwR7ioja1oBWFKpyW9AnCogLkmBkulekJwsu7Q S67dMBrAipNua/GXyFn6vl01VCzGXarTCzpTbJ+dOZRAjSyGaCid8IISSsVUbQqxY+itefkBW5k KS23ZEF24cx7xHIBZuArk+DCNECjzdG2z9RE/XihbB0NszHoBTL1Lg7ytqa21/Axjk0qZggpTFt 8Z X-Received: by 2002:a05:6214:45a0:b0:8ce:ab75:9d69 with SMTP id 6a1803df08f44-8cee8c44538mr60333466d6.21.1780699556959; Fri, 05 Jun 2026 15:45:56 -0700 (PDT) X-Received: by 2002:a05:6214:45a0:b0:8ce:ab75:9d69 with SMTP id 6a1803df08f44-8cee8c44538mr60332996d6.21.1780699556434; Fri, 05 Jun 2026 15:45:56 -0700 (PDT) Received: from localhost (pool-100-17-21-205.bstnma.fios.verizon.net. [100.17.21.205]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-8cecd06f5eesm94985466d6.37.2026.06.05.15.45.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jun 2026 15:45:55 -0700 (PDT) From: Eric Chanudet Date: Fri, 05 Jun 2026 18:44:55 -0400 Subject: [PATCH] cgroup/dmem: accept only one region per limit write Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-cgroup-dmem-write-single-region-v1-1-9137f296579c@redhat.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/x2NzQqDMBAGX0X27EIUEkhfpXio5jNdqFE29QfEd zd4nMPMnJShgkyv6iTFJlnmVKCpKxq+nxTBEgpTa1pnnLE8RJ3XhcOEiXeVPzhLij+wIhaXfT8 a27vgvQ1UKotilOM5vLvrugFgY1X4cQAAAA== X-Change-ID: 20260605-cgroup-dmem-write-single-region-9bf05b6d995d To: Maarten Lankhorst , Maxime Ripard , Natalie Vock , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= Cc: cgroups@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.2 Accept only one "region value" pair entry for the dmem.max, dmem.min, dmem.low files. This changes the UAPI that otherwise accepted multiple lines for setting multiple entries in one write. No existing user is known to rely on writing multiple regions in a single write. Processing multiple regions in dmemcg_limit_write() could quietly change first limits before failing on a later one and returning an error to the writer, with no indication some changes occurred. Signed-off-by: Eric Chanudet Acked-by: Tejun Heo --- Follow up from discussions on a previous thread[1]. If Albert's series[2] lands, I can cleanup and prepare some kunits for these as well. [1] https://lore.kernel.org/all/158bc103-7f99-4df4-8d3b-2da9b04ac0ed@lankho= rst.se/ [2] https://lore.kernel.org/all/20260519-kunit_cgroups-v4-1-f6c2f498fae4@re= dhat.com/ --- kernel/cgroup/dmem.c | 70 +++++++++++++++++++-----------------------------= ---- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/kernel/cgroup/dmem.c b/kernel/cgroup/dmem.c index 6430c7ce1e0372f59f1313163fb7630ce49ac1ef..113ee88e276296bccb4def546ad= f5cc175d7f0be 100644 --- a/kernel/cgroup/dmem.c +++ b/kernel/cgroup/dmem.c @@ -734,57 +734,39 @@ static ssize_t dmemcg_limit_write(struct kernfs_open_= file *of, void (*apply)(struct dmem_cgroup_pool_state *, u64)) { struct dmemcg_state *dmemcs =3D css_to_dmemcs(of_css(of)); - int err =3D 0; - - while (buf && !err) { - struct dmem_cgroup_pool_state *pool =3D NULL; - char *options, *region_name; - struct dmem_cgroup_region *region; - u64 new_limit; - - options =3D buf; - buf =3D strchr(buf, '\n'); - if (buf) - *buf++ =3D '\0'; - - options =3D strstrip(options); - - /* eat empty lines */ - if (!options[0]) - continue; - - region_name =3D strsep(&options, " \t"); - if (!region_name[0]) - continue; - - if (!options || !*options) - return -EINVAL; + struct dmem_cgroup_pool_state *pool; + struct dmem_cgroup_region *region; + char *region_name; + u64 new_limit; + int err; =20 - rcu_read_lock(); - region =3D dmemcg_get_region_by_name(region_name); - rcu_read_unlock(); + buf =3D strstrip(buf); + region_name =3D strsep(&buf, " \t"); + if (!region_name[0] || !buf) + return -EINVAL; =20 - if (!region) - return -EINVAL; + rcu_read_lock(); + region =3D dmemcg_get_region_by_name(region_name); + rcu_read_unlock(); + if (!region) + return -EINVAL; =20 - err =3D dmemcg_parse_limit(options, &new_limit); - if (err < 0) - goto out_put; + buf =3D strstrip(buf); + err =3D dmemcg_parse_limit(buf, &new_limit); + if (err < 0) + goto out_put; =20 - pool =3D get_cg_pool_unlocked(dmemcs, region); - if (IS_ERR(pool)) { - err =3D PTR_ERR(pool); - goto out_put; - } + pool =3D get_cg_pool_unlocked(dmemcs, region); + if (IS_ERR(pool)) { + err =3D PTR_ERR(pool); + goto out_put; + } =20 - /* And commit */ - apply(pool, new_limit); - dmemcg_pool_put(pool); + apply(pool, new_limit); + dmemcg_pool_put(pool); =20 out_put: - kref_put(®ion->ref, dmemcg_free_region); - } - + kref_put(®ion->ref, dmemcg_free_region); =20 return err ?: nbytes; } --- base-commit: 640c57d6ca1346a1c2363a3f473b405af979e046 change-id: 20260605-cgroup-dmem-write-single-region-9bf05b6d995d Best regards, --=20 Eric Chanudet