From nobody Sat Jun 27 16:10:11 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 04361246BC0 for ; Mon, 8 Jun 2026 15:54:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780934055; cv=none; b=KaYVzNwzW84fXwqP4Qqvg58Ll1mKA3wRumtFU96mHLDhfP/NTszhgBoN4ureMefTlRHQZHjnJZBYlxttWVXfYGZfMrjaesm9CEp31j0oCIUoUZhcGk58ywmSSc8esUivbOmYcgIRTmuKa3/XP7i9rLTOwWftUOtmWNgfcriLYY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780934055; c=relaxed/simple; bh=MM08eiNikXKRrk1jVyirSHPVfnUE2TsTPLR9YKWptZA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=OGSW4oNhyMcmUb1148yNIlxZbJm+OT1Ffoy0ugRVDPWdyZmjMVoNOpeJQFXNrdFx+RY/Tb2EQs8zdbLO4gPIe/ov1mnPlMyLvH+0opkDInvvzPoTaLktPpfUuhGgUnlXgFPi98CyCvIT7mBcelGlMeAEKxZK6oHR0xVI6lIsBg8= 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=RC/5HAy4; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=JpzgZUTU; arc=none smtp.client-ip=170.10.133.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="RC/5HAy4"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="JpzgZUTU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780934053; 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=5eWzdVvtwrg/9Udw9VbeX3BPtsMxiS3OGz6xe4/WajU=; b=RC/5HAy4zkux0YUbWz+g+pQJkf1YAjvdPZKfEiRBzKp99kiahdG5vS0geIkTsKYJ7zCLh4 0rHlHDiXdbov4Csqo5aJ2w20ZZZOSLgqE83Mh3NIBbidzxr12lheVFuXKwuqKfw9+hsbKG VVsQtldSwh7hWliPHz7Hgnqmq9Yn4P4= Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-576-gT2nE4dgOVKBryaYOn0MfA-1; Mon, 08 Jun 2026 11:54:11 -0400 X-MC-Unique: gT2nE4dgOVKBryaYOn0MfA-1 X-Mimecast-MFC-AGG-ID: gT2nE4dgOVKBryaYOn0MfA_1780934051 Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-9157c8eb597so638461985a.2 for ; Mon, 08 Jun 2026 08:54:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1780934051; x=1781538851; 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=5eWzdVvtwrg/9Udw9VbeX3BPtsMxiS3OGz6xe4/WajU=; b=JpzgZUTUGCSk0AhUcixaUx57RX+B9bp2XnM7ieqGolx9gmWgpzB/qgwuFrmtNtrGuq 2M9MAqlZSiRoyU2waIetaGTvgjl2POB40cRi/paUPQtk7F5Ljd94kcpg6/qIXTuja0ma b4Nd8XIpaoV1hF+FBev9YXB6bMiG2vUgsbCyFVc9Om/UigDWDP+hCRP4YI/ktd9lgaBb NtkxLDNXI4oYlmgb7LXlGOYbC8RXoF/MWHUxcCIZUo/Mf6ODbKEWdZ8VT6QTpS0PPDmp p7hiJS638aMBjz0YgbbmLB+vQecNeKp5Z4lKw9bh670cQGLvRUWV9CykWbPCHPeN+uWg X8rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780934051; x=1781538851; 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=5eWzdVvtwrg/9Udw9VbeX3BPtsMxiS3OGz6xe4/WajU=; b=rr7hi9O8fk0VEN4Bt8WtDoXroq/aISTKGcXZxVZEnL6qqzKX5dUBr9PrSmC2J+8qBp C1AtseOfWacCRp6dyGpdw0eBch3WD3dek4d5eOlBl+wOH9gNwtNf/UyhlO9Vh2KvAEKD fXdNA7vEjCzc9rtIhvkRXfuYhsK4Th4rgMk5Tb/A6lbcKvnzrULNDSdrShlPxbTg7NJz ymvbxlEXTDqqnzjAVbWDKRw4LWpwFX/TKH9vSXO39J9FR0xGG1RvUcrCcNTqs1xRoaOu w+jQzRG7unx/7f1k4EsVUe4cIV+SbmxfsehzoR95f5fiNTBWf04mpjNQwIwAM3NJbocX vXAw== X-Forwarded-Encrypted: i=1; AFNElJ9/XhtHmv5PB616FAirH1stSHveqam3OTEC8FSbHrG37o1wF88RaOfpjeCZULtxe5bGcL7qByZJOgPyqtA=@vger.kernel.org X-Gm-Message-State: AOJu0YxFvoZHuB1hChthsv03DpzSqn44Fia9Gr7+v5bmOnWFcDrPcnTr zuy3WsOZbhgq5PYlEuskGVhqdeN2ERfpiUMdE8AGpTbDQNEDWAhaopT0MMmTpyJvVxrJj4YlxE4 kyT2ZpGsDU1M41xxJBf6Zp9EZR++w9PBvCMDMQJlFACLERCe4saF8fVXieCBTjUn5Qg== X-Gm-Gg: Acq92OFVKLbrJ5t1xN0JhKGSqxwHmQYJcchAZNY0g1ni8ZgWVHkVn8v3OtjSPf0y0L6 ArE0XhTSqDFEXrx9v8rB+RvNiVmRGj2WTRL2qrw/uUjTD/BIIXLs1qaWQRAo3vKrloZYdttP8sd adt/VG8IfUc/derQSiuO2CfQ5ZuANG57bpJ69zYy6//9oLq+7XUwikfAltMEjBpmY3Yx2ystGCT iNxU8rBcG+ZuPrXI/afQxEezA8YcQ1VWmj4fR4CSlz8TGMMq1Ra6t4ISCKpTDYyZaH4tSv02cYw Hf2rRVzWWdzkEgG7t8cPyaKL9lIEjfYIbcam66FKbQAft3XOZicp/4piMFaiDTc11wFstk7yeLh K8jxc1UbHHz+Hm7WFhIw2i6c5wey7cvx32vsw8YIGg6F7raygGfMTk/eqg3zobBemMNx1Na65rM zi X-Received: by 2002:a05:620a:270d:b0:914:b518:577a with SMTP id af79cd13be357-915a9c741bemr2489282185a.21.1780934051035; Mon, 08 Jun 2026 08:54:11 -0700 (PDT) X-Received: by 2002:a05:620a:270d:b0:914:b518:577a with SMTP id af79cd13be357-915a9c741bemr2489275885a.21.1780934050376; Mon, 08 Jun 2026 08:54:10 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id af79cd13be357-9158a3bf5f9sm1802802485a.35.2026.06.08.08.54.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jun 2026 08:54:09 -0700 (PDT) From: Eric Chanudet Date: Mon, 08 Jun 2026 11:53:51 -0400 Subject: [PATCH v2] 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: <20260608-cgroup-dmem-write-single-region-v2-1-b0cd6c4ccf1b@redhat.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/42NQQ6CMBBFr0K6dkxb05K68h6GBbRDmUQomSJqC He3cgKX7yf/vU1kZMIsrtUmGFfKlKYC+lQJP7RTRKBQWGiprbTSgI+cnjOEEUd4MS0Imab4QGC M5Quu66XpbHDOBFEsM2NP76NwbwoPlJfEnyO4qt/6v3tVoMCpS91rZ03t/I0xDO1y9mkUzb7vX 8q1ufbPAAAA 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. Acked-by: Tejun Heo Signed-off-by: Eric Chanudet Reviewed-by: Maxime Ripard Reviewed-by: Natalie Vock Reviewed-by: Thadeu Lima de Souza Cascardo Tested-by: Thadeu Lima de Souza Cascardo --- 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/ --- Changes in v2: - Handle buf =3D=3D NULL by testing !buf first after strsep (Natalie) - Don't allow extra spaces to separate key and value (Natalie) Other cgroup files don't (rdma, misc), so stay consistent. - Link to v1: https://lore.kernel.org/r/20260605-cgroup-dmem-write-single-r= egion-v1-1-9137f296579c@redhat.com --- kernel/cgroup/dmem.c | 69 +++++++++++++++++++-----------------------------= ---- 1 file changed, 25 insertions(+), 44 deletions(-) diff --git a/kernel/cgroup/dmem.c b/kernel/cgroup/dmem.c index 6430c7ce1e0372f59f1313163fb7630ce49ac1ef..39930c59cb769a505a5852a5644= a371fd5596f59 100644 --- a/kernel/cgroup/dmem.c +++ b/kernel/cgroup/dmem.c @@ -734,57 +734,38 @@ 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 (!buf || !region_name[0]) + 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; + 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