From patchwork Fri Feb 21 22:38:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13986410 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 6C8C0C021B5 for ; Fri, 21 Feb 2025 22:38:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 27547280016; Fri, 21 Feb 2025 17:38:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DF48C280015; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 69A9F280017; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id C0DD428001B for ; Fri, 21 Feb 2025 17:38:33 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 70ED81A0907 for ; Fri, 21 Feb 2025 22:38:33 +0000 (UTC) X-FDA: 83145417306.14.949A524 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf26.hostedemail.com (Postfix) with ESMTP id 40A43140005 for ; Fri, 21 Feb 2025 22:38:31 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=QjrfoaCI; spf=none (imf26.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177511; h=from:from:sender: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:dkim-signature; bh=9SL9dFZnxTYWHIK0ELgxGzaHF/BgeRzk+6m5RMpyXOQ=; b=4haYdJo3oX6mFK7IWeJnsBuZfmUN6lVAJzl15FeE06px4NfjowtXwtJ7bxBFn68bULloQ3 ZBHQvTSVv9IY8qSlDzdHfpaj1UqNqJV3DVs/XK4Rqyv2B2Xcw5nC1CzZfkWPNmuPvN8KWG y/pa793Oi2UPpe/MdwaBpyBznG7XyAQ= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=QjrfoaCI; spf=none (imf26.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177511; a=rsa-sha256; cv=none; b=5mzm6j5Anfa+vgrOmlLEFlmDi6x3jaO+Ou0yl1QS24eDjsCUhg69GOQeL3YIUqTQSj0NQU qfDUGVFJpKlYSY3kXKfs9UyBAW/dfZpkkR0koV6RXzdanbOj4PdxdpnAXqrai1g0cBvKFA /4FAODStufAVnLt9IjrOIjGihLiR8Wo= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=9SL9dFZnxTYWHIK0ELgxGzaHF/BgeRzk+6m5RMpyXOQ=; b=QjrfoaCIfvDWXPGcUb8l9WbJQ1 ILfiLiecFwoGMbekJ5E0Q7wwhRpMhxjYb5SKNf2xsEiUlNCS7n9rJ4tOlO07A3uRPG7Vz7geVOVdD sWwDNoOweGQt0ze4/euWidilzry8UydBfqH5T2mvoRkCIz2VF9w5HUbvQoZ3ZB9/Uj40SlikgLFbX lkc8xCuyU6zLVLVjuArqQ+JpTriOEsDSpL4SWQLMX/p9ONXK0qYirstmus9XW5ZKfDl2PvGkdB7m4 l1I+Wzs0gY4t8f0ujfCjIcGUz7s0mBQAN+5zV5BAgWH81wGS7jKZzjClWHNEJ2UWran++CHIpmSfC ZlW1ekFw==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlbf7-000000073D0-36QQ; Fri, 21 Feb 2025 22:38:25 +0000 From: Luis Chamberlain To: brauner@kernel.org, akpm@linux-foundation.org, hare@suse.de, willy@infradead.org, dave@stgolabs.net, david@fromorbit.com, djwong@kernel.org, kbusch@kernel.org Cc: john.g.garry@oracle.com, hch@lst.de, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org Subject: [PATCH v3 1/8] fs/buffer: simplify block_read_full_folio() with bh_offset() Date: Fri, 21 Feb 2025 14:38:16 -0800 Message-ID: <20250221223823.1680616-2-mcgrof@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221223823.1680616-1-mcgrof@kernel.org> References: <20250221223823.1680616-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspamd-Queue-Id: 40A43140005 X-Stat-Signature: rba6sn4a51kk58qsjwfjsq64chsiiux7 X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspam: Yes X-HE-Tag: 1740177511-525341 X-HE-Meta: U2FsdGVkX1+0bL2lp04jJgpwhXGrCj0jQTGcqik4xaa2+RyStn0vUB3TfkBWiBU1a+zGb47JCFTNCucN4ts66e/1l1Z1vkzyEuG3SwxuLyELBIF+1wjgGQRkL7/qbCDzENlYjxfTzyvD+YfsYtf62bMikigfqW7h4ryhOc5qKavLrIUx40UkCa9XqDyT4Lno2Gl3lRR80OoQ87nK3FW7K2DeEBomYf2xloECRdUnia6k4QR1uRofV4a4B1Kw3K6gHcH2Sqpz8TCBz6hivDz8+d5m8NA0F/m5Vin7zwLAli88x9Zbivpb1X4O+i4x/KGfsPndJ+UVaJdAWaIqcUreWdWurj9I2D3uKyUJUQz0kWejnsL8NwdOhcI+karFFkgs22Wo6InKDpkOHMHXn0Fc1+RI4Wi4bdcSjf6gBBIennQYCBAqNvlzgzCwTZE2Xq2ordwyrh1z5XJ2COH7uejxFT1d0aBbQ8ROUfX/bHuKOgColjNZ2wgFEmh5gm6GkZJxny7KS1YYZQSws4JILEfhGJ5OnjtJ4E67uNmw4FHvVnVIzWGjaiHkzm9AIMxazlX/a279HUhtMCshC1iyG7Sq88MMaqVxqAXNRVGbpbPdxna2JNRYCSNuWUaTi/xfuIX7uSVvijNJ/Sz2ippg0nhGh5qmAdWKNPPtMoWaNC6opVlnl8GZknizt4938X9Ia7IXNhTwoSAYfFNTfaZHicojZzzdq1a8EckDce3JO9zCSK0v+CW4liAGned9xN6u6L+oub67DWLGuimDqp84Q1nxZnSxsV1xXmEbkePSLpvtqpTjcvtTwl7RTIc+XhZ5wMavgygQjtuzHbN+cGpg4LWfmKlgmF/1lbTtVKqGT+926ZyT8m0bdUFzwGeXASH6fL6M2aAmtfi3VEoq1leQfnOUPb8EskkSz2YoExxGHfW8XpVee5IIMYkfpkdl5qVtF4VoQE8jP6l95bnTJXnSo3j SmCdcWHv hxoytQZN1k87JCmxKEL3SI3H3aQ7Ow0uNYP1196AkhR2QSkaE6QzptRA1qGUNT2doJ+rX8Se1CnNVcbREyA4NrE3/oPej88MpTCBoc7RWwtrKvYVbrrcEa5YXp7xaydN7k3IoTO5ym/xkzK7ggBks0io0Fr2NjPYvETbaGQDpMsFZ8naMYbjJrX8l/1EA0IDyS+1gxGz2PSr9dOOabgnZdQya3YW95oify+ZtKPrPWiAKjOWutFA20WOx5aHwFFwcIK540AwsARr9zRIspWhH7QBzJyc1P71/GvmoBqaz1ENsIJK4Y1C7dusnMgGuJfZ7KTbUwO/GJZx5NnXK/NDlOq1xAk/j1hF+iRxfsZXuLTBIj5S0trJwdmDAzGu0hSPtNmaeTWWPIwPuiLaTvoC11SGX70Bj81e7JcE9Ba55rEFVJSv9mlI6Djx8Dp2sjn7dJ2DU3o3+H+1ZrWU9ywBiXKaRSzyVQw3BUxbNQQUYtnOIImNipRAQTgasMkZx9aYgnVagoETwqP1S/M5O3w7moyrmbX+eeVOelTc7rhTpqTsy+j+rGpCefSlf2wfzAC4IJQd7hxVZ0EPDFlmtW2xUtrUtfo+rx8X+6d97 X-Bogosity: Ham, tests=bogofilter, spamicity=0.002126, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: When we read over all buffers in a folio we currently use the buffer index on the folio and blocksize to get the offset. Simplify this with bh_offset(). This simplifies the loop while making no functional changes. Suggested-by: Matthew Wilcox Reviewed-by: Hannes Reinecke Signed-off-by: Luis Chamberlain --- fs/buffer.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index cc8452f60251..b99560e8a142 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2381,7 +2381,6 @@ int block_read_full_folio(struct folio *folio, get_block_t *get_block) lblock = div_u64(limit + blocksize - 1, blocksize); bh = head; nr = 0; - i = 0; do { if (buffer_uptodate(bh)) @@ -2398,7 +2397,7 @@ int block_read_full_folio(struct folio *folio, get_block_t *get_block) page_error = true; } if (!buffer_mapped(bh)) { - folio_zero_range(folio, i * blocksize, + folio_zero_range(folio, bh_offset(bh), blocksize); if (!err) set_buffer_uptodate(bh); @@ -2412,7 +2411,7 @@ int block_read_full_folio(struct folio *folio, get_block_t *get_block) continue; } arr[nr++] = bh; - } while (i++, iblock++, (bh = bh->b_this_page) != head); + } while (iblock++, (bh = bh->b_this_page) != head); if (fully_mapped) folio_set_mappedtodisk(folio); From patchwork Fri Feb 21 22:38:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13986409 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 6599BC021B5 for ; Fri, 21 Feb 2025 22:38:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E68A6280017; Fri, 21 Feb 2025 17:38:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9969428001D; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 42BB228001C; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id B7BC4280019 for ; Fri, 21 Feb 2025 17:38:33 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 74DEE1208E3 for ; Fri, 21 Feb 2025 22:38:33 +0000 (UTC) X-FDA: 83145417306.16.EEAC85D Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf15.hostedemail.com (Postfix) with ESMTP id F1F45A0004 for ; Fri, 21 Feb 2025 22:38:30 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=T3tx0wBJ; spf=none (imf15.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177511; h=from:from:sender: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:dkim-signature; bh=fpTh1KbPClQQAibvuLbxjJCGXlYIrXiRedMs+nLQf5A=; b=51Q2M4TMSWWrqL5Vcc+X3pwUC7xy+9TKSPbnlTo71ymLUHumD2d3DhGl2WBI5LCu1s5fEL mLHqrKrl/qu3piupVsdtEzF8SdVx3kgmfK/eH7l9+ntDigi+n7CCGA8FYVP8tVxlFdGZzU 9jxgMB56wpxWwc8ye2LmYA0j/YW4edI= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=T3tx0wBJ; spf=none (imf15.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177511; a=rsa-sha256; cv=none; b=BXr/6xcBruRIMihojTJMeYSlf8tX9ftJ2GPNwwxZD9xq3zlmZvz/Y7f6K5l962O1Q/uQPm uo64WGXgfL5IeN+pyhe5ZkquWK3kTZr2Q/l5iBhEsRQ/v/vwrhFS4hhjqnpAdpKb2Gl2Bi XPtSga7ludthB0wHfQybVgJr6en+OzU= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=fpTh1KbPClQQAibvuLbxjJCGXlYIrXiRedMs+nLQf5A=; b=T3tx0wBJhUa4LW3rSL9hlLLjCm /nfyI88jHLYZ/es2eDKg6NggJ3wwhw7XRGc9qVH/+wHe3uGIMtnKEORNzbYCn/KloX86/WmPANPs7 7CeCqTCrLZgF0FO242DBCTVmLUCHi3DOrJhys6RXzmVCZmf+rEuujTDpTM5m58KVPJnnpbo6LE/4a Qe3Y7/gGuc3cdgPUzM5kfvJjrBoYZp7pdh+sLmLUqr99v01fYrGwUDVyGYkDmPhIBjj0UVmnNqksP k0wOoQC3TfvK+cpGqKrB7zkGYtnNc3C6jcBC20z2UscC1nM0zc6MAjDRzH/oiBZ034AeNwaC5coGX CDikMjWw==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlbf7-000000073D2-3GTV; Fri, 21 Feb 2025 22:38:25 +0000 From: Luis Chamberlain To: brauner@kernel.org, akpm@linux-foundation.org, hare@suse.de, willy@infradead.org, dave@stgolabs.net, david@fromorbit.com, djwong@kernel.org, kbusch@kernel.org Cc: john.g.garry@oracle.com, hch@lst.de, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org Subject: [PATCH v3 2/8] fs/buffer: remove batching from async read Date: Fri, 21 Feb 2025 14:38:17 -0800 Message-ID: <20250221223823.1680616-3-mcgrof@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221223823.1680616-1-mcgrof@kernel.org> References: <20250221223823.1680616-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: F1F45A0004 X-Stat-Signature: d1nqym7teupyo14mgx3iwkbf8fjy4gu8 X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam: Yes X-HE-Tag: 1740177510-990448 X-HE-Meta: U2FsdGVkX19Ant6K0JwtlO+g41KZvO+NCKKez58+2xuAY7TWdrHRGY51EzGM0Pok9M0Q+7HWgchoySLd5RjhHPIzrJf9yglP/BsS3R7w68uaYfU15oWVQ000X3gPGvReCSeKCxbkQwe6LqTSb5j+U0k/QxXG7mJx9f3HdA2TzmOo9usQ9Du9pRkHkWyc0EhHgy/5E9pXISr8ke16+d3Y8lxlY5ye3zG9t+dk37WHKc9u2aR8Nc3Gebo+dXfrqSYtqccA8plmOkrJVqA4Q0OsTIB2GA5TZE6KzIoHm6q5iW6ycQUW6Pn9fKtSaAGzJ6TktWCXVvy5+M5po8hd6jFoKNpQDNKpIKjvecslHvupgcmqCEuesvyEHp7VZLSGmoCi49+K3IgNzhMpNnwz5qrXHIWcbrR0MsVWNXjwz/ozckse3Fxo6qnwQgFAnYA5pk5kaFy+eHQoTL2fx6Xu0oIVpLMAt6VrfZoZxORLzVpYTlV4Vq/GqtHrw8AzYsJeYmUK3u5lboX3lGFh3lXhHPFc2oh3wDN6wgNR5rVaRuzKIuk55uHTfhx25qIr7OIQD7Vcq+TgsnSuW83xEudYw3/ShkV+Yxmbvb3suff4lIJSusivLn/OivibdK0J+aQJ6bVxdTdAORc1myNoNR7PA/b7CEAxQeB8sgT4ilddzvhAsySUUfAyrKqpjRoTue+A2tfiB6EJFHrh5wF0ZoRhkMNe8hMZHpmxYveJypgxvUPobAqpyxQ7TfpoNn1eS9s6wN3JuToozgMYm02ZZVVKhABnZZAhD8zf+zyevW7UOgsq7ZrudFq/um99Fr97yLvQjyIhJ4UcRZD9JPzUffFLLC8T5D1lHFFSXB9LfjUGs6YBRtMKKRHpbuabZhLAX2NaWm4FTC1yp/ffo8fVYDkY6q4xO5nDJkZOb0OBCHLgYCzJq0pb8Gx3FWajivjov/QB4emo2cWkTgXz5ZZX/w2P7Fs 3LyJNnMt tuBJiWv7Tl8OwVQLfPUncZwfrx1cbPz7QMyJVsAYWHWNrPcN5yEC5Ssem4/BEKXaCwyvBfvzwfDYe9yZRsRM5gSRo92kFZNYmbVsG9eDd6rnu3Octqi2Na0iS+fs1Em4857OYcoptTUjomC+NnEWiQkCnNmMvVX7E7NFFmtnTETjUIxyN9zm7eOcI/Dcp4pT+x/+csM1T7qqja2Rj9Tl8qKihHVyuyZtRPrZc8utv9zpWFXyF95vUXALHbG0hp6R8lzarPQmtMQXK/jdn9vRkScpbWhppfifib/8xCUMQwoVvYHGt6yJnumam/nxYqkNj0OBu+srbMYRvvhWvXL8LjQ2lyfBokqvmdbsmH4/T3F6m3wZScFnvSCz0vtJqVNcLF1d6JiGS5wOJMdzaTpphAGw6fBR33vvy39CIQI1SFN8z9ZbXNqre14VvbMJUmPB9FgWsQGPN+xStCBLXOk+s2jS+JAn+2N/ZhKhm+OMfMabpYMj+s1FsLLbgeNOMzwqWAhlbhpN79GSlCYWO+CsRH90jYH2mGKQlp/zDKvvZ0zlpRu7Amo/jondvCA== 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: From: Matthew Wilcox block_read_full_folio() currently puts all !uptodate buffers into an array allocated on the stack, then iterates over it twice, first locking the buffers and then submitting them for read. We want to remove this array because it occupies too much stack space on configurations with a larger PAGE_SIZE (eg 512 bytes with 8 byte pointers and a 64KiB PAGE_SIZE). We cannot simply submit buffer heads as we find them as the completion handler needs to be able to tell when all reads are finished, so it can end the folio read. So we keep one buffer in reserve (using the 'prev' variable) until the end of the function. Reviewed-by: Hannes Reinecke Signed-off-by: Matthew Wilcox (Oracle) Signed-off-by: Luis Chamberlain --- fs/buffer.c | 51 +++++++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index b99560e8a142..167fa3e33566 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2361,9 +2361,8 @@ int block_read_full_folio(struct folio *folio, get_block_t *get_block) { struct inode *inode = folio->mapping->host; sector_t iblock, lblock; - struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE]; + struct buffer_head *bh, *head, *prev = NULL; size_t blocksize; - int nr, i; int fully_mapped = 1; bool page_error = false; loff_t limit = i_size_read(inode); @@ -2380,7 +2379,6 @@ int block_read_full_folio(struct folio *folio, get_block_t *get_block) iblock = div_u64(folio_pos(folio), blocksize); lblock = div_u64(limit + blocksize - 1, blocksize); bh = head; - nr = 0; do { if (buffer_uptodate(bh)) @@ -2410,40 +2408,33 @@ int block_read_full_folio(struct folio *folio, get_block_t *get_block) if (buffer_uptodate(bh)) continue; } - arr[nr++] = bh; + + lock_buffer(bh); + if (buffer_uptodate(bh)) { + unlock_buffer(bh); + continue; + } + + mark_buffer_async_read(bh); + if (prev) + submit_bh(REQ_OP_READ, prev); + prev = bh; } while (iblock++, (bh = bh->b_this_page) != head); if (fully_mapped) folio_set_mappedtodisk(folio); - if (!nr) { - /* - * All buffers are uptodate or get_block() returned an - * error when trying to map them - we can finish the read. - */ - folio_end_read(folio, !page_error); - return 0; - } - - /* Stage two: lock the buffers */ - for (i = 0; i < nr; i++) { - bh = arr[i]; - lock_buffer(bh); - mark_buffer_async_read(bh); - } - /* - * Stage 3: start the IO. Check for uptodateness - * inside the buffer lock in case another process reading - * the underlying blockdev brought it uptodate (the sct fix). + * All buffers are uptodate or get_block() returned an error + * when trying to map them - we must finish the read because + * end_buffer_async_read() will never be called on any buffer + * in this folio. */ - for (i = 0; i < nr; i++) { - bh = arr[i]; - if (buffer_uptodate(bh)) - end_buffer_async_read(bh, 1); - else - submit_bh(REQ_OP_READ, bh); - } + if (prev) + submit_bh(REQ_OP_READ, prev); + else + folio_end_read(folio, !page_error); + return 0; } EXPORT_SYMBOL(block_read_full_folio); From patchwork Fri Feb 21 22:38:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13986412 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 71AC0C021B5 for ; Fri, 21 Feb 2025 22:38:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6EFCF280015; Fri, 21 Feb 2025 17:38:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 19C1528001A; Fri, 21 Feb 2025 17:38:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B7CE2280016; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id E39EC280015 for ; Fri, 21 Feb 2025 17:38:33 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 8A1D58092F for ; Fri, 21 Feb 2025 22:38:33 +0000 (UTC) X-FDA: 83145417306.04.1D38316 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf25.hostedemail.com (Postfix) with ESMTP id D9C1DA0007 for ; Fri, 21 Feb 2025 22:38:31 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=j0PYVvwX; spf=none (imf25.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177511; h=from:from:sender: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:dkim-signature; bh=GoCon0Fq6X63chDqWaV9ZGQ+ZBO2iIy6otYzhff4lOE=; b=sXPAbcUpDLyEmKBnp7duu3hgrHE3/wytlGDnfiWarWfHJ220uUSPI4P4uNWh7d6qnFAp28 ws92rG7yESrxMJQIYM3V9LVziIdcus6HzuhJNq4dtVfuBFa2iZ3kzyUxFJuvBqv4//aiRP IGZRtNopLDI2fDGDMRkIS99gfbhyOEM= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=j0PYVvwX; spf=none (imf25.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177511; a=rsa-sha256; cv=none; b=PQOYpcPKjPOnthu/YLE4uLqxbaT5uyYQvzAZImtzDzQ+iOvntmqwotoABZO/XMAy5xb+LG KqZRng1zae7BgvtYlbAhyiq5vNC5iU6chmGGsSG6UYY+haLwb0Xo5PlnKvwSLWuYf0c0qi K58KCbYpXByli8HiET9r333ZgcpMseg= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=GoCon0Fq6X63chDqWaV9ZGQ+ZBO2iIy6otYzhff4lOE=; b=j0PYVvwXI7eCRUoi3gZOV2na2H Bj98iRzd1YMF4Lz6r9LwSxt53op4Q5kXHZRxGptgTBnpTPcgVrjtVTzNrCNH9l6rWodcKn1uzPvD9 5Ugsk0CiQqBqoK3Z1WXfrcTsqQ4lWh+ibde8Kyn/b37D0hn79Jyk5ikSCLn85SAI3yk2Siu3h8Rcn WBQJFYEGyP08H9hJUa6NJvNezR+bLm0zKeLxDXBLYKEHGofvghjAj8odarDyzARiJBcNYIk34HXt5 p8plBqyKTGkpOZtRcaOYmBc4TH/6BHg024qY5gApNVtEJBdUVAa+0WQsf/4QcJHNgJe3/pdPjNLkg Y+5JFOAA==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlbf7-000000073D5-3Plg; Fri, 21 Feb 2025 22:38:25 +0000 From: Luis Chamberlain To: brauner@kernel.org, akpm@linux-foundation.org, hare@suse.de, willy@infradead.org, dave@stgolabs.net, david@fromorbit.com, djwong@kernel.org, kbusch@kernel.org Cc: john.g.garry@oracle.com, hch@lst.de, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org, Hannes Reinecke Subject: [PATCH v3 3/8] fs/mpage: avoid negative shift for large blocksize Date: Fri, 21 Feb 2025 14:38:18 -0800 Message-ID: <20250221223823.1680616-4-mcgrof@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221223823.1680616-1-mcgrof@kernel.org> References: <20250221223823.1680616-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: D9C1DA0007 X-Stat-Signature: fizx7rwp5sbf8h4xbfgu78f6du514x3y X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam: Yes X-HE-Tag: 1740177511-118497 X-HE-Meta: U2FsdGVkX19JCDREopJqNuEFKUQ24FJlpi5MQ7iHc725GfhJGjGuKhhGtEWR9KeVXlBFdrkGMNWTEfLuzWEvDMvYX86xbybo8evXDz4g2zwYelxfxvbMflP9a0wMFGhlPDrbr0fs/mBPoxQXYj6Ybfv3H9xFtJVUGL15LEhgS6cO3W/FUxKR7MQ0gEgGfgipj7NCDimJDUy8Qe4MpGdB/RqzFFYm5NuxeAXGQf9HBMYH6WXQ48BBzJx4nxWARhvrSNELehLe5KcPFif/gAs0kYVcyY4mFts3haxx0VmojVdvmve72yYhpvVTXEV3KrFO5bsWveFHQPPqffjOF7czw0tnpec4hwSmmzg1vr5+tRWXqx0Qkj8Np47TZ6JtGlv8K6GRE0NwvC+z1kvm6O86tPl57KkKP47QpL/qVy7b/6d5kT7EOPdSNEO0vT4yo8hLZjNYhj1WLL+DyRVU3xLGjxDd3AVpO4f+r/i1lxQPRExiWoGKcdWrLEhZKLv+UFgPEJDTTinM//QRaO3yGYy3htgIGQSW7I3+2wXIeMME9LKPGsyuGqMwRlvcqAxztQZ4zg/3o15N1kjnfmiia15SRgVC37RgCfP+tr3IfM5w8XIQ8Le0ZxGttkx7ApQRLaIx0UoRSuVDlQVaX19Cjgg9RshuKjid+d5ra1mCKxivablbQNdRw0OUWUTacAEnW0jGzLvM0np8mGxRyKzJ56NEDq8XQM60ddqTnmgl82YwDxTBEpNaeLsaOcKiB7bVAJghQXZJIg2tuKUyP45HzeeuOiAFj9jyW1zusQ12os/PuOw4X/aRgNLe+iQA2c5ik4lD2Oc28smtAy6GhO0q2S+BMqEiuP013F83X5W1tbPkwnFV/HUoeh2tWc3A4Nm3yN8veN1S2u9IaVft8EB9Id0vBaRKP+07l8LyTro27sQOa8rBUkdYGw/Ps2Tk9Jyzu+5fWdYVha/yb179CLCFh3r 3Jk+TsuF 6n68WxtDc271a/EBIh9X+LdUzqZ8o6M7un4rAKw6i+VrmSGMk1yS2PiHjRdsEBjMUyJvqz/qP98RB/KK+oW9LKMyAwFs1MhEafXHi5hwbl/ot/BMebHlzxmUbC/b/ITs1k5i72F5DRJT1cyyuGhnn2U+HYlyGHEeXZPW55LlqPDzMBr5dyIC1d2VgseHvR+pATYD6en1BftcKGtlpAakGvs/Eo4FVbnZiuY/nol8Lap7lVKLOqF6DNX6Tm4lwU5nT3rByb31ZGg5142TcPXDvyeDlZiF3+YjTue9YlLLUHECB/+9DBQgUAyGRAIoxeVPWbL57OpHVu+ggQU5h3zfFAawOSdmal7a1SNJ0X2V3+0sRs4w4pueXp+PZD9RiZyRMebDIR0B6LpZmxFsQ6BA8Cp3+C1x0V8941prtXNZwDaECir+XcuJUmFZp9RIrV7R7DGsHGLdJweLFTzCTHQ990T/pb6/pUpf3oXbPtVO7G0WayRXgmmYV1y64b+DqsVWWe4N0zB707s08fHjLdUAxFjsaD/wKPpT98pcktVEMV3Mc0Z0Nbo1em2CMZg== 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: From: Hannes Reinecke For large blocksizes the number of block bits is larger than PAGE_SHIFT, so calculate the sector number from the byte offset instead. This is required to enable large folios with buffer-heads. Reviewed-by: Matthew Wilcox (Oracle) Signed-off-by: Luis Chamberlain Signed-off-by: Hannes Reinecke --- fs/mpage.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/mpage.c b/fs/mpage.c index 82aecf372743..a3c82206977f 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -181,7 +181,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) if (folio_buffers(folio)) goto confused; - block_in_file = (sector_t)folio->index << (PAGE_SHIFT - blkbits); + block_in_file = folio_pos(folio) >> blkbits; last_block = block_in_file + args->nr_pages * blocks_per_page; last_block_in_file = (i_size_read(inode) + blocksize - 1) >> blkbits; if (last_block > last_block_in_file) @@ -527,7 +527,7 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc, * The page has no buffers: map it to disk */ BUG_ON(!folio_test_uptodate(folio)); - block_in_file = (sector_t)folio->index << (PAGE_SHIFT - blkbits); + block_in_file = folio_pos(folio) >> blkbits; /* * Whole page beyond EOF? Skip allocating blocks to avoid leaking * space. From patchwork Fri Feb 21 22:38:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13986406 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 D08EDC021B6 for ; Fri, 21 Feb 2025 22:38:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 43277280020; Fri, 21 Feb 2025 17:38:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0F6EF28001E; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E3D7328001D; Fri, 21 Feb 2025 17:38:33 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id A9D6E280017 for ; Fri, 21 Feb 2025 17:38:33 -0500 (EST) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 5C13B160893 for ; Fri, 21 Feb 2025 22:38:33 +0000 (UTC) X-FDA: 83145417306.26.B340D42 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf11.hostedemail.com (Postfix) with ESMTP id 9CAF440003 for ; Fri, 21 Feb 2025 22:38:31 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=SSoOiVej; spf=none (imf11.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177511; a=rsa-sha256; cv=none; b=ZGGkxUAKLx4O2ovUZFYoxH1bXESUK6/m5W8PzdMPp29ecXVNjcRoh0sYMtHgspCauaGFAM bezsA4ntDZt9lb9F4V6CfMPf+fYZqa1twrgJv6z8aZkQTEaGaAJ6VDzRsTsdg1E26wk4zF ZhrPrMb5rkctvUNN4nUwiuU5kAT3ObY= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=SSoOiVej; spf=none (imf11.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177511; h=from:from:sender: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:dkim-signature; bh=+ubD7J9wYkED4fOf4+EQ9LXTiGFTdc0o5ColS8uVAP8=; b=2teGGxtMV3xp6GCejIEmASVVLMiR7OlU0XcznHybTtmKGpbszGQ18c7ljKNvRCmjTfBLKS cnfgz2WNVKGAu76/sRkA9w2pccr+GtXPiwECZVg48MSy/5Bi0qbgVGeCbWuZOnRJ9bUFkQ GB1NxaASFlohT+aStoQGal5URmG3JJQ= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=+ubD7J9wYkED4fOf4+EQ9LXTiGFTdc0o5ColS8uVAP8=; b=SSoOiVejG4f2uQMzI6veQFB34H bOsLDfXVdlrvZ15lpIx/WnblMH4RvdUHujStmPHPCDwC+n6glopmf6jiSp+VpdwPcx6o/c27cfoSw whXgslKmM9kDiDS0UmEat01qMZv/NiaTOywGu5NyZe/IZisj95t4MxS+UpKCvTdEZ8YxHboIwNZkC XNRVsX2G4n8xTy/7U1jmQvs0R+bGPehAuDdwXJieeVO5LFJsoWERuxBF8BC1nm6R8AbK6BjgUgsZr Vfdsd4A8Xu5L20YpC1ZLmYiLB0EeKZUh8G4wvcBW+0XTxKbBasaOrpCuIyxFXhe32r9GiUodrYFkK UP3OFF0A==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlbf7-000000073D7-3Yz7; Fri, 21 Feb 2025 22:38:25 +0000 From: Luis Chamberlain To: brauner@kernel.org, akpm@linux-foundation.org, hare@suse.de, willy@infradead.org, dave@stgolabs.net, david@fromorbit.com, djwong@kernel.org, kbusch@kernel.org Cc: john.g.garry@oracle.com, hch@lst.de, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org Subject: [PATCH v3 4/8] fs/mpage: use blocks_per_folio instead of blocks_per_page Date: Fri, 21 Feb 2025 14:38:19 -0800 Message-ID: <20250221223823.1680616-5-mcgrof@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221223823.1680616-1-mcgrof@kernel.org> References: <20250221223823.1680616-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Stat-Signature: s8fzecn9rojri8r9wzxpumaem9ny51b1 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 9CAF440003 X-Rspam-User: X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam: Yes X-HE-Tag: 1740177511-445499 X-HE-Meta: U2FsdGVkX1+e52s10OihNH96NHJe0pQwortNundv5ovoMeGphX5CgGNs8RC1nJlcbSyCfgQN7yhTMggmqHxJRtvL8FnNbXYNEHqfMozWxIJUfqzz/0twf5bsA7qTvnsnh2Iicbpkq5VBLLAIOIABJQJ/Mnd8WsWgbPP5j7FvWQJsMH2zRsGyzlEnGNSplbQ97jTTEzCutZFodq+1ZqGeXVK4/8I6Yy34d/lZvHasbtlYRI5h8xwaq0/dBF1dEnVRGeGot92Kq8pGFBE4K3Si8ZEt4/GTLMIp8Nb4mFATDxllcN0vhXlnGLWKeDMaZGYtyhfsCvNB1u+JU+nRkofa1SgRjDf9MyN3XbGSiHCx4jGVUmtMChnyFHPlQ+CiQ6kMLx3HpfIcgsP/3V9nwFNAw4iOwjbgIN9RnyAOHnZRWPG81uh/Cec/HR/sf7Q9RnMTHMkSHbxkfsq5neUDRoiYypS0NcrOFb718x+NME/7b7o8ERF1lhuJA+TiOeu6fT/NN5vYiFYVUEIGHmhhvQ3S/efTRPgFsproWkysbUrr9I7UhC1wz5qIb5mMQHxb/0R3F+kQFsstRp5eiYrLElfc4FHttKMmktLLUsU4/ao046nwUbHFjjFKi2nDKGp5DaB4TBmdIciVJkp+/Yyq1OcnJIZQ5Hq9BZWvMKDzudiFI+uvScrSk/tRPBbiA3rhLU47SrFwwTgmPLujUlH2FM9WMMuq9Ozkv6pYGvqlYn92cQ86TVO8h95ZFsHWekdQ9yJrAl+EmVZMsCC7kUCCWyOTuBD3cJsNckTzKRJoxJrTGXBOTVCaVZX2lMRI86YISDdBPBRmBkaqucyJyI2SJQcA+8mD4FxSFK3NRk0lsqw8YBVSf347vYnJTs3HHNbkkJgoz5CGCzjinvnkiNYKkKD2zcKPU+a44IxOQM/xdGdm3j5ruDfMgbIV+u1AGrw/g65DIQ61legvvJrnkFqzlSJ jQoOhCyw wcrOS97nceQGBBXhKnj61zBfrwwIp6dC97Fr4F2qqZIQLD2TiBwLP6vO6n14XXI77Qs4r7slhjqZpewC9fshdLxquruPiBvn9a9lh4As7DG2alJMlA+D01V/gVhZLSP7IoKCdlEXJr7P3IcCb0b6cQ8eVe5PZ8vjRAjWXth8uCaiHpfTT3YRbbU7cSLtJD0+WCmnNBA/uTfVr5di+OoOTE6HOcXgnfK4sFr9Ix903Q4kCYVMf66y42RlNBasyXr5152Y/1iO19kHjsITpR07jtbJN+NQBYOto/jqRzTDrAvErPIt38lB957+jRkU1Z6KEHw5ffZ4wdgEBt/q3+r1+z1RAebQuiXb4Qh5zUWwg4dJcrxOSG3edV7sTnAMvrdMTfOs1JXOaMF2jswHX/FksHVSe1LxnhXYiKN/nn8B1CEAY/ewoIKqdvdCkhxjRPiqVkUe8iYQZ1val/hqW9c9P6RGZy0xbl5pgAO74n+pyRjbcZWuLLByIsZJOPProW24qu4bgtAqmLJBrxdY7Pv1QFCw1t6a+Q0fcbBHMVCFQZzfefrQ= 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: Convert mpage to folios and adjust accounting for the number of blocks within a folio instead of a single page. This also adjusts the number of pages we should process to be the size of the folio to ensure we always read a full folio. Note that the page cache code already ensures do_mpage_readpage() will work with folios respecting the address space min order, this ensures that so long as folio_size() is used for our requirements mpage will also now be able to process block sizes larger than the page size. Originally-by: Hannes Reinecke Signed-off-by: Luis Chamberlain --- fs/mpage.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/fs/mpage.c b/fs/mpage.c index a3c82206977f..9c8cf4015238 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -107,7 +107,7 @@ static void map_buffer_to_folio(struct folio *folio, struct buffer_head *bh, * don't make any buffers if there is only one buffer on * the folio and the folio just needs to be set up to date */ - if (inode->i_blkbits == PAGE_SHIFT && + if (inode->i_blkbits == folio_shift(folio) && buffer_uptodate(bh)) { folio_mark_uptodate(folio); return; @@ -153,7 +153,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) struct folio *folio = args->folio; struct inode *inode = folio->mapping->host; const unsigned blkbits = inode->i_blkbits; - const unsigned blocks_per_page = PAGE_SIZE >> blkbits; + const unsigned blocks_per_folio = folio_size(folio) >> blkbits; const unsigned blocksize = 1 << blkbits; struct buffer_head *map_bh = &args->map_bh; sector_t block_in_file; @@ -161,7 +161,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) sector_t last_block_in_file; sector_t first_block; unsigned page_block; - unsigned first_hole = blocks_per_page; + unsigned first_hole = blocks_per_folio; struct block_device *bdev = NULL; int length; int fully_mapped = 1; @@ -182,7 +182,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) goto confused; block_in_file = folio_pos(folio) >> blkbits; - last_block = block_in_file + args->nr_pages * blocks_per_page; + last_block = block_in_file + ((args->nr_pages * PAGE_SIZE) >> blkbits); last_block_in_file = (i_size_read(inode) + blocksize - 1) >> blkbits; if (last_block > last_block_in_file) last_block = last_block_in_file; @@ -204,7 +204,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) clear_buffer_mapped(map_bh); break; } - if (page_block == blocks_per_page) + if (page_block == blocks_per_folio) break; page_block++; block_in_file++; @@ -216,7 +216,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) * Then do more get_blocks calls until we are done with this folio. */ map_bh->b_folio = folio; - while (page_block < blocks_per_page) { + while (page_block < blocks_per_folio) { map_bh->b_state = 0; map_bh->b_size = 0; @@ -229,7 +229,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) if (!buffer_mapped(map_bh)) { fully_mapped = 0; - if (first_hole == blocks_per_page) + if (first_hole == blocks_per_folio) first_hole = page_block; page_block++; block_in_file++; @@ -247,7 +247,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) goto confused; } - if (first_hole != blocks_per_page) + if (first_hole != blocks_per_folio) goto confused; /* hole -> non-hole */ /* Contiguous blocks? */ @@ -260,7 +260,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) if (relative_block == nblocks) { clear_buffer_mapped(map_bh); break; - } else if (page_block == blocks_per_page) + } else if (page_block == blocks_per_folio) break; page_block++; block_in_file++; @@ -268,8 +268,8 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) bdev = map_bh->b_bdev; } - if (first_hole != blocks_per_page) { - folio_zero_segment(folio, first_hole << blkbits, PAGE_SIZE); + if (first_hole != blocks_per_folio) { + folio_zero_segment(folio, first_hole << blkbits, folio_size(folio)); if (first_hole == 0) { folio_mark_uptodate(folio); folio_unlock(folio); @@ -303,10 +303,10 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) relative_block = block_in_file - args->first_logical_block; nblocks = map_bh->b_size >> blkbits; if ((buffer_boundary(map_bh) && relative_block == nblocks) || - (first_hole != blocks_per_page)) + (first_hole != blocks_per_folio)) args->bio = mpage_bio_submit_read(args->bio); else - args->last_block_in_bio = first_block + blocks_per_page - 1; + args->last_block_in_bio = first_block + blocks_per_folio - 1; out: return args->bio; @@ -385,7 +385,7 @@ int mpage_read_folio(struct folio *folio, get_block_t get_block) { struct mpage_readpage_args args = { .folio = folio, - .nr_pages = 1, + .nr_pages = folio_nr_pages(folio), .get_block = get_block, }; @@ -456,12 +456,12 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc, struct address_space *mapping = folio->mapping; struct inode *inode = mapping->host; const unsigned blkbits = inode->i_blkbits; - const unsigned blocks_per_page = PAGE_SIZE >> blkbits; + const unsigned blocks_per_folio = folio_size(folio) >> blkbits; sector_t last_block; sector_t block_in_file; sector_t first_block; unsigned page_block; - unsigned first_unmapped = blocks_per_page; + unsigned first_unmapped = blocks_per_folio; struct block_device *bdev = NULL; int boundary = 0; sector_t boundary_block = 0; @@ -486,12 +486,12 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc, */ if (buffer_dirty(bh)) goto confused; - if (first_unmapped == blocks_per_page) + if (first_unmapped == blocks_per_folio) first_unmapped = page_block; continue; } - if (first_unmapped != blocks_per_page) + if (first_unmapped != blocks_per_folio) goto confused; /* hole -> non-hole */ if (!buffer_dirty(bh) || !buffer_uptodate(bh)) @@ -536,7 +536,7 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc, goto page_is_mapped; last_block = (i_size - 1) >> blkbits; map_bh.b_folio = folio; - for (page_block = 0; page_block < blocks_per_page; ) { + for (page_block = 0; page_block < blocks_per_folio; ) { map_bh.b_state = 0; map_bh.b_size = 1 << blkbits; @@ -618,14 +618,14 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc, BUG_ON(folio_test_writeback(folio)); folio_start_writeback(folio); folio_unlock(folio); - if (boundary || (first_unmapped != blocks_per_page)) { + if (boundary || (first_unmapped != blocks_per_folio)) { bio = mpage_bio_submit_write(bio); if (boundary_block) { write_boundary_block(boundary_bdev, boundary_block, 1 << blkbits); } } else { - mpd->last_block_in_bio = first_block + blocks_per_page - 1; + mpd->last_block_in_bio = first_block + blocks_per_folio - 1; } goto out; From patchwork Fri Feb 21 22:38:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13986408 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 E1CD5C021B6 for ; Fri, 21 Feb 2025 22:38:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B810628001C; Fri, 21 Feb 2025 17:38:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 73AD7280019; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2F18A28001D; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id A9171280016 for ; Fri, 21 Feb 2025 17:38:33 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 4C03E1208E6 for ; Fri, 21 Feb 2025 22:38:33 +0000 (UTC) X-FDA: 83145417306.06.D494188 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf20.hostedemail.com (Postfix) with ESMTP id 4E8781C0005 for ; Fri, 21 Feb 2025 22:38:31 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=fNM7nLrE; spf=none (imf20.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177511; h=from:from:sender: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:dkim-signature; bh=rJT3XHCnmeFYD6/zws/j5/iie6UCiOo1LUIbVleTx0A=; b=1AfYl5snh/EtJlTPf2LeQJjvCvv2JkjBRuxrV8D0aOFQGVw/z0oEv+132D1G18+IE/IzA7 YyMLYPpMqM44T23gOFKJBFKClaftnj8zfcv7q/N4lKcnPHMEK4RL0RkINuT9a9OrCndL7r aA2ct5aJGPfpqunpzsETXFhqA4Sw0A0= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=fNM7nLrE; spf=none (imf20.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177511; a=rsa-sha256; cv=none; b=DNwKu3g1sSNcpNuLaQRyqL2fltWo/eFTZVAItq4FliTrZaaW2hfpHqlMYeM53QACOpuzKk QIQmQdErKEIf5MOE2eqTS3kXtv5NQ+NNxeLUVKdvrv0vuSSctQ6jGcFdw8DfWend8nEQE5 8O6bgUs3Ojmi/O4uFa4RWOmPfSyn/1A= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=rJT3XHCnmeFYD6/zws/j5/iie6UCiOo1LUIbVleTx0A=; b=fNM7nLrEP3BEk0dY3WSxjlab7o 6lNb3AIH3BFvSoLugZ4WNdP7IG8Cg8W2ch0jq0AhMywPJKPaiogqFwSJZ0ECdy04X3UTKESBvU3PK JLx5CfzV5CaKjs818jt1jtN+H1FfwqHJX8EgMqHeh9vUT2+WlVUy1uNkgTfJ1gfYl0+3CcDLUxUUM qurRxxCwJtcyZ6hdL9364M+WTQuluLk41RQbAQkWKGiYdDig5Ixpr43QFsEpKnObdxnu1YrnaG8US RCV/7DPIvZHWOrh2rN57C9HA5SQCON7LK59aMOl8vXC4bqPmhEug6c9iaai5HcqdDKE0ssxa0/RZY ckh02Tog==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlbf7-000000073DB-3iIF; Fri, 21 Feb 2025 22:38:25 +0000 From: Luis Chamberlain To: brauner@kernel.org, akpm@linux-foundation.org, hare@suse.de, willy@infradead.org, dave@stgolabs.net, david@fromorbit.com, djwong@kernel.org, kbusch@kernel.org Cc: john.g.garry@oracle.com, hch@lst.de, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org Subject: [PATCH v3 5/8] fs/buffer fs/mpage: remove large folio restriction Date: Fri, 21 Feb 2025 14:38:20 -0800 Message-ID: <20250221223823.1680616-6-mcgrof@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221223823.1680616-1-mcgrof@kernel.org> References: <20250221223823.1680616-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 4E8781C0005 X-Stat-Signature: as68j8emw8n7pckqkma6ofpszzt5ws19 X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspamd-Server: rspam03 X-Rspam: Yes X-HE-Tag: 1740177511-427282 X-HE-Meta: U2FsdGVkX18w3xvKw2Am8b/OFbPGcmZ9a2LogBIT2or/os6fKy4d0Fk4MNqfK1KlRHqvIms0iOL6MM210nXVjz/2QjLfzHbHyraEXwP6VTHX9AKnkB9OioPGJIMoonFIFz1R5Iw0OodKaD/JiTiUSZUi4db0pUqP5MxdiIvBRWWPHDXbGuDZcPtcoXYLDGy+PFQq2XftA8R7bOziJXhC7JNIOHzArT02XUK3RctJqEmlxH4UBCtkBM2baFQKqGY5haE/urRUzCQZuGaWa+FPIXqA9Rumwax1UbPeAufu5TKOcaDf2lB12OT9mN0N6pFMvjMPIBFEQszUXbKH6QVwZW3wfKRHd54heEA0kOlYHHsIjcZBt9C3+dAx+6+87v7HFycmwWdBrpmrzh3Vyj0xYCCLwYKfM+b91sl54q/OZo08pV4Mi/8kUy3Ml3Al4VSbkqK5ounjx5Mmhb6C/9XiMF5POUX/tEidC1s6AZlQvTbQyGnobNzwPNumH3ouwAFmfv8m5z6I/Fl6WmVWFVM/mgiAfLKVe5Witmi5JPDjfQTfcBeQtsT4L9r2neVKJAUW4DC5HUXb+4meibG3mVaz1P6qAfwXTDknimThD06l/G460FsPWFaUbyiCAtSHksBGke5GGepJxl+AnFFS+4/RaAlayEU/USErISGgp8ik9vsLBy3DyLnS8gGzmcR9OLtcmKF4z3obWKzIdOWnh3fBuQrpoWAZkhI/+sQ1j4gAoGEzc/SPUmpmSHkuKZ+zkXHqQFMS36XBYwlBWB/fDbK//FcXCubmC49xcghKg96Kr1NSC1SwzZwa+Fs/u/iBx75+JzW4UjdYuak3RSRYop3OM0SN0SdB5YJ/X4V7UbqT2fJllRkwosj1f4+GFUqGi/5y978r4Ni4N5vxTuhp+5bQkfrtux5PZ4fWmy7G/y8gDmDIKbOGGvqI7wRu4cyyPOcuKooBzQ7022PYwFTigsP RQD73RBo vp/Fjj4oxqoAlx4kpWAANG35oICh232Log+mryWpiaFCSFirLAo8Ozb8Etyw3mkCXysKS6731mJjBdSF0PPh/Y56WgUjYByE7q+f9K8hCENnRMbUBoytsM49ICM9rO/31GAubyKyycl6TUsNjof3SAqisYYKDd+gdWYnxCm6yVC2Iy1E79zeMlNFyZDpSwmQ4O6mvkznYONL8mmF640mOS82SonYOYOCLZHUzXc9CdzdWaJcaxWIEElcObgvtn+d1DiIhdG4WHl+1QTxoADLbkPilgBLQEvD4M47ULjvRhD3hpIiXj3IN5JQY+3KcjQYyvD9x334tLXv3AKoQiyjroI4p92slUEpaLi8XB7rVvyjz+aV0mIN8xRualAldwVmPAK9C+XSAzNJeW2PPcO6nQHXGC+YLYuP3Sk8Y5a4ZFTc3WfVsszwjMdDWs817ym+r6FQeCJ1lInO9CGsLbM8+If2ZtGJx/m02nUh7n9QTQYUgyuMKwB5q8Kvp493L8VyYMPE/W053V5r33zbp73lUKGeT5QuJFAW63dAGtoDNNCfaKzkJX9o0wJNn+A== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000036, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Now that buffer-heads has been converted over to support large folios we can remove the built-in VM_BUG_ON_FOLIO() checks which prevents their use. Reviewed-by: Hannes Reinecke Reviewed-by: Matthew Wilcox (Oracle) Signed-off-by: Luis Chamberlain --- fs/buffer.c | 2 -- fs/mpage.c | 3 --- 2 files changed, 5 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index 167fa3e33566..194eacbefc95 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2371,8 +2371,6 @@ int block_read_full_folio(struct folio *folio, get_block_t *get_block) if (IS_ENABLED(CONFIG_FS_VERITY) && IS_VERITY(inode)) limit = inode->i_sb->s_maxbytes; - VM_BUG_ON_FOLIO(folio_test_large(folio), folio); - head = folio_create_buffers(folio, inode, 0); blocksize = head->b_size; diff --git a/fs/mpage.c b/fs/mpage.c index 9c8cf4015238..ad7844de87c3 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -170,9 +170,6 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) unsigned relative_block; gfp_t gfp = mapping_gfp_constraint(folio->mapping, GFP_KERNEL); - /* MAX_BUF_PER_PAGE, for example */ - VM_BUG_ON_FOLIO(folio_test_large(folio), folio); - if (args->is_readahead) { opf |= REQ_RAHEAD; gfp |= __GFP_NORETRY | __GFP_NOWARN; From patchwork Fri Feb 21 22:38:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13986411 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 0A12DC021B5 for ; Fri, 21 Feb 2025 22:38:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 50F3928000F; Fri, 21 Feb 2025 17:38:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 08641280019; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A944528001A; Fri, 21 Feb 2025 17:38:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id BE30328001A for ; Fri, 21 Feb 2025 17:38:33 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 77C071C80D8 for ; Fri, 21 Feb 2025 22:38:33 +0000 (UTC) X-FDA: 83145417306.11.F37557E Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf21.hostedemail.com (Postfix) with ESMTP id 40A021C0008 for ; Fri, 21 Feb 2025 22:38:31 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=XDnfMo1V; spf=none (imf21.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177511; h=from:from:sender: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:dkim-signature; bh=3/8moX70+aSKaT13TlyhV/XaFEGoqVjVhuDSY9DkRzU=; b=6Qe5c7RJFhanIHCtCvJNYTKm/zUUJvHAR9o1Dace2N00+ZZGgvMzbURxesT2M5Fi0a+G+r MFttwXBD0jgX8s6nz1e4mK4FhvCLYzGbEM1/hK98YCFJtFAfiD5/AWzggEgbBoVmMLs5h6 H+n2aoY6Sjbm846wP+ZKtZ2G0uQ+KTo= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=XDnfMo1V; spf=none (imf21.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177511; a=rsa-sha256; cv=none; b=D06bcgJ3tUHudWBTSAqBK0CgQw2o+OdfjvWEhqO3ch93RyusBJxlTWK0wUlgDGYS9kvSne zw8UIsxD76TB2FWRmbilTIRr5o1Kk9xBGqyEXLNbEGc74s0P7oUNIjZMcJ5KE3NJxJBud7 w/kARCc/XnFi89wJn66l8DReBji2muQ= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=3/8moX70+aSKaT13TlyhV/XaFEGoqVjVhuDSY9DkRzU=; b=XDnfMo1Vwdj4jcr8Jvs3oJ0PuK s24IOa7rDwYGgQAUm0OWzKX5z9w431aQJmyM6li85UjqomVbjd1UDPxOLb3Q3vMkcBcuY+tjeqIp5 y/bPWO+YhAC2JyoWReaELre7hSPE3h7sHi0ob8piVq4oyfWNdonXcTLygztsa6Vmbiida6D19SJJU IwYVaxi6yPulxaGEpq7RVAlyotRmFlbt7LSWQ0Ls7FRpICGq4NDKIaqeKvuY48/PVFA6eywoIRFMI LARMsRH1stIV3oiPSLhqH7+ETYc4NRQORSuf1bnRP3EGwEgt71j+zSlHDJPCJtNGAjjF5BQih7HFK XcE6Tzdg==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlbf7-000000073DD-3rzt; Fri, 21 Feb 2025 22:38:25 +0000 From: Luis Chamberlain To: brauner@kernel.org, akpm@linux-foundation.org, hare@suse.de, willy@infradead.org, dave@stgolabs.net, david@fromorbit.com, djwong@kernel.org, kbusch@kernel.org Cc: john.g.garry@oracle.com, hch@lst.de, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org Subject: [PATCH v3 6/8] block/bdev: enable large folio support for large logical block sizes Date: Fri, 21 Feb 2025 14:38:21 -0800 Message-ID: <20250221223823.1680616-7-mcgrof@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221223823.1680616-1-mcgrof@kernel.org> References: <20250221223823.1680616-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Stat-Signature: 8xiknagymbh1zz1p9z93xxe1nyxzx5ao X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 40A021C0008 X-Rspam: Yes X-HE-Tag: 1740177511-677446 X-HE-Meta: U2FsdGVkX1936OwCTGgYeR7gq5OmDUensx1UKpXSwDxtcd66aOQfYrqvLakYD5NZ5MUxPZElSKfqmxiL5ODgmbOSLyu93KzgqfnPoaVySr1iYkSvdrReLHn+A5txoypIYD7cSCml3OKmuGw/ByXHxMCCP8QFRXUQlSZmNniwjD74Ete/TXEgSrzjuGccZKL88Fs0YS0rFJIgWMJhJr2Gi8Hj4bT54Xt3jpUP7m3FJ9dG0+6oxl6LQxzCVwybb6Ti78+RiCehx1f5e+cVjQwslpdt0K1YkLpJk42sU5Tx8dFKSeu5XdUoPcZWocc8JGwGmHEAQehrUEsL0S4TQpvcCZePa4Rl+XXmVAaCLnFbnB68qSOlIQar2gZzT12sHbbFu5auqbK5XsCqbZYA6rxWx32U+ac5FZBmS5VsTEpWx19O0Ap3w1OM5quxdQpiebo/qZJMWn4zQox9rkw1Wb6nNZmhI/olUv/uoksG9f9b0dx5SedljmItNP6vfwnjeesUGnEIB10Cff1FfwKXsvLiGQbg8hcZ5Q0wosNH5x+SHGWi1a+zP1Ivt8ybV4Ej1tnEp37qCaLYNRYsqoeyexiZLYao1TCYFe6A4fNkKHFKXFWUNo4/Qpmnn88DkdNpfuyaK1hDIRBsTAcSrC70KpztW9WFF1LSzaIL6wULsCwpQojTYZjJNlQC+gEd23NGlpP8IgLfQJRyqioPyjCrsYohPfx9hwUqs7CViYDSYh89HFXgMnZKA+TuUVdcyqPidCTGsbdiNmINgDGydqKLxsMvk3n5bhg1hLUGdesh4yCTn1tsJNTXY7cMYV01G9GCKQL+yC6zBJeYM1OkFIJTk8/2ic//3BkpgiSIG9r1c79bblVOzn2qem9e1JaQxxbGKMT1GRhSKMnpv+ECyodnEedFfTTHjMBzW9NLgq770xQT/YpaQZTATtRJfTNDUp1uNCKezLSzTDdrOPMcl2nqNug 2QqDlBq7 2BMFjmMtgL58M95o67MXdceAtoFzYhUXgGIUTlsR8ciXsHiFpTJ4verO41a1K9Jl/vdmLp0AAZV80Pe9JFwjMV4XMgwqpvbRNQCNlpohmnS7icPCHwUWgWi0YWctr35bQ+00kQa/lUkyVMQfY+q1r4weI/VMwQnd6kNo2WTXN0+aM58L7T70r32QyH0vN03Crf3RlN3fONibmXytqYmNEsR7lPmx8pL1+wCUdvQojDX0EjphoilcpGJ01fTdwLVamg1bm7d9cQyW1S6ZMs+w+tqyRZCSFGUVxO85uHycYi7iXXqoNZQB1/8KSAS3GUZ8aeFrDwgkFjR+Rhqk/IGxa5/LifLf7VRy7XrQMOOnnXZlRwqg0A8gzngkqZA2a4taMUAuxJOn7fqPuF4z/QY1hxyCaZ0GEWGcX7Xz1s7yXyp4HEGALi3cVcOkxLSfU/AihC+7ODyGq+5Vv56Wd4St1AQBvoLYCuNnsH7DdLPWSQ+FFWN9dE1dn/s/DcX3TShmpSJptpUXEfMm0XRvE/sFhsjNsCl4kd4JQQP+naT74LqG2hj4fz2I3CqQoHQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000019, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Hannes Reinecke Call mapping_set_folio_min_order() when modifying the logical block size to ensure folios are allocated with the correct size. Reviewed-by: Luis Chamberlain Reviewed-by: Matthew Wilcox (Oracle) Signed-off-by: Hannes Reinecke --- block/bdev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/block/bdev.c b/block/bdev.c index 9d73a8fbf7f9..8aadf1f23cb4 100644 --- a/block/bdev.c +++ b/block/bdev.c @@ -148,6 +148,8 @@ static void set_init_blocksize(struct block_device *bdev) bsize <<= 1; } BD_INODE(bdev)->i_blkbits = blksize_bits(bsize); + mapping_set_folio_min_order(BD_INODE(bdev)->i_mapping, + get_order(bsize)); } int set_blocksize(struct file *file, int size) @@ -169,6 +171,7 @@ int set_blocksize(struct file *file, int size) if (inode->i_blkbits != blksize_bits(size)) { sync_blockdev(bdev); inode->i_blkbits = blksize_bits(size); + mapping_set_folio_min_order(inode->i_mapping, get_order(size)); kill_bdev(bdev); } return 0; From patchwork Fri Feb 21 22:38:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13986413 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 A49D8C021B5 for ; Fri, 21 Feb 2025 22:38:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9064F280019; Fri, 21 Feb 2025 17:38:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 477C228001D; Fri, 21 Feb 2025 17:38:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E634E28000F; Fri, 21 Feb 2025 17:38:34 -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 1694228000F for ; Fri, 21 Feb 2025 17:38:34 -0500 (EST) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id B569FB19B1 for ; Fri, 21 Feb 2025 22:38:33 +0000 (UTC) X-FDA: 83145417306.26.D6ACD2D Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf06.hostedemail.com (Postfix) with ESMTP id 05A4418000A for ; Fri, 21 Feb 2025 22:38:31 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=KovaJ9el; spf=none (imf06.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177512; h=from:from:sender: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:dkim-signature; bh=uqPIF+VvQBHBH50rSFfIRgR8/dA90Fp8sC9NPmrqGVY=; b=GNlVcx00K/TYHgMeEwY03tjqzK7ePfxfkvipULDr/48srZvBAZ09KGcC1t3Ff3ATt8Jh1N ajRjA7dlWwv9vWKe1m7pNyA6Tun47qKSvs3bPwZzxqdiinKMFJHK5Gdbn33IX0wg+vCEUd sXuXxTIoxzLCcWQz5TDclSq0VJgy5dg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177512; a=rsa-sha256; cv=none; b=RjmUEgMXHZVeJcpIJwC4/UVzxKwPtyYvC/kw5k0Yju5D8n6nTVMXLNT9/RxjtR+LIoomwK qXEtzFG+hEKhOLwsdTvwXpLh/tHZHtI9oGKQxzINEPqo8qJXLMZBpjom8Ppi43zLD9g9MK khBhxP6KaiUIdv+rfvTFJYKmRxckGNM= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=KovaJ9el; spf=none (imf06.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=uqPIF+VvQBHBH50rSFfIRgR8/dA90Fp8sC9NPmrqGVY=; b=KovaJ9elkLijktp/Abx8dRypXr DRIMF2gDcno3sOYSd7AGjBhj7LPwqbloLT/XVcG9RyJjaqI0uBUiA0CHb97ewv5bYFhn04oQmPtqJ l9yUhtcJXseNVC7p6LDh8imdU0/Htn7uzKBiNWzZfcKCSixHqG1iZ3KmQJOEdWnvNH6jIf2Q5sPaV xv9i4Tb8GOLEZEeiRfuTie8IDbiq+Ce++8Kzl6AYKumyoPHbtCeAirWEII6l6/u5NLm/2BmmwCx2A sB8eSjBO5fTJeTXRUXGEzwTD1o1+uGCxPwQy+zwwJC1zFciCUVgZqlyDFUmwxhnQLEzs7RNExo3Cw kHeAkTkQ==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlbf7-000000073DF-40fU; Fri, 21 Feb 2025 22:38:25 +0000 From: Luis Chamberlain To: brauner@kernel.org, akpm@linux-foundation.org, hare@suse.de, willy@infradead.org, dave@stgolabs.net, david@fromorbit.com, djwong@kernel.org, kbusch@kernel.org Cc: john.g.garry@oracle.com, hch@lst.de, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org Subject: [PATCH v3 7/8] block/bdev: lift block size restrictions to 64k Date: Fri, 21 Feb 2025 14:38:22 -0800 Message-ID: <20250221223823.1680616-8-mcgrof@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221223823.1680616-1-mcgrof@kernel.org> References: <20250221223823.1680616-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam-User: X-Rspamd-Queue-Id: 05A4418000A X-Rspamd-Server: rspam07 X-Stat-Signature: 68cdr8op7hya9o1xs3417zo15syf8rm3 X-Rspam: Yes X-HE-Tag: 1740177511-709464 X-HE-Meta: U2FsdGVkX19J2Fx83SE5A6e1Rzr2AbPk3MuY9py0qmsM4veanNzPG6J2PONZqoGnvpLms+fd35+8NaiS25qkNhezo/i9Tx9V7cUVGhqHuTbYIWIb24UQN1U+PosO38k5xYLbjgSyHVw2xaciqTwcnp2duL9BhrTx9kW3FkVyjSgJ8XRb0xFv50BNw14SIqptzo7XjC48ZYgP/8qy0rSvkyhwZl9qOlLWVnzKLGgCqx4KYTr7IMnQ/CyiX7dQ0bZXOc/g9gCeOow7BF5c6aZMPeRZg6wsyIVT/vCRgX4awZjfcTLrK2Y4EfQa5ywl0h9oUCsrrIrCKc8svgvBjwMvV1gR2dMj82htgBzUgn0qHZvlXmmSm7hQIjFz0Yl1sG3tBim/GLayAI3xFxX5mBiiHRkn6+/SAz80bveUR9APJ2cZ4sg41nyRBl+7qXmeVhKrIEV+j7So3U2ce3Ox9Tet6eE+9H8ZD09eUYS8xMF5HbbafHp2IfO7hHr+EInJmVaZC6Qm73llh8Yi+awxXQUtIDsxpHlvdtnqZKCl/746EEfbVU5hso4+ArmB9L74XfB8OTpGzlYC3ScQR8U+JZOJpyt0Y/N8wT86de/9hwg4oWXm8Z3TzNRNRPglT6AHITM1k90dB5StILZnImjdsBExK6aj9tPNFfu9CwjOn38n07PjR5qM4ZpDFufQQYp1mjBS4NPkhccCrXlbgQ+m3vbzdxQoWdkxSgEOAPyJVc7jv7P0jvMhY0LyCn5plhTedURPDsG1Pji0nHZyJuyrdYK1Wo769bGZ6eQsSRlP1L4ZmmV22uaB7Gkr4envv0nc0hdIM7fWNHeXGSrdGXhiUFU2QyD3XulkPRDZBlP2Yy9HUp7EJ1FeeYxwCVnUMGHBB55M5ZO/JuwtXRCsGJH/8cKyEyTJc/bUFApx/g94YJOhwuAAH18fXHsnyCJ2OqzLjj0orvOcyLa3NsF7/oSBXOd KQrrJ578 nrgVMYIev9F1kaJNkISBD3pD+Jiv+cosiNXgtyIviyaQwkO+zXJlCDi6Qil1j6cRE3DZNQBSmJ7KGp1ypvqZ0ebISB6whWtIsDq81mg3WKXUenwB3phNAQYjn6a3gQu7xZl4XY/QtoibjJIym+r7CgOjYK1Dz+ip/pm/ZLNKwPH2mYZkDrP/uLOn1Bs6u48uYzisHYVJY/SdO1Nko+i/DqMmHZBnndRwAihz0NCUzit8o11Ca6B+UEFDSlltTmSI8ah7yVLoLnw/8FV1QJ5vyH2fbJzdUb5yf2XZwV69wfqGZYZnTCDJyLVM1MbZr7KUeNzYVGMkn3r82HEHRDgHrhDnpB5q1XBlWBQ+xGAGCwiEvTt8KGKosr6QPfEnucvuZd2ng7GAnMXCH1uXw9PqJfLXFEx9RITNFFDPBcwqs9TmeHvBKdP2Huh0xuR0T6e/RZ1iDtAM7EOsboszKQUB8F73aSuP7hRmVaPz4HzRD9N2BW5IZeZNGSgfCEQIuCQuW3wmM6vLWq5glRr8uvLxFdPV2iLCx48ZI2+eBjxNNOZOiedQPL0F0gGIwmw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000003, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: We now can support blocksizes larger than PAGE_SIZE, so in theory we should be able to lift the restriction up to the max supported page cache order. However bound ourselves to what we can currently validate and test. Through blktests and fstest we can validate up to 64k today. Reviewed-by: Hannes Reinecke Reviewed-by: Matthew Wilcox (Oracle) Signed-off-by: Luis Chamberlain --- block/bdev.c | 3 +-- include/linux/blkdev.h | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/block/bdev.c b/block/bdev.c index 8aadf1f23cb4..22806ce11e1d 100644 --- a/block/bdev.c +++ b/block/bdev.c @@ -183,8 +183,7 @@ int sb_set_blocksize(struct super_block *sb, int size) { if (set_blocksize(sb->s_bdev_file, size)) return 0; - /* If we get here, we know size is power of two - * and it's value is between 512 and PAGE_SIZE */ + /* If we get here, we know size is validated */ sb->s_blocksize = size; sb->s_blocksize_bits = blksize_bits(size); return sb->s_blocksize; diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 248416ecd01c..a97428e8bbbe 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -267,10 +267,16 @@ static inline dev_t disk_devt(struct gendisk *disk) return MKDEV(disk->major, disk->first_minor); } +/* + * We should strive for 1 << (PAGE_SHIFT + MAX_PAGECACHE_ORDER) + * however we constrain this to what we can validate and test. + */ +#define BLK_MAX_BLOCK_SIZE SZ_64K + /* blk_validate_limits() validates bsize, so drivers don't usually need to */ static inline int blk_validate_block_size(unsigned long bsize) { - if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize)) + if (bsize < 512 || bsize > BLK_MAX_BLOCK_SIZE || !is_power_of_2(bsize)) return -EINVAL; return 0; From patchwork Fri Feb 21 22:38:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13986405 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 8E0A2C021B3 for ; Fri, 21 Feb 2025 22:38:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0FB2E280018; Fri, 21 Feb 2025 17:38:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id F0711280017; Fri, 21 Feb 2025 17:38:33 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D566A28001C; Fri, 21 Feb 2025 17:38:33 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id A543C280015 for ; Fri, 21 Feb 2025 17:38:33 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 54ACFC08E3 for ; Fri, 21 Feb 2025 22:38:33 +0000 (UTC) X-FDA: 83145417306.29.19906C3 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf30.hostedemail.com (Postfix) with ESMTP id 63A0580004 for ; Fri, 21 Feb 2025 22:38:31 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=qfI+6CVA; spf=none (imf30.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740177511; h=from:from:sender: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:dkim-signature; bh=dPYsaEMRasFiFhMNTtOpkluc57HIzwvU4rUiMYmi9nk=; b=1v8ap4mKLHgEYC8jxAioi6FLen3qPp80LFlJK8/FV4VKspu9SsjbcQyimLXHtv9betIZ6+ V7ElQFfJm5hC2bM98JttSF0VosXb3Zkw8mheWw8aCwpmOXNOUt4yq5gewYjYU9SkmZhzLU 5xuvJ2YUHYfpgbdPyZEvR7iMxu/TZng= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=qfI+6CVA; spf=none (imf30.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740177511; a=rsa-sha256; cv=none; b=dmUrBzzGcn5pZzw/Mv1WskGNWcy19YiyPDIrKE5cdEXIXrORNPXiSWAr4QwuSt5XgbAHqg VjHR5n+0+rVOqdQWkOraLKcf8mu8ugjXP/l9OOyVP6+Zvc3qUB9uDmlseBmt/mqD1jWTma 12Du33SMFyU1pAwWd+Zr1UVx96f2pok= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=dPYsaEMRasFiFhMNTtOpkluc57HIzwvU4rUiMYmi9nk=; b=qfI+6CVA3tipgW2HoFB+Sph6kC ojVbYPteH2HN9YNIRQNgabxVOxbyu3vzNyWvcv3QbydCSqjtYEdETy6GhjYsXGmXOCgLRADt5Riul gId1AxDN9dF2oJR5t3/LL0ik7MU+eLrERaAhdwNDmE+OwEgiGDfgIepYOT7kwkzzJ7oOkWQt5vtyx f9kws4SbOJoxp26AbIBPJq6lE0zge4Mc3mCg891tFx45dI0gbb4dw2do/e3cbtflZ1JWK7hmP3Fxk oeIUsxXFbB/ahkHzLQcFsLTsiMgkf978tsMNCly6+41cEHR4AljXIfdUIbUuP0CE6LZ+QsyN1B5cn gBsm3zOQ==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tlbf7-000000073DH-49mH; Fri, 21 Feb 2025 22:38:25 +0000 From: Luis Chamberlain To: brauner@kernel.org, akpm@linux-foundation.org, hare@suse.de, willy@infradead.org, dave@stgolabs.net, david@fromorbit.com, djwong@kernel.org, kbusch@kernel.org Cc: john.g.garry@oracle.com, hch@lst.de, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org Subject: [PATCH v3 8/8] bdev: use bdev_io_min() for statx block size Date: Fri, 21 Feb 2025 14:38:23 -0800 Message-ID: <20250221223823.1680616-9-mcgrof@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250221223823.1680616-1-mcgrof@kernel.org> References: <20250221223823.1680616-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 63A0580004 X-Stat-Signature: kgz3ijr9yfcz71mfz11kdjz4msoq81d5 X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspamd-Server: rspam03 X-Rspam: Yes X-HE-Tag: 1740177511-149635 X-HE-Meta: U2FsdGVkX18LMMb+Bp9KgrOyY+6DYqCzj0PI93jdLG8rFnUuN6CyBcPgrV+DyksA03YwNN8mdt7kuzaw9sEFuqCDTmrBPB4UK6ytOc06oViiWeFanuTKe+tBx1SnmxN0ytgNkAfRfNvcGwGjBKaFIhAGiAjHggxNwJyMcc4njgTlqHqyJ+jIohaDTdA1s+RoCdF1796dgnNToXiQrZNFGZFYq00DtlcdPSb8KodudLQMOZrgFQvPGbDn1rM8PjJybTCMUGH23opeL6hGaHpbvPk8GRwrY+Y+lA2NSNXDa4JXWfFw3ECW5tVeuyVd7+som1KsFfE1zU5sZoJV69iPDR+SxmVR77qCaYoveIC8I6Oc+VbDDhauvt5xqdEjXKyEV1D/9CeSUdy09ns4Fr6iFs1v/7wbX1eVB8cgkdEqhrH2uTQLBZjIdaTlN0onhNzTp2l3VmfHlx0J6p7px1BFic5J524Lvb5ZtPjjgh3V4MOxvJUke35RZsvbpN1bF3G9U+7B1R3uwbpEbvq9bO2LGu9tZ1UrtHFLIiI4oAe2Rof7r6iwqqstT5h4BU2gEpnHOXIJs/NdZ7ZgeuNxdXhqanuUm1xA7TwD5cObYZ+EiTAvXUmec2GUI8824qr+UFJah67soin35ytdGDslZo/3w4fKMDfFjs4q/ePflNBOvkCENcx5IY7v3JoHPy+ENceDj8HEvrS8rKpmHgK5ybAMAKmPKvnCpbfBjRRR90TFzX2ktudrIvCRuNamGBoAOgKrRQVwhbflT7SxMCxhKFpPCY3aVcaptHkMLVNYUH/FeWPcsUo/7RhXkSEZasQ84NoR5Es6Nd0XMIUpcazFpLivNJbZvRzLgzOk4kuOJ9BBrtROJFOlFxBa6M3eDPuqApEFZSulm5eAj2djs9KPHFMSj/HHnwQVvEzip/kLAeGxx7UcvXn6PW4pJaYD2KXK8iNxU0NP5lIqwx4VkTM5f+H K1/al1oZ XF34ehwpg8tbeK0Qy1EW1OLKnsMvHqnepvVsKjbT51EGAX6DlECWYLTSeVepxX6gcBBHOkwm4tgOocdnvhLYE3tmU1OreL5itLetu/2gPEw92+2j51ysL0Ozqd14FN+kMMjnTYTgPRtT+ggMSUVSzMISryBo17DxVvwPFGuQVJiI833o2iaQcO5TDG27Z8CK2GwG1QVzGeuIXBbAZrjskIwESjUi1NVUimoTJYRAcC6R8wqBwrFM7eVoH9vI1H9Teci9BRMp2SbVENgzLQADHIGR5Fz9MJIiuNZtx5iM9GmDIlmyxFK5iFBbHOYyd77fWQS1XOfed8Pn6lIHYjOjRCjnqjPamrXKTPVRwCxrGCwv7DVZ0VzzxNituqk8lS/ZRetOCzJQ6r+bequFz9gx/rnFC2P7t+vpufWzx4IdTmouV5NWQCVz7fdIwxNBcQ0mKQAVVuZFlqhxae/B7fawLIryWLiS4aoGNd84UhevVhH7gOMAnaUmJKBhFgaKcSS05X7I3nhqCigJjxCINtMfu1Uvl/2OjkrsTNmY5mPZlgVuci/8= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000019, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: You can use lsblk to query for a block device block device block size: lsblk -o MIN-IO /dev/nvme0n1 MIN-IO 4096 The min-io is the minimum IO the block device prefers for optimal performance. In turn we map this to the block device block size. The current block size exposed even for block devices with an LBA format of 16k is 4k. Likewise devices which support 4k LBA format but have a larger Indirection Unit of 16k have an exposed block size of 4k. This incurs read-modify-writes on direct IO against devices with a min-io larger than the page size. To fix this, use the block device min io, which is the minimal optimal IO the device prefers. With this we now get: lsblk -o MIN-IO /dev/nvme0n1 MIN-IO 16384 And so userspace gets the appropriate information it needs for optimal performance. This is verified with blkalgn against mkfs against a device with LBA format of 4k but an NPWG of 16k (min io size) mkfs.xfs -f -b size=16k /dev/nvme3n1 blkalgn -d nvme3n1 --ops Write Block size : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 0 | | 16 -> 31 : 0 | | 32 -> 63 : 0 | | 64 -> 127 : 0 | | 128 -> 255 : 0 | | 256 -> 511 : 0 | | 512 -> 1023 : 0 | | 1024 -> 2047 : 0 | | 2048 -> 4095 : 0 | | 4096 -> 8191 : 0 | | 8192 -> 16383 : 0 | | 16384 -> 32767 : 66 |****************************************| 32768 -> 65535 : 0 | | 65536 -> 131071 : 0 | | 131072 -> 262143 : 2 |* | Block size: 14 - 66 Block size: 17 - 2 Algn size : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 0 | | 16 -> 31 : 0 | | 32 -> 63 : 0 | | 64 -> 127 : 0 | | 128 -> 255 : 0 | | 256 -> 511 : 0 | | 512 -> 1023 : 0 | | 1024 -> 2047 : 0 | | 2048 -> 4095 : 0 | | 4096 -> 8191 : 0 | | 8192 -> 16383 : 0 | | 16384 -> 32767 : 66 |****************************************| 32768 -> 65535 : 0 | | 65536 -> 131071 : 0 | | 131072 -> 262143 : 2 |* | Algn size: 14 - 66 Algn size: 17 - 2 Reviewed-by: Hannes Reinecke Signed-off-by: Luis Chamberlain --- block/bdev.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/block/bdev.c b/block/bdev.c index 22806ce11e1d..3bd948e6438d 100644 --- a/block/bdev.c +++ b/block/bdev.c @@ -1276,9 +1276,6 @@ void bdev_statx(struct path *path, struct kstat *stat, struct inode *backing_inode; struct block_device *bdev; - if (!(request_mask & (STATX_DIOALIGN | STATX_WRITE_ATOMIC))) - return; - backing_inode = d_backing_inode(path->dentry); /* @@ -1305,6 +1302,8 @@ void bdev_statx(struct path *path, struct kstat *stat, queue_atomic_write_unit_max_bytes(bd_queue)); } + stat->blksize = bdev_io_min(bdev); + blkdev_put_no_open(bdev); }