Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp3734729pxu; Sun, 20 Dec 2020 13:40:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJzyP4ocQPwxsnHQ5NDUmtP2X96IsWmN32GTFlFy4lCI5xExJ4XaT2TnQ+C8i0gtpfPKsSCP X-Received: by 2002:a17:907:546:: with SMTP id wk6mr12792253ejb.238.1608500448098; Sun, 20 Dec 2020 13:40:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1608500448; cv=none; d=google.com; s=arc-20160816; b=UeFYr3ig0KA33ATOPZZuD+GTRcp1xtAyVuhg38uXP/XjYIMNG/MPy+r//4O/LyOj7l MDDKSfrwtRc/9ND1vmG5VJGs/Z3G+DEuWbZhtUCSFPCR3wH9HthdrBy2oIU6g2bB6kyq BGHhhoBCR76+52cIWz8Q4V/Y1LRCwm3/4X3WEu1AU/m70mSnsrNptmRVH7vRJqfVX+KS /Lk+A3JkvE9+3xxIgTU0/yxmZ/gwelh2q1RifUVfWPwMv3Ph4DYFK3CiwzsKs69Q2sqA Fyy8yMKe+uCxuj49/frvGsDuCXKkCj06XcU8cGqJlxbjaMTNtweSUgM1sxX4tjmWOMxN aepw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=NUqXj/POrl622LAUb62LCHSZurTWKJa2BeQnkYK49wc=; b=vw4MWZOd8YJ/fuSrDi5LA6xk9u17lxJqfTIQh8PYZVzHOVeWW68IqxFfWJ/kTAypbB t+JaVJ+pz1pjtxONPUjGGsL6THzFlUlg8OitvSDoL5XbhirR2I1J6MVLVN6qs94H+s4A 5NthJ94mSv7A++3NJ2DvwJY60X4FdgpmuGL8R278YfmDIXJtQCitmv078sfZ/l1v/RQ+ V9K92wjYNOXBcnb4Jh5WXOYdz1vWYw0F1+CdH9mYfMWoAZWLWUu3BryQmyXwGWHR+6fA iz6lwBtK3VsPGwLcZ18aEbmrHVtSiz77U2N2dr8x+vNr6GnfC56j5LfbfLjr1F9OAzYm /G5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=FPcvcPrK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n11si7642844eja.511.2020.12.20.13.40.24; Sun, 20 Dec 2020 13:40:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=FPcvcPrK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728347AbgLTVj3 (ORCPT + 99 others); Sun, 20 Dec 2020 16:39:29 -0500 Received: from casper.infradead.org ([90.155.50.34]:36426 "EHLO casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727446AbgLTVj3 (ORCPT ); Sun, 20 Dec 2020 16:39:29 -0500 X-Greylist: delayed 1680 seconds by postgrey-1.27 at vger.kernel.org; Sun, 20 Dec 2020 16:39:28 EST DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:Content-Type: MIME-Version:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:In-Reply-To:References; bh=NUqXj/POrl622LAUb62LCHSZurTWKJa2BeQnkYK49wc=; b=FPcvcPrKrhzWPxAmQIQUK56PGU Gl4asoz4GFZ50DLgihfaToYj5BUITjB4brnnYeeKn1Rhz84vY12DZY6Bklz0oN7pVvNGKrZWcN2zT Z/OzTO6+ew3dhZWP7gKR36yJoXirtRQdkEa8MG1AyoGyS9bcw0rjTWZU5GY28aCcSyHOmJziA+hhM ONjjVOJHHt9xZwB2V7GyfmC0NtLP0d+FejMskoSMwNkp9R2GAHIWHUxrChVvlZIA5XO9y0Jmjgkk7 2D52lZcyGi430lzzlwcOtz5/7ujlgvysAk/bTK4P/XXW3CKksqnj/Z+oWBctl3KGUN262NOnhoEf5 A6VFoV7Q==; Received: from [2601:1c0:6280:3f0::64ea] (helo=smtpauth.infradead.org) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kr5yh-0005CV-KA; Sun, 20 Dec 2020 21:10:56 +0000 From: Randy Dunlap To: linux-kernel@vger.kernel.org Cc: Randy Dunlap , Jens Axboe , Andrew Morton , =?UTF-8?q?Toralf=20F=C3=B6rster?= , linux-mm@kvack.org Subject: [RFC PATCH 2/2] mm: readahead: handle LARGE input to get_init_ra_size() Date: Sun, 20 Dec 2020 13:10:51 -0800 Message-Id: <20201220211051.1416-1-rdunlap@infradead.org> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a test to detect if the input ra request size has its high order bit set (is negative when tested as a signed long). This would be a really Huge readahead. If so, WARN() with the value and a stack trace so that we can see where this is happening and then make further corrections later. Then adjust the size value so that it is not so Huge (although this may not be needed). Also correct a comment: the return value is not squared for small size. Signed-off-by: Randy Dunlap Cc: Jens Axboe Cc: Andrew Morton Cc: Toralf Förster Cc: linux-mm@kvack.org --- Notes: - Look for "WARNING:.*get_init_ra_size" - If panic_on_warn is set, this will cause a kernel panic(). mm/readahead.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) --- linux-5.10.1.orig/mm/readahead.c +++ linux-5.10.1/mm/readahead.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -303,14 +304,21 @@ void force_page_cache_ra(struct readahea } /* - * Set the initial window size, round to next power of 2 and square + * Set the initial window size, round to next power of 2 * for small size, x 4 for medium, and x 2 for large * for 128k (32 page) max ra * 1-8 page = 32k initial, > 8 page = 128k initial */ static unsigned long get_init_ra_size(unsigned long size, unsigned long max) { - unsigned long newsize = roundup_pow_of_two(size); + unsigned long newsize; + + if ((signed long)size < 0) { /* high bit is set: ultra-large ra req */ + WARN_ONCE(1, "%s: size=0x%lx\n", __func__, size); + size = -size; /* really only need to flip the high/sign bit */ + } + + newsize = roundup_pow_of_two(size); if (newsize <= max / 32) newsize = newsize * 4;