From mboxrd@z Thu Jan 1 00:00:00 1970 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 17BFFE77197 for ; Wed, 8 Jan 2025 01:23:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A0F5A6B0088; Tue, 7 Jan 2025 20:23:04 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9BF786B009C; Tue, 7 Jan 2025 20:23:04 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 860776B009D; Tue, 7 Jan 2025 20:23:04 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 681EA6B0088 for ; Tue, 7 Jan 2025 20:23:04 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 2791180525 for ; Wed, 8 Jan 2025 01:23:04 +0000 (UTC) X-FDA: 82982535888.06.32D6FF6 Received: from fhigh-a1-smtp.messagingengine.com (fhigh-a1-smtp.messagingengine.com [103.168.172.152]) by imf15.hostedemail.com (Postfix) with ESMTP id 24A66A000C for ; Wed, 8 Jan 2025 01:23:02 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=devkernel.io header.s=fm3 header.b=LZl3c0Y4; dkim=pass header.d=messagingengine.com header.s=fm2 header.b=qL0mhawL; dmarc=none; spf=pass (imf15.hostedemail.com: domain of shr@devkernel.io designates 103.168.172.152 as permitted sender) smtp.mailfrom=shr@devkernel.io ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736299382; a=rsa-sha256; cv=none; b=TDlB2YNDzrrXWwwPg6w8XwDkBwFlXfS+0ktRYVCkmzVAEGrkeZedvKSvLDqYDWXSaczs6b GGe6dgdseXAZy/l0YSSieeYr1aYrORq9Mr8/R8aCYJtJT4/KqMUwDa55VpGTv0ZdLKnYST Tk/IRfmje5GSncSxo4ipxhRf0FWHWxM= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=devkernel.io header.s=fm3 header.b=LZl3c0Y4; dkim=pass header.d=messagingengine.com header.s=fm2 header.b=qL0mhawL; dmarc=none; spf=pass (imf15.hostedemail.com: domain of shr@devkernel.io designates 103.168.172.152 as permitted sender) smtp.mailfrom=shr@devkernel.io ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736299382; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jxbz0UX4ZCweTB9tOgdu2tF0VYN93uv1f7RUFPTNieM=; b=H0qnf2oBDQsz/dhIN96VASDiUyLt4reCLHrQWDsOxJhZ8tfrL1azZBx4uQMd/LAvvEneCT K2fIRQuqL45LFRuEAGHmjlAEMcYspoMup32xbmYcN2cJeLfkAuePnpQfdrGIIUJoPAwK2d +gSz8xyIFRilVmq9GddoCkRSy5+4UAA= Received: from phl-compute-09.internal (phl-compute-09.phl.internal [10.202.2.49]) by mailfhigh.phl.internal (Postfix) with ESMTP id 80EC81140136; Tue, 7 Jan 2025 20:23:01 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-09.internal (MEProxy); Tue, 07 Jan 2025 20:23:01 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=devkernel.io; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1736299381; x=1736385781; bh=jxbz0UX4ZC weTB9tOgdu2tF0VYN93uv1f7RUFPTNieM=; b=LZl3c0Y43nd8yBiy6SJLd3GSH3 FqRlApq57M78EjWppiKJuIDpLwoXN6pEeDPotuOdjDOPrRWEr4+2PAjle3BU/EWg dN3QEY+DqSGEVkOFMYh9Xtu3Pkh09JlBYk4CKl3w9X3QPATed1OV16/fLeDhL2qE LMUdGBnsUIbrRfLQmP59xgbiC7GGWUkNrHvuyQ1TrijX8MweHKN9rLlr2oS/ciX0 avv3giWUJhVHKQVbsLujHMpgqmDIG/3BgZfzF8InDH7DuVfYECqrC04r0VtCY8Mg UP1xW7AuHew0WDa8Ox2VOxvbKZ1/CLfJAePVj23DlRatVcuW6T9PtyL3EBPQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1736299381; x=1736385781; bh=jxbz0UX4ZCweTB9tOgdu2tF0VYN93uv1f7R UFPTNieM=; b=qL0mhawLn0SpBiERJ5nax1kxLEvSS0OdxsymuxLgYGYUoecFmnj 9TbVf1xGszkfteAg26UeCYPLW95A+cy8+378k2+p9qrxxj35+cZMj2qf6trCiodA b+MA/86cDnlSM+JdFeokg0wsgQNA+jYYAOJsZN4n4uRkWgjnZuwI+Smx70eiw2Zh pEX5P9adwrUNPW1stNunQp+YYZQhb9NlH6rw/YOFkTiegqR11Wuu1JTvJl0R3au3 ca82Vu4WeFFQ0AgWfqPQ7T4WsR8fvtbJBQ7biEDtUm1u30srM6DQgE8OjzTZULwz cYDLUI/xHIVT987ConnRP5Ng7Nxjo/lEfNg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddrudegfedgfedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhepfhgfhffvvefuffgjkfggtgesthdtredttdertden ucfhrhhomhepufhtvghfrghnucftohgvshgthhcuoehshhhrseguvghvkhgvrhhnvghlrd hioheqnecuggftrfgrthhtvghrnhephffgjeevudduhedvudevgfduvdfffefghfeiuedu feduhffhieejfeejffehledvnecuffhomhgrihhnpehkvghrnhgvlhdrohhrghenucevlh hushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehshhhrseguvghv khgvrhhnvghlrdhiohdpnhgspghrtghpthhtohepiedpmhhouggvpehsmhhtphhouhhtpd hrtghpthhtoheplhhinhhugidqfhhsuggvvhgvlhesvhhgvghrrdhkvghrnhgvlhdrohhr ghdprhgtphhtthhopehlihhnuhigqdhmmheskhhvrggtkhdrohhrghdprhgtphhtthhope grkhhpmheslhhinhhugidqfhhouhhnuggrthhiohhnrdhorhhgpdhrtghpthhtohepiiii qhhqtddutdefrdhhvgihsehgmhgrihhlrdgtohhmpdhrtghpthhtohepfihilhhlhiesih hnfhhrrgguvggrugdrohhrghdprhgtphhtthhopegurghvihgusehrvgguhhgrthdrtgho mh X-ME-Proxy: Feedback-ID: i84614614:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 7 Jan 2025 20:22:57 -0500 (EST) References: <20250104012037.159386-1-shr@devkernel.io> <2339600b-ebd5-49f3-a0be-414bc400a858@redhat.com> User-agent: mu4e 1.10.3; emacs 29.4 From: Stefan Roesch To: David Hildenbrand Cc: willy@infradead.org, zzqq0103.hey@gmail.com, akpm@linux-foundation.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH v1] mm: fix div by zero in bdi_ratio_from_pages Date: Tue, 07 Jan 2025 17:22:07 -0800 In-reply-to: <2339600b-ebd5-49f3-a0be-414bc400a858@redhat.com> Message-ID: <87o70i5cb6.fsf@devkernel.io> MIME-Version: 1.0 Content-Type: text/plain X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 24A66A000C X-Stat-Signature: kwyoidxj6uykqb6sj3ab3o37zwrfg11u X-Rspam-User: X-HE-Tag: 1736299382-123843 X-HE-Meta: U2FsdGVkX1/EOb2K0MYnq6fa9bg/cA2LZTMeYdcO+TNKkq44Oie48iKzbO3TmVtss//r+690UGtQDXlDESHodgkZgwzN2UhlXljy/OTLUNyihmLXdyXj+PJalKPDWTGeaTnDifaD9PG8x6itrKGMjdctHRzkDAo++rfQUtkDZK0X6s7BoDx/F8tQetxCk+OYxavFsLNKPYTmAsX9FGJ1cTltsrOcXYwuMnN04hL+RMqpjOi9crQxaQc25orZKa6EM4bm1Ah/86oZdDV59WON4DoTOy7NQi6K8TDPDRJ95h/3CTfgiU8gEkyVFTzHjsnZuOP0L8WFJ+UFc3IyN7QYlrOlv00rXdhQBbr3RVvHuiqKxZ52hzAqWSaIAsCOvVU5Wkm2yhxcXz9lxJClyFoRgUBaIOQHqkVhkdQvoHpELto8r4n+Z77l2hFkrEtSEOb2pwHPkrZ2sq2sb8myyz8wLhgVHkLFXXMzOXuy2SMnx1dgNVqjAYDxP8NNcJH7bV8fZxBo9JZtcWjeq8NIBSPBFexWtF6V/Zb8OtpGjZb/pgxcFPoBhXKlkzUO/yBTstyp6v2vnoLbssdUJiSLcl1MF5ojR5MHD4Yoz/r/KCcha56dUows+j0yiFjPBXd1jl0De2in4CMlT8jf8qzl7vpyF5ITsCmejkowjy5GDS1kbMZe/f38SXy71Bt1S6k3v2D4nAHq3eqZ2qrEhUtUWO8Et7wIyzY5YUMBlP7FsEflzIdKE/06H/XvFMB2dxMG74wuQMFwRVQbLXXScJufge/Z7HLFYwx/f1A4V53L4Z9uo0UgXdWerA81RBRowdSvh4ynVE94toRctaB3uUFnAdgeLimsxpYvWr56nO3QoBcil4E5nobrx3cqFqM+9m5F/jTuoVvvDZpI62zatG+Soder7qCyW1/OfG+T0ZiqypESE43wk5zxMytBG9D6LnPRI1a3psII7rmSFU7rjhF9xzp Rn9f0dOw 8Zy9sdgK4KbfKLR3NvlG024IEwzaafcbPkbyAbb+nAAOp42qC+IrWbrApv6tB1UPYeyjH+R5LPvd6+afuu5TiVySEVM40G1y0d9/F2oehdEgibMMgIpC0X0OlCMwweZcQBTdZKBTaVPobM7mKyDWslWT5GaRi2DzM578K7/pB3I0PsqjJbESaCD8aM2MVAYfz1t7zaFeeu70F3pdzE/H0ZjEEHTQPY7DVsox1f3vYjqjBbgCh6Gwsb8cP/2hkQeHOdBRV4bZpUnVj0740G92MAY+0ON6E3Zo6OdeImbbF03qMF7PydYqt/tu04PpZOVbxl4WujFReAA07cG/cmJPCgVeoBsqbDFuDbFt1g2lTuYg8m8OoHolPJ4wMwOCfVtwSMqUGWUMMtNPrBjGv8upqKun9ZA== 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: David Hildenbrand writes: > On 04.01.25 02:20, Stefan Roesch wrote: >> During testing it has been detected, that it is possible to get div by >> zero error in bdi_set_min_bytes. The error is caused by the function >> bdi_ratio_from_pages(). bdi_ratio_from_pages() calls >> global_dirty_limits. If the dirty threshold is 0, the div by zero is >> raised. This can happen if the root user is setting: >> echo 0 > /proc/sys/vm/dirty_ration. >> The following is a test case: >> echo 0 > /proc/sys/vm/dirty_ratio >> cd /sys/class/bdi/ >> echo 1 > strict_limit >> echo 8192 > min_bytes >> ==> error is raised. >> The problem is addressed by returning -EINVAL if dirty_ratio or >> dirty_bytes is set to 0. >> Reported-by: cheung wall >> Closes: https://lore.kernel.org/linux-mm/87pll35yd0.fsf@devkernel.io/T/#t >> Signed-off-by: Stefan Roesch >> --- >> mm/page-writeback.c | 2 ++ >> 1 file changed, 2 insertions(+) >> diff --git a/mm/page-writeback.c b/mm/page-writeback.c >> index d213ead95675..91aa7a5c0078 100644 >> --- a/mm/page-writeback.c >> +++ b/mm/page-writeback.c >> @@ -692,6 +692,8 @@ static unsigned long bdi_ratio_from_pages(unsigned long pages) >> unsigned long ratio; >> global_dirty_limits(&background_thresh, &dirty_thresh); >> + if (!dirty_thresh) >> + return -EINVAL; >> ratio = div64_u64(pages * 100ULL * BDI_RATIO_SCALE, dirty_thresh); >> return ratio; > > bdi_set_min_bytes() calls bdi_ratio_from_pages() and passes the result to > __bdi_set_min_ratio(). > > __bdi_set_min_ratio() expects an "unsigned int min_ratio". I assume this will > work because "max_ratio > 100 * BDI_RATIO_SCALE", but it is rather confusing ... > > Maybe we want something like: > > /* Use 101% to indicate "invalid" */ > #define BDI_RATIO_INVALID (101 * BDI_RATIO_SCALE) > > Or alternatively, just handle it in the callers of bdi_ratio_from_pages(), > checking for -EINVAL manually. David, I prefer the second option, its a bit easier to follow.