From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 93E822580ED; Sat, 25 Oct 2025 03:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363007; cv=none; b=EXSSj3ZTMg3lkd0T57oQLNFfQOCctuV3hMvPS4O/zs7c+RrqwHpEOi1CdQI7vBxQ1nzNMhklcRgcu1JbuZlFmTFs98RZPjjUMKfdSd68rjOfJ2RHiVJaBmaPNOps6bqocSh20pw040nEWRI3z3p1oRiKG4nIDKEG7eydaVRkTIo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363007; c=relaxed/simple; bh=oqEqRfo0WOWZL1A+A4O5vHFbv2HDQCYSx8eM6XxUJNI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=guS/FiviA8lF1H4FoyNocmJ6DtCzh8rASx7XfKyxo9xSod6Jc9y6HFJ2jYjqkOZrfsZbWlYPF/GkfDsuh/7X4j9cgb7RvfJhWQe4msc1JJfw1YgSg1NxWqW1AiTKAfb0q/RZQ7K4S0ammNObPB+atK3Evtacv9/ywwP1Ss6Ke3U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcR6BT0zKHMMH; Sat, 25 Oct 2025 11:29:11 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 8A72D1A08C2; Sat, 25 Oct 2025 11:30:03 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S5; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 01/25] ext4: remove page offset calculation in ext4_block_zero_page_range() Date: Sat, 25 Oct 2025 11:21:57 +0800 Message-Id: <20251025032221.2905818-2-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S5 X-Coremail-Antispam: 1UD129KBjvdXoWrZFW5uw1fAr1rZr1UZF1UJrb_yoWkJFc_A3 yv9w48Ww1rJrnak3W5A3yYqFyvk3W8Crn8uFn8tryrXFWrZFs5X3WkKryY9rs8WF47urs8 A34kXF45KrnF9jkaLaAFLSUrUUUUjb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbP8FF20E14v26rWj6s0DM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M28IrcIa0xkI8VA2jI8067AKxVWUGwA2048vs2IY02 0Ec7CjxVAFwI0_Gr0_Xr1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVW7JVWDJwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM2 8EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AI xVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20x vE14v26r1Y6r17McIj6I8E87Iv67AKxVW8Jr0_Cr1UMcvjeVCFs4IE7xkEbVWUJVW8JwAC jcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2Y2ka0x kIwI1lw4CEc2x0rVAKj4xxMxkF7I0En4kS14v26r1q6r43MxAIw28IcxkI7VAKI48JMxC2 0s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI 0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE 14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY6xAIw20EY4v20x vaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8 JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7VUjIztUUUUUU== X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I6AABsH Content-Type: text/plain; charset="utf-8" From: Zhihao Cheng For bs <=3D ps scenarios, calculating the offset within the block is sufficient. For bs > ps, an initial page offset calculation can lead to incorrect behavior. Thus this redundant calculation has been removed. Signed-off-by: Zhihao Cheng Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/inode.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index e99306a8f47c..0742039c53a7 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -4157,9 +4157,8 @@ static int ext4_block_zero_page_range(handle_t *handl= e, struct address_space *mapping, loff_t from, loff_t length) { struct inode *inode =3D mapping->host; - unsigned offset =3D from & (PAGE_SIZE-1); unsigned blocksize =3D inode->i_sb->s_blocksize; - unsigned max =3D blocksize - (offset & (blocksize - 1)); + unsigned int max =3D blocksize - (from & (blocksize - 1)); =20 /* * correct length if it does not fall between --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 C327624C66F; Sat, 25 Oct 2025 03:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363007; cv=none; b=FwPvTdWdbD0WlynoRtIHcAeKAEqh/Bpu/SAjXEjXqTri8Nju8zd6CX7P/Ykal0ulSZaTZgS0ZPwAkEmVDne+EX2IUeI9VtlRVx+SIROI5hktc8r2MJ5Xulv7xWqy7/eBp2kJSpDZw86+nVVtv/Nt3gHg3l3PSEJslunTx4zJHoU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363007; c=relaxed/simple; bh=XmVFctZ6RkEHD80dF9plNNnZF5PKlfN5E7U3OBzDcMk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=B9p1qWLnEPkLkxse7jZWJpICQobQUtrRLYqiivCgCT3jErS4SD7YQ3JxJoQb8rtQ8GU+y2zRK6uKJ9Z0GX1oX9MYrI+fSLqj3bs9w3FMMGtDuJmXg5j2YLHFqF1piuaBfg3mwXGFx7A+e6f2srb1/a1zWFl8JLc1kk8Atm42mvY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcR6Rb4zKHMMH; Sat, 25 Oct 2025 11:29:11 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 940001A101B; Sat, 25 Oct 2025 11:30:03 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S6; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 02/25] ext4: remove page offset calculation in ext4_block_truncate_page() Date: Sat, 25 Oct 2025 11:21:58 +0800 Message-Id: <20251025032221.2905818-3-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S6 X-Coremail-Antispam: 1UD129KBjvJXoW7Kw1fJFy7WrWfAr1kJr48Xrb_yoW8Jw48pF y5K3ykur17uFyjga1IvFn5Xryak3ZrGFWUXFWYq345WryIqF1fKr97K3ZYqFW0qrWxXayv qFs0yrWxZa17A3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQj14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jryl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_Gr1l F7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8cxan2 IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxGrwCF x2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14 v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY 67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr0_Cr1lIxAIcVCF04k26cxKx2 IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_ Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdManUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJGQABsv Content-Type: text/plain; charset="utf-8" From: Baokun Li For bs <=3D ps scenarios, calculating the offset within the block is sufficient. For bs > ps, an initial page offset calculation can lead to incorrect behavior. Thus this redundant calculation has been removed. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/inode.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 0742039c53a7..4c04af7e51c9 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -4183,7 +4183,6 @@ static int ext4_block_zero_page_range(handle_t *handl= e, static int ext4_block_truncate_page(handle_t *handle, struct address_space *mapping, loff_t from) { - unsigned offset =3D from & (PAGE_SIZE-1); unsigned length; unsigned blocksize; struct inode *inode =3D mapping->host; @@ -4192,8 +4191,8 @@ static int ext4_block_truncate_page(handle_t *handle, if (IS_ENCRYPTED(inode) && !fscrypt_has_encryption_key(inode)) return 0; =20 - blocksize =3D inode->i_sb->s_blocksize; - length =3D blocksize - (offset & (blocksize - 1)); + blocksize =3D i_blocksize(inode); + length =3D blocksize - (from & (blocksize - 1)); =20 return ext4_block_zero_page_range(handle, mapping, from, length); } --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 CAE8C2586E8; Sat, 25 Oct 2025 03:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363008; cv=none; b=PsdwySagitvq3xcjxanMmVKktvq2rPzID4f5EeG8iLBDbdQ5bmxHdy6zmvJUXo6dqDU7F2RRJgAkipZ8Wkt88JZNo5DZsLPPxQy1NMEo5ZwyzMTTv/aU27fiTulDD5AhVw3nModbctNnWqOrdwChqyari2DLoIfIZ8t4QktwAX0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363008; c=relaxed/simple; bh=2SHImZoJ2obw5+EaYGXBRsuMjz8VFs0jcJgay98MzVI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gcaetKj9Sq1SNxFAABR9tTJDalyjZ6gobb6Ek0mbp2kzWp+SXme686JPSypLFs2tDXam2QPEKWuJQlFtcCLup5GszDfFQQlaNA/w0EOudGNze97WOAPlrHIMvk3AI9T1HkO7/8x/kR/ndkS6TZbZrmDxPMRA1TVQ+aQ6ib1+rxk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcK0mGXzYQtlp; Sat, 25 Oct 2025 11:29:05 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id B72951A17E2; Sat, 25 Oct 2025 11:30:03 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S7; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 03/25] ext4: remove PAGE_SIZE checks for rec_len conversion Date: Sat, 25 Oct 2025 11:21:59 +0800 Message-Id: <20251025032221.2905818-4-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S7 X-Coremail-Antispam: 1UD129KBjvJXoW7AFW3CFW8GFW5JFy8urykXwb_yoW8Ar1rpF 43GryUGrWYvF1Uua9rXF45Ga4Skw13Kw1UJ39xW3yfWFy7Wr4fXr9aqFyFqFW0qrZ2vFWU ZFs8JFWftr1rCaUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQ014x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JrWl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_Gr1l F7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8cxan2 IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxGrwCF x2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14 v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY 67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI 8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v2 6r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjfUo6wZDUUUU X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I6QABsG Content-Type: text/plain; charset="utf-8" From: Baokun Li Previously, ext4_rec_len_(to|from)_disk only performed complex rec_len conversions when PAGE_SIZE >=3D 65536 to reduce complexity. However, we are soon to support file system block sizes greater than page size, which makes these conditional checks unnecessary. Thus, these checks are now removed. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/ext4.h | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 24c414605b08..93c2bf4d125a 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -2464,28 +2464,19 @@ static inline unsigned int ext4_dir_rec_len(__u8 na= me_len, return (rec_len & ~EXT4_DIR_ROUND); } =20 -/* - * If we ever get support for fs block sizes > page_size, we'll need - * to remove the #if statements in the next two functions... - */ static inline unsigned int ext4_rec_len_from_disk(__le16 dlen, unsigned blocksize) { unsigned len =3D le16_to_cpu(dlen); =20 -#if (PAGE_SIZE >=3D 65536) if (len =3D=3D EXT4_MAX_REC_LEN || len =3D=3D 0) return blocksize; return (len & 65532) | ((len & 3) << 16); -#else - return len; -#endif } =20 static inline __le16 ext4_rec_len_to_disk(unsigned len, unsigned blocksize) { BUG_ON((len > blocksize) || (blocksize > (1 << 18)) || (len & 3)); -#if (PAGE_SIZE >=3D 65536) if (len < 65536) return cpu_to_le16(len); if (len =3D=3D blocksize) { @@ -2495,9 +2486,6 @@ static inline __le16 ext4_rec_len_to_disk(unsigned le= n, unsigned blocksize) return cpu_to_le16(0); } return cpu_to_le16((len & 65532) | ((len >> 16) & 3)); -#else - return cpu_to_le16(len); -#endif } =20 /* --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 CD8B3258CD9; Sat, 25 Oct 2025 03:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363007; cv=none; b=puLYGxxPsGC9L0y7RfspoIpBuzubuZGEziLtXBQVBHzW2BBVBv1HXqxe77tGrA0z80LKTxE+KnfxnE9uZURS6mhjtI86JTTs94aTOeN42vgPtuMlqhmDyyLmGALzFoz7TBtf7jH2pxujhScvMnkTBw6l4SslIEcWnqSNTWTLKD8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363007; c=relaxed/simple; bh=gD6jk6oN0DA/nptDxnEOjVbmdotmN01yMgX7ip2fJd0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QuhFC3n1tvm16Y6724cgIaiKNKyYwAkzr9QMKaQSvdEi6pYpSJYXLz7yP7E/OwFGk0FL95xTzE2dPufxh+WgZl8DWvJkqbrHdqA6ME15Acop9bKOU9926xYdDX73bk9vt5He7LISV1IlXx9IN1d/5OlkH+IM1plr8/CrYmnZ9xI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcK1NXzzYQtmT; Sat, 25 Oct 2025 11:29:05 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id CF7521A17EA; Sat, 25 Oct 2025 11:30:03 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S8; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 04/25] ext4: make ext4_punch_hole() support large block size Date: Sat, 25 Oct 2025 11:22:00 +0800 Message-Id: <20251025032221.2905818-5-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S8 X-Coremail-Antispam: 1UD129KBjvdXoW7XrWDZr1kXFy8AF1UGw17Wrg_yoWDCrXEya 48ur4xuw4rJr1v9rZYyr1YqFsFk348Crn8u3y3Gry5X3W0van3J3WDWF4S9a1UWF48WrZx Aw1DXFWxtF1xWjkaLaAFLSUrUUUUjb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbm8FF20E14v26rWj6s0DM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M28IrcIa0xkI8VA2jI8067AKxVWUAVCq3wA2048vs2 IY020Ec7CjxVAFwI0_Xr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28E F7xvwVC0I7IYx2IY67AKxVW7JVWDJwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr 1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0D M2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjx v20xvE14v26r1Y6r17McIj6I8E87Iv67AKxVW8Jr0_Cr1UMcvjeVCFs4IE7xkEbVWUJVW8 JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2Y2 ka0xkIwI1lw4CEc2x0rVAKj4xxMxkF7I0En4kS14v26r1q6r43MxAIw28IcxkI7VAKI48J MxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwV AFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv2 0xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWxJVW8Jr1lIxAIcVCF04k26c xKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAF wI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I6gAAsE Content-Type: text/plain; charset="utf-8" From: Baokun Li Since the block size may be greater than the page size, when a hole extends beyond i_size, we need to align the hole's end upwards to the larger of PAGE_SIZE and blocksize. This is to prevent the issues seen in commit 2be4751b21ae ("ext4: fix 2nd xfstests 127 punch hole failure") from reappearing after BS > PS is supported. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi --- fs/ext4/inode.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 4c04af7e51c9..a63513a3db53 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -4401,7 +4401,8 @@ int ext4_punch_hole(struct file *file, loff_t offset,= loff_t length) * the page that contains i_size. */ if (end > inode->i_size) - end =3D round_up(inode->i_size, PAGE_SIZE); + end =3D round_up(inode->i_size, + umax(PAGE_SIZE, sb->s_blocksize)); if (end > max_end) end =3D max_end; length =3D end - offset; --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 D0644259CA5; Sat, 25 Oct 2025 03:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363008; cv=none; b=d6GWM+WE1+QFN4aVGa04SpGcdgIw99ZkgncC1alPKh8Ujixo4Vf0dPksXjfBp5hZyQjayXxdZFTCepdLEp55Zn2N1voRKSxIuXCcoiHLVFjMK0H9WMIiR4MkHO8rvLgqXHWMq6uK/kKAwMx7UhCXVW7WndblDZ+rcBqjvw/PWQE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363008; c=relaxed/simple; bh=R4vnuJrUkJWqkh1YwVJ86sGr2eyaRmjTMNncDSocLA0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=HfakDc22zrHcoplKm59s6E9pNXVQeK38WU0AT6HI9N203FQRvKfkiJtw+jonbCi8ivR/W+EnR5dG2umiuH9UMpv9zrI/CkonQyamrJC+AECsLxu0gQnxkf6eweH8USniJZ4yf9LrM9hOz9wG1Ctnge0ftcmC3Vo9XhTCv4WPlew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcS15h7zKHMNW; Sat, 25 Oct 2025 11:29:12 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id D3CB31A17F0; Sat, 25 Oct 2025 11:30:03 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S9; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 05/25] ext4: enable DIOREAD_NOLOCK by default for BS > PS as well Date: Sat, 25 Oct 2025 11:22:01 +0800 Message-Id: <20251025032221.2905818-6-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S9 X-Coremail-Antispam: 1UD129KBjvdXoW7XF18GFWrWw1UZw4DGw4rKrg_yoWfAwbEva yfJrWUGrs5tr1S93WruayUJFsYkw48ur18Gws5tr13XFn0qrWxX34qqr98uF15uF4FqrWf Ars5XF13GFy2gjkaLaAFLSUrUUUUjb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbm8FF20E14v26rWj6s0DM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M28IrcIa0xkI8VA2jI8067AKxVWUAVCq3wA2048vs2 IY020Ec7CjxVAFwI0_Xr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28E F7xvwVC0I7IYx2IY67AKxVW7JVWDJwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr 1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0D M2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjx v20xvE14v26r1Y6r17McIj6I8E87Iv67AKxVW8Jr0_Cr1UMcvjeVCFs4IE7xkEbVWUJVW8 JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2Y2 ka0xkIwI1lw4CEc2x0rVAKj4xxMxkF7I0En4kS14v26r1q6r43MxAIw28IcxkI7VAKI48J MxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwV AFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv2 0xvE14v26r1I6r4UMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWxJVW8Jr1lIxAIcVCF04k26c xKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAF wI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJGwAAss Content-Type: text/plain; charset="utf-8" From: Baokun Li The dioread_nolock related processes already support large folio, so dioread_nolock is enabled by default regardless of whether the blocksize is less than, equal to, or greater than PAGE_SIZE. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/super.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 894529f9b0cc..aa5aee4d1b63 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -4383,8 +4383,7 @@ static void ext4_set_def_opts(struct super_block *sb, ((def_mount_opts & EXT4_DEFM_NODELALLOC) =3D=3D 0)) set_opt(sb, DELALLOC); =20 - if (sb->s_blocksize <=3D PAGE_SIZE) - set_opt(sb, DIOREAD_NOLOCK); + set_opt(sb, DIOREAD_NOLOCK); } =20 static int ext4_handle_clustersize(struct super_block *sb) --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 CEF44259C92; Sat, 25 Oct 2025 03:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363009; cv=none; b=PwNVhHbh/THz0S8047kpm0/ukLjZ2HfizG0tjZV0AMPQt3pzxr4cZtGGaTOKiNgInRHQu88KltMRxxTa12eIPwWvn6ceGlN7b40mHqAGdRK0mB40gnNIr3Axhlo4aH2gpweH8PjfiYu0kDKpWWHe4qpxPthvkSH55WdU/HVSFIA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363009; c=relaxed/simple; bh=YRz6t3tNGuDdfxm1rkoTMO37jW0qjNisU+Z04VXuTqw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bK1SU7UuIaBSPASjb3UYJBqNProimSOPFMwuupZie7KYSIPBFRkaQsKcUNnPlSb0qrgAUcerWy0v9Sn4Oq2aAyd62mNq7bahTyv+BzBhGTf7nvbLLf3RETRUYDWnYGRpEGQ0N5WBXV5FtmuCNTuuXgXGbM8U1DlFHDVrlSMFAu0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcS1vzyzKHMNv; Sat, 25 Oct 2025 11:29:12 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id EAD841A0A86; Sat, 25 Oct 2025 11:30:03 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S10; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 06/25] ext4: introduce s_min_folio_order for future BS > PS support Date: Sat, 25 Oct 2025 11:22:02 +0800 Message-Id: <20251025032221.2905818-7-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S10 X-Coremail-Antispam: 1UD129KBjvJXoWxJrWfJFyxtr4xKFyrCw13CFg_yoW8Kr4rpF nxCFyfGrW8Zry8uFs7WFsrX348Kay8KayUXr4S93W5urWaq3409rZrtF15AFyjqFWxXFWS qF1UKry7Cr1akrDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQ214x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1UMIIF0xvE42xK8V AvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E 14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjfUo0PSUUUUU X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I6gACsG Content-Type: text/plain; charset="utf-8" From: Baokun Li This commit introduces the s_min_folio_order field to the ext4_sb_info structure. This field will store the minimum folio order required by the current filesystem, laying groundwork for future support of block sizes greater than PAGE_SIZE. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/ext4.h | 3 +++ fs/ext4/inode.c | 3 ++- fs/ext4/super.c | 10 +++++----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 93c2bf4d125a..bca6c3709673 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1677,6 +1677,9 @@ struct ext4_sb_info { /* record the last minlen when FITRIM is called. */ unsigned long s_last_trim_minblks; =20 + /* minimum folio order of a page cache allocation */ + unsigned int s_min_folio_order; + /* Precomputed FS UUID checksum for seeding other checksums */ __u32 s_csum_seed; =20 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index a63513a3db53..889761ed51dd 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5174,7 +5174,8 @@ void ext4_set_inode_mapping_order(struct inode *inode) if (!ext4_should_enable_large_folio(inode)) return; =20 - mapping_set_folio_order_range(inode->i_mapping, 0, + mapping_set_folio_order_range(inode->i_mapping, + EXT4_SB(inode->i_sb)->s_min_folio_order, EXT4_MAX_PAGECACHE_ORDER(inode)); } =20 diff --git a/fs/ext4/super.c b/fs/ext4/super.c index aa5aee4d1b63..d353e25a5b92 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -5100,11 +5100,8 @@ static int ext4_load_super(struct super_block *sb, e= xt4_fsblk_t *lsb, * If the default block size is not the same as the real block size, * we need to reload it. */ - if (sb->s_blocksize =3D=3D blocksize) { - *lsb =3D logical_sb_block; - sbi->s_sbh =3D bh; - return 0; - } + if (sb->s_blocksize =3D=3D blocksize) + goto success; =20 /* * bh must be released before kill_bdev(), otherwise @@ -5135,6 +5132,9 @@ static int ext4_load_super(struct super_block *sb, ex= t4_fsblk_t *lsb, ext4_msg(sb, KERN_ERR, "Magic mismatch, very weird!"); goto out; } + +success: + sbi->s_min_folio_order =3D get_order(blocksize); *lsb =3D logical_sb_block; sbi->s_sbh =3D bh; return 0; --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 17E131DE2A7; Sat, 25 Oct 2025 03:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363016; cv=none; b=a36vHekdV+Cnwyf0ZIn+97A0W+5xBb1vzZvpWyT3+lErvhnBcXJv0nvfnuum1BF96F5f5Ma9vBmzOr8ON9mQWNbvRSzVMlo2gqdRXTs0K4+20+h2YENfehp0b16gcuauNaBRcUWRB/ve8WxjsqM3Hkff0pkTT0mkm4fDUSVkE3M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363016; c=relaxed/simple; bh=HJG6BV4y/laly37/ga9zMZpAoAiq+tujKGnfMeijWwg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=d4CYGkT5e1PKnTd+96yIO7EP/MGtRfZSALlquBxVOM4M4E1Go5Xz9PmTYvZ27FdSQNF3d1A1tvfQSy4x0lQqnHjvzb6chFIwsBF+VjvY9YbFmAsSzl/mxU58bq5HB8X3KMZJS/HqegwLk1Jc5EmzwaHb7cK+XEaoAb+18lW81YY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcS20J6zKHMP3; Sat, 25 Oct 2025 11:29:12 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id F1A241A116C; Sat, 25 Oct 2025 11:30:03 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S11; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 07/25] ext4: support large block size in ext4_calculate_overhead() Date: Sat, 25 Oct 2025 11:22:03 +0800 Message-Id: <20251025032221.2905818-8-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S11 X-Coremail-Antispam: 1UD129KBjvJXoW7uw4DZw45Zw13CF1kKFy7trb_yoW8WF1xp3 Z3GryxGrWruFy8uanrWa9rJF15K3yxGFyUKFWa9ry3urW7ta4S9ry3KFy5tr4xXFWxuryS v3W5KrWfuF15Gw7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I6gAEsA Content-Type: text/plain; charset="utf-8" From: Baokun Li ext4_calculate_overhead() used a single page for its bitmap buffer, which worked fine when PAGE_SIZE >=3D block size. However, with block size greater than page size (BS > PS) support, the bitmap can exceed a single page. To address this, we now use __get_free_pages() to allocate multiple pages, sized to the block size, to properly support BS > PS. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi --- fs/ext4/super.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fs/ext4/super.c b/fs/ext4/super.c index d353e25a5b92..7338c708ea1d 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -4182,7 +4182,8 @@ int ext4_calculate_overhead(struct super_block *sb) unsigned int j_blocks, j_inum =3D le32_to_cpu(es->s_journal_inum); ext4_group_t i, ngroups =3D ext4_get_groups_count(sb); ext4_fsblk_t overhead =3D 0; - char *buf =3D (char *) get_zeroed_page(GFP_NOFS); + gfp_t gfp =3D GFP_NOFS | __GFP_ZERO; + char *buf =3D (char *)__get_free_pages(gfp, sbi->s_min_folio_order); =20 if (!buf) return -ENOMEM; @@ -4207,7 +4208,7 @@ int ext4_calculate_overhead(struct super_block *sb) blks =3D count_overhead(sb, i, buf); overhead +=3D blks; if (blks) - memset(buf, 0, PAGE_SIZE); + memset(buf, 0, sb->s_blocksize); cond_resched(); } =20 @@ -4230,7 +4231,7 @@ int ext4_calculate_overhead(struct super_block *sb) } sbi->s_overhead =3D overhead; smp_wmb(); - free_page((unsigned long) buf); + free_pages((unsigned long)buf, sbi->s_min_folio_order); return 0; } =20 --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 182431DE8BE; Sat, 25 Oct 2025 03:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363012; cv=none; b=jXkWcVGmP6ZOZArg1z0VgjLHszXDVOKr3Dvz0vsHjx6AxaTpTnkEt+WtQk0dEb/hktPlUpgtujgN7dqbvo1sdjJXj021kLsAiU2u4ov9r8id7pNR06veRLOJaufiCVz5G83dHDQ8OinfdelXhBMFNjqcch6G0gZNn3Ye6m0etd0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363012; c=relaxed/simple; bh=ictrwwk5sXSDgdwVd96kq05YWhM0FJV1hhu+tYubEkw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XFMPQ3IbnvfdSWLCzwfNY/u27VT5+575hR+t8FcuMrU3RPDzlTZ1iYSZatMvVHNdsuXezWQZeXVdxP4UdMKFcxdkSkXOWM5JjirwQf2NgesJESxOElO13JTqy2fiktmgwUOabLFf4L9Qa2NJ9NBIfXLBuABdpk03bWNghQH0+Fg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcS2hybzKHMKv; Sat, 25 Oct 2025 11:29:12 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 168601A1161; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S12; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 08/25] ext4: support large block size in ext4_readdir() Date: Sat, 25 Oct 2025 11:22:04 +0800 Message-Id: <20251025032221.2905818-9-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S12 X-Coremail-Antispam: 1UD129KBjvJXoW7KF15KF1fWw1rZry8CrWktFb_yoW8Gr17pF Zaga18Kry09r40939rtFy7ZryY9a97GFWUWrW5A345W3s3X34Skr9xtF1jvF1UWw4xAa4r ZF12kFy3GF1UJrJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I6gAGsC Content-Type: text/plain; charset="utf-8" From: Baokun Li In ext4_readdir(), page_cache_sync_readahead() is used to readahead mapped physical blocks. With LBS support, this can lead to a negative right shift. To fix this, the page index is now calculated by first converting the physical block number (pblk) to a file position (pos) before converting it to a page index. Also, the correct number of pages to readahead is now passed. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/dir.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c index d4164c507a90..256fe2c1d4c1 100644 --- a/fs/ext4/dir.c +++ b/fs/ext4/dir.c @@ -192,13 +192,13 @@ static int ext4_readdir(struct file *file, struct dir= _context *ctx) continue; } if (err > 0) { - pgoff_t index =3D map.m_pblk >> - (PAGE_SHIFT - inode->i_blkbits); + pgoff_t index =3D map.m_pblk << inode->i_blkbits >> + PAGE_SHIFT; if (!ra_has_index(&file->f_ra, index)) page_cache_sync_readahead( sb->s_bdev->bd_mapping, - &file->f_ra, file, - index, 1); + &file->f_ra, file, index, + 1 << EXT4_SB(sb)->s_min_folio_order); file->f_ra.prev_pos =3D (loff_t)index << PAGE_SHIFT; bh =3D ext4_bread(NULL, inode, map.m_lblk, 0); if (IS_ERR(bh)) { --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 18516221FCF; Sat, 25 Oct 2025 03:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; cv=none; b=ccCgFQmCNBgfkzIjzacafLKyPJ+7pi3bXY6NvUqTCySOkpadTSLIxxpbOu2U9WaEZaEDwV5GgS+KOS3s8in7yKUHU/mgqVtnXCS2J1yEQ72WIqz2MBJZvMp80D2jAQaW/eW9FmZPvS8FrcRkafcJEWKH41eKNRVuWkmqw19krNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; c=relaxed/simple; bh=Lg+o6yxcFu2WQ8VB+buN9z5rX9nYQgmKiLBsz333gw8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YgFVuFGmFLv1TQH5Jke3OdOlxKp40Z4X0a6rlSaiUVhaBy/QJ1+HH6uz7JMpO35iuyknqJwmlY+GnrWf/DB3kapxlXrorBPG5qDuDGC1wrV1LzIs6G9a2SpmOoD2TCz9AnhHUxZ4u/g0kD++I0AOgugvbktvo53jVCC1XWHpTfU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcS31S0zKHMNv; Sat, 25 Oct 2025 11:29:12 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 21CF01A0DA8; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S13; Sat, 25 Oct 2025 11:30:03 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 09/25] ext4: add EXT4_LBLK_TO_B macro for logical block to bytes conversion Date: Sat, 25 Oct 2025 11:22:05 +0800 Message-Id: <20251025032221.2905818-10-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S13 X-Coremail-Antispam: 1UD129KBjvJXoW3Ar4rKrW7Ar4xAF1UXw1kXwb_yoWxCFyrpF WDuF1rGF48uFyjgr4xKFWDZr17K3W7KrWUWFWru34Ygasrtw1FqF1ktF1fZa45trWxZ3ZI vF45K34UWw43GrJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJHAAAsr Content-Type: text/plain; charset="utf-8" From: Baokun Li No functional changes. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/ext4.h | 1 + fs/ext4/extents.c | 2 +- fs/ext4/inode.c | 20 +++++++++----------- fs/ext4/namei.c | 8 +++----- fs/ext4/verity.c | 2 +- 5 files changed, 15 insertions(+), 18 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index bca6c3709673..9b236f620b3a 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -367,6 +367,7 @@ struct ext4_io_submit { blkbits)) #define EXT4_B_TO_LBLK(inode, offset) \ (round_up((offset), i_blocksize(inode)) >> (inode)->i_blkbits) +#define EXT4_LBLK_TO_B(inode, lblk) ((loff_t)(lblk) << (inode)->i_blkbits) =20 /* Translate a block number to a cluster number */ #define EXT4_B2C(sbi, blk) ((blk) >> (sbi)->s_cluster_bits) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index ca5499e9412b..da640c88b863 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -4562,7 +4562,7 @@ static int ext4_alloc_file_blocks(struct file *file, = ext4_lblk_t offset, * allow a full retry cycle for any remaining allocations */ retries =3D 0; - epos =3D (loff_t)(map.m_lblk + ret) << blkbits; + epos =3D EXT4_LBLK_TO_B(inode, map.m_lblk + ret); inode_set_ctime_current(inode); if (new_size) { if (epos > new_size) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 889761ed51dd..73c1da90b604 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -825,9 +825,8 @@ int ext4_map_blocks(handle_t *handle, struct inode *ino= de, !(flags & EXT4_GET_BLOCKS_ZERO) && !ext4_is_quota_file(inode) && ext4_should_order_data(inode)) { - loff_t start_byte =3D - (loff_t)map->m_lblk << inode->i_blkbits; - loff_t length =3D (loff_t)map->m_len << inode->i_blkbits; + loff_t start_byte =3D EXT4_LBLK_TO_B(inode, map->m_lblk); + loff_t length =3D EXT4_LBLK_TO_B(inode, map->m_len); =20 if (flags & EXT4_GET_BLOCKS_IO_SUBMIT) ret =3D ext4_jbd2_inode_add_wait(handle, inode, @@ -2225,7 +2224,6 @@ static int mpage_process_folio(struct mpage_da_data *= mpd, struct folio *folio, ext4_lblk_t lblk =3D *m_lblk; ext4_fsblk_t pblock =3D *m_pblk; int err =3D 0; - int blkbits =3D mpd->inode->i_blkbits; ssize_t io_end_size =3D 0; struct ext4_io_end_vec *io_end_vec =3D ext4_last_io_end_vec(io_end); =20 @@ -2251,7 +2249,8 @@ static int mpage_process_folio(struct mpage_da_data *= mpd, struct folio *folio, err =3D PTR_ERR(io_end_vec); goto out; } - io_end_vec->offset =3D (loff_t)mpd->map.m_lblk << blkbits; + io_end_vec->offset =3D EXT4_LBLK_TO_B(mpd->inode, + mpd->map.m_lblk); } *map_bh =3D true; goto out; @@ -2261,7 +2260,7 @@ static int mpage_process_folio(struct mpage_da_data *= mpd, struct folio *folio, bh->b_blocknr =3D pblock++; } clear_buffer_unwritten(bh); - io_end_size +=3D (1 << blkbits); + io_end_size +=3D i_blocksize(mpd->inode); } while (lblk++, (bh =3D bh->b_this_page) !=3D head); =20 io_end_vec->size +=3D io_end_size; @@ -2463,7 +2462,7 @@ static int mpage_map_and_submit_extent(handle_t *hand= le, io_end_vec =3D ext4_alloc_io_end_vec(io_end); if (IS_ERR(io_end_vec)) return PTR_ERR(io_end_vec); - io_end_vec->offset =3D ((loff_t)map->m_lblk) << inode->i_blkbits; + io_end_vec->offset =3D EXT4_LBLK_TO_B(inode, map->m_lblk); do { err =3D mpage_map_one_extent(handle, mpd); if (err < 0) { @@ -3503,8 +3502,8 @@ static void ext4_set_iomap(struct inode *inode, struc= t iomap *iomap, iomap->dax_dev =3D EXT4_SB(inode->i_sb)->s_daxdev; else iomap->bdev =3D inode->i_sb->s_bdev; - iomap->offset =3D (u64) map->m_lblk << blkbits; - iomap->length =3D (u64) map->m_len << blkbits; + iomap->offset =3D EXT4_LBLK_TO_B(inode, map->m_lblk); + iomap->length =3D EXT4_LBLK_TO_B(inode, map->m_len); =20 if ((map->m_flags & EXT4_MAP_MAPPED) && !ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) @@ -3678,7 +3677,6 @@ static int ext4_iomap_alloc(struct inode *inode, stru= ct ext4_map_blocks *map, unsigned int flags) { handle_t *handle; - u8 blkbits =3D inode->i_blkbits; int ret, dio_credits, m_flags =3D 0, retries =3D 0; bool force_commit =3D false; =20 @@ -3737,7 +3735,7 @@ static int ext4_iomap_alloc(struct inode *inode, stru= ct ext4_map_blocks *map, * i_disksize out to i_size. This could be beyond where direct I/O is * happening and thus expose allocated blocks to direct I/O reads. */ - else if (((loff_t)map->m_lblk << blkbits) >=3D i_size_read(inode)) + else if (EXT4_LBLK_TO_B(inode, map->m_lblk) >=3D i_size_read(inode)) m_flags =3D EXT4_GET_BLOCKS_CREATE; else if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) m_flags =3D EXT4_GET_BLOCKS_IO_CREATE_EXT; diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 2cd36f59c9e3..78cefb7cc9a7 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -1076,7 +1076,7 @@ static int htree_dirblock_to_tree(struct file *dir_fi= le, for (; de < top; de =3D ext4_next_entry(de, dir->i_sb->s_blocksize)) { if (ext4_check_dir_entry(dir, NULL, de, bh, bh->b_data, bh->b_size, - (block<i_sb)) + EXT4_LBLK_TO_B(dir, block) + ((char *)de - bh->b_data))) { /* silently ignore the rest of the block */ break; @@ -1630,7 +1630,7 @@ static struct buffer_head *__ext4_find_entry(struct i= node *dir, } set_buffer_verified(bh); i =3D search_dirblock(bh, dir, fname, - block << EXT4_BLOCK_SIZE_BITS(sb), res_dir); + EXT4_LBLK_TO_B(dir, block), res_dir); if (i =3D=3D 1) { EXT4_I(dir)->i_dir_start_lookup =3D block; ret =3D bh; @@ -1710,7 +1710,6 @@ static struct buffer_head * ext4_dx_find_entry(struct= inode *dir, struct ext4_filename *fname, struct ext4_dir_entry_2 **res_dir) { - struct super_block * sb =3D dir->i_sb; struct dx_frame frames[EXT4_HTREE_LEVEL], *frame; struct buffer_head *bh; ext4_lblk_t block; @@ -1729,8 +1728,7 @@ static struct buffer_head * ext4_dx_find_entry(struct= inode *dir, goto errout; =20 retval =3D search_dirblock(bh, dir, fname, - block << EXT4_BLOCK_SIZE_BITS(sb), - res_dir); + EXT4_LBLK_TO_B(dir, block), res_dir); if (retval =3D=3D 1) goto success; brelse(bh); diff --git a/fs/ext4/verity.c b/fs/ext4/verity.c index d9203228ce97..7a980a8059bd 100644 --- a/fs/ext4/verity.c +++ b/fs/ext4/verity.c @@ -302,7 +302,7 @@ static int ext4_get_verity_descriptor_location(struct i= node *inode, =20 end_lblk =3D le32_to_cpu(last_extent->ee_block) + ext4_ext_get_actual_len(last_extent); - desc_size_pos =3D (u64)end_lblk << inode->i_blkbits; + desc_size_pos =3D EXT4_LBLK_TO_B(inode, end_lblk); ext4_free_ext_path(path); =20 if (desc_size_pos < sizeof(desc_size_disk)) --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 F1D822566D3; Sat, 25 Oct 2025 03:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363008; cv=none; b=iirKko0xkS3rtfPnYK9O8WgyBDjxOWIaRoCoQa4LV1B3W30JqXALJ+k4jawHfjcoUywEKh02lhnt38C2Q5E8PyzPtc65jQueZMhbTk392kGZmLIyNoQ6ABAzfl4dlT6iUKDGojpn0PmrKQfETCMxPDnvvWLI543yZ9vN8jf3ejk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363008; c=relaxed/simple; bh=8nwsMerhAFA2fmeKmWx2EZG+G6iSgFXga0t5GBguJ5M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Lap1pehEqzmvz4h+O3mhSjkKLKRxHjsAjvqVLwnQSEhv7kcXTD4v8RkumlYAOMTVNpL4LE9BLZykBYaN006MMO/HtzRrJ9j5+oPoDi5VAmiia5/drm80B/EgyPNaE3xz5D6wMilTlzqoZZ/KUZD0Q9tiQev74ek2mSvIN0kfADM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcK4NlnzYQtnf; Sat, 25 Oct 2025 11:29:05 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 3F3741A117B; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S14; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 10/25] ext4: add EXT4_LBLK_TO_P and EXT4_P_TO_LBLK for block/page conversion Date: Sat, 25 Oct 2025 11:22:06 +0800 Message-Id: <20251025032221.2905818-11-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S14 X-Coremail-Antispam: 1UD129KBjvJXoWrur1DWFW7uF1rXryUWFW5Awb_yoW8JF1fpr sxXFyrGr1Fvry8ur1IgFW0vryfGan3GayUX3y2yrsI9Fyxtr1Sgrs0gr95ZFyUK3yUJFWj vFW5Kry3Gr13G3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJHQABsr Content-Type: text/plain; charset="utf-8" From: Baokun Li As BS > PS support is coming, all block number to page index (and vice-versa) conversions must now go via bytes. Added EXT4_LBLK_TO_P() and EXT4_P_TO_LBLK() macros to simplify these conversions and handle both BS <=3D PS and BS > PS scenarios cleanly. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi --- fs/ext4/ext4.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 9b236f620b3a..8223ed29b343 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -369,6 +369,12 @@ struct ext4_io_submit { (round_up((offset), i_blocksize(inode)) >> (inode)->i_blkbits) #define EXT4_LBLK_TO_B(inode, lblk) ((loff_t)(lblk) << (inode)->i_blkbits) =20 +/* Translate a block number to a page index */ +#define EXT4_LBLK_TO_P(inode, lblk) (EXT4_LBLK_TO_B((inode), (lblk)) >> \ + PAGE_SHIFT) +/* Translate a page index to a block number */ +#define EXT4_P_TO_LBLK(inode, pnum) (((loff_t)(pnum) << PAGE_SHIFT) >> \ + (inode)->i_blkbits) /* Translate a block number to a cluster number */ #define EXT4_B2C(sbi, blk) ((blk) >> (sbi)->s_cluster_bits) /* Translate a cluster number to a block number */ --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 17DB719DF6A; Sat, 25 Oct 2025 03:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363012; cv=none; b=BcPRBG/jUJPEh8xVLKzH3+zUY60odNClWrHqbJQTnpYwZJXcU+UQ06msjSWPhLMbjwNI681FDyC2EnD3yqHdazZ1yZdzWgvGFodRpUMbVWIDP1RP9syYXjWTE69C9Ml+S0+d7gjtkoyy1SLnL8Iu70/u+REx8u97C3EPvt6HKcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363012; c=relaxed/simple; bh=o/+yNmSfds55CFkUhuQ7CnCj0E8N/F/+MVQdRdrnhHs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=rCRzImUoNTIT71hCD/JvNiYucvYFwt9s++9k9fPPDLqJEzpHbLqPLvsWu+pc4ozLe82uFtmWdj0lOPSFGUDKQOovDYBtAsqYcVIKqFn++NUmKw/8PrGXQZfLyDdw2uqPN9JNpX9isJ/mR3UEog1KbRGNS5RkyXbWGnPMXNT+QfI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcS4VHfzKHMPD; Sat, 25 Oct 2025 11:29:12 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 5283D1A0A86; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S15; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 11/25] ext4: support large block size in ext4_mb_load_buddy_gfp() Date: Sat, 25 Oct 2025 11:22:07 +0800 Message-Id: <20251025032221.2905818-12-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> 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 X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S15 X-Coremail-Antispam: 1UD129KBjvJXoWxArykWFyUGry7JrW7Jr18Krg_yoWrJr43pF srGrn8Gr47WFnxWwsru34SqF1Fgas3uFWUGFWfWF1fZFy3t3WxKFnrK3WUJF1jgay7J3Z7 XFW5ZryfuF17W3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJHQADsp From: Baokun Li Currently, ext4_mb_load_buddy_gfp() uses blocks_per_page to calculate the folio index and offset. However, when blocksize is larger than PAGE_SIZE, blocks_per_page becomes zero, leading to a potential division-by-zero bug. To support BS > PS, use bytes to compute folio index and offset within folio to get rid of blocks_per_page. Also, if buddy and bitmap land in the same folio, we get that folio=E2=80= =99s ref instead of looking it up again before updating the buddy. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/mballoc.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 6070d3c86678..3494c6fe5bfb 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -1642,17 +1642,15 @@ int ext4_mb_init_group(struct super_block *sb, ext4= _group_t group, gfp_t gfp) =20 /* * Locking note: This routine calls ext4_mb_init_cache(), which takes the - * block group lock of all groups for this page; do not hold the BG lock w= hen + * block group lock of all groups for this folio; do not hold the BG lock = when * calling this routine! */ static noinline_for_stack int ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_group_t group, struct ext4_buddy *e4b, gfp_t gfp) { - int blocks_per_page; int block; int pnum; - int poff; struct folio *folio; int ret; struct ext4_group_info *grp; @@ -1662,7 +1660,6 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_g= roup_t group, might_sleep(); mb_debug(sb, "load group %u\n", group); =20 - blocks_per_page =3D PAGE_SIZE / sb->s_blocksize; grp =3D ext4_get_group_info(sb, group); if (!grp) return -EFSCORRUPTED; @@ -1690,8 +1687,7 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_g= roup_t group, * So for each group we need two blocks. */ block =3D group * 2; - pnum =3D block / blocks_per_page; - poff =3D block % blocks_per_page; + pnum =3D EXT4_LBLK_TO_P(inode, block); =20 /* Avoid locking the folio in the fast path ... */ folio =3D __filemap_get_folio(inode->i_mapping, pnum, FGP_ACCESSED, 0); @@ -1723,7 +1719,8 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_g= roup_t group, goto err; } mb_cmp_bitmaps(e4b, folio_address(folio) + - (poff * sb->s_blocksize)); + offset_in_folio(folio, + EXT4_LBLK_TO_B(inode, block))); } folio_unlock(folio); } @@ -1739,12 +1736,18 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4= _group_t group, =20 /* Folios marked accessed already */ e4b->bd_bitmap_folio =3D folio; - e4b->bd_bitmap =3D folio_address(folio) + (poff * sb->s_blocksize); + e4b->bd_bitmap =3D folio_address(folio) + + offset_in_folio(folio, EXT4_LBLK_TO_B(inode, block)); =20 block++; - pnum =3D block / blocks_per_page; - poff =3D block % blocks_per_page; + pnum =3D EXT4_LBLK_TO_P(inode, block); + /* buddy and bitmap are on the same folio? */ + if (folio_contains(folio, pnum)) { + folio_get(folio); + goto update_buddy; + } =20 + /* we need another folio for the buddy */ folio =3D __filemap_get_folio(inode->i_mapping, pnum, FGP_ACCESSED, 0); if (IS_ERR(folio) || !folio_test_uptodate(folio)) { if (!IS_ERR(folio)) @@ -1779,9 +1782,11 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_= group_t group, goto err; } =20 +update_buddy: /* Folios marked accessed already */ e4b->bd_buddy_folio =3D folio; - e4b->bd_buddy =3D folio_address(folio) + (poff * sb->s_blocksize); + e4b->bd_buddy =3D folio_address(folio) + + offset_in_folio(folio, EXT4_LBLK_TO_B(inode, block)); =20 return 0; =20 --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 853BC25228D; Sat, 25 Oct 2025 03:30:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363009; cv=none; b=gRE1pdhYNdWnYV9rMUa+FlY7qwuW4wFkBSKzs7oRw5USnLQSlsB96YMVWTkwifAVIa2zv0SQQGhaI9LmY/EJCztwvz3gPBETqIjndwsiOu0oJcPpcbjCvXP0CUAZ846Qfy2Uu1UixMZV2Zn7zsdV38TBbjSi+hg2ZaIS+MdRVpE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363009; c=relaxed/simple; bh=OZc5TZ8w794qpr4Ib+PJoOS+omJF0SeZBP/CyN2pnEM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gkCZZpio0dahoMouGYM/ZjGeXi1yP9tHqA3cc2w1L+UrvJUod8/FkXoGfM8dbfPZ/c5s/svFkQ3OzdIi2t4P4NRBXMSzyJB+GR9DrnwQvglE95PqoFeVA69P0dIBIyYM+YGBSKttJh5v2GZufVGhKIwe1+1PEGpMg5mlY3GkZw8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcK5LzFzYQtnq; Sat, 25 Oct 2025 11:29:05 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 62F571A19D4; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S16; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 12/25] ext4: support large block size in ext4_mb_get_buddy_page_lock() Date: Sat, 25 Oct 2025 11:22:08 +0800 Message-Id: <20251025032221.2905818-13-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S16 X-Coremail-Antispam: 1UD129KBjvJXoWxJF13CF47GF4xuFyDGF1rWFg_yoWrZr4xpa y7Cwn8Jr4kW3srursrZ3sav3WFk395Zay7A34xWr1fuFy3Ja4xKFy8K3WUXFyUtFWxGFs5 XF45Zry3WF1UX3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I7AABsD Content-Type: text/plain; charset="utf-8" From: Baokun Li Currently, ext4_mb_get_buddy_page_lock() uses blocks_per_page to calculate folio index and offset. However, when blocksize is larger than PAGE_SIZE, blocks_per_page becomes zero, leading to a potential division-by-zero bug. To support BS > PS, use bytes to compute folio index and offset within folio to get rid of blocks_per_page. Also, since ext4_mb_get_buddy_page_lock() already fully supports folio, rename it to ext4_mb_get_buddy_folio_lock(). Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/mballoc.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 3494c6fe5bfb..d42d768a705a 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -1510,50 +1510,52 @@ static int ext4_mb_init_cache(struct folio *folio, = char *incore, gfp_t gfp) } =20 /* - * Lock the buddy and bitmap pages. This make sure other parallel init_gro= up - * on the same buddy page doesn't happen whild holding the buddy page lock. - * Return locked buddy and bitmap pages on e4b struct. If buddy and bitmap - * are on the same page e4b->bd_buddy_folio is NULL and return value is 0. + * Lock the buddy and bitmap folios. This make sure other parallel init_gr= oup + * on the same buddy folio doesn't happen whild holding the buddy folio lo= ck. + * Return locked buddy and bitmap folios on e4b struct. If buddy and bitmap + * are on the same folio e4b->bd_buddy_folio is NULL and return value is 0. */ -static int ext4_mb_get_buddy_page_lock(struct super_block *sb, +static int ext4_mb_get_buddy_folio_lock(struct super_block *sb, ext4_group_t group, struct ext4_buddy *e4b, gfp_t gfp) { struct inode *inode =3D EXT4_SB(sb)->s_buddy_cache; - int block, pnum, poff; - int blocks_per_page; + int block, pnum; struct folio *folio; =20 e4b->bd_buddy_folio =3D NULL; e4b->bd_bitmap_folio =3D NULL; =20 - blocks_per_page =3D PAGE_SIZE / sb->s_blocksize; /* * the buddy cache inode stores the block bitmap * and buddy information in consecutive blocks. * So for each group we need two blocks. */ block =3D group * 2; - pnum =3D block / blocks_per_page; - poff =3D block % blocks_per_page; + pnum =3D EXT4_LBLK_TO_P(inode, block); folio =3D __filemap_get_folio(inode->i_mapping, pnum, FGP_LOCK | FGP_ACCESSED | FGP_CREAT, gfp); if (IS_ERR(folio)) return PTR_ERR(folio); BUG_ON(folio->mapping !=3D inode->i_mapping); + WARN_ON_ONCE(folio_size(folio) < sb->s_blocksize); e4b->bd_bitmap_folio =3D folio; - e4b->bd_bitmap =3D folio_address(folio) + (poff * sb->s_blocksize); + e4b->bd_bitmap =3D folio_address(folio) + + offset_in_folio(folio, EXT4_LBLK_TO_B(inode, block)); =20 - if (blocks_per_page >=3D 2) { - /* buddy and bitmap are on the same page */ + block++; + pnum =3D EXT4_LBLK_TO_P(inode, block); + if (folio_contains(folio, pnum)) { + /* buddy and bitmap are on the same folio */ return 0; } =20 - /* blocks_per_page =3D=3D 1, hence we need another page for the buddy */ - folio =3D __filemap_get_folio(inode->i_mapping, block + 1, + /* we need another folio for the buddy */ + folio =3D __filemap_get_folio(inode->i_mapping, pnum, FGP_LOCK | FGP_ACCESSED | FGP_CREAT, gfp); if (IS_ERR(folio)) return PTR_ERR(folio); BUG_ON(folio->mapping !=3D inode->i_mapping); + WARN_ON_ONCE(folio_size(folio) < sb->s_blocksize); e4b->bd_buddy_folio =3D folio; return 0; } @@ -1592,14 +1594,14 @@ int ext4_mb_init_group(struct super_block *sb, ext4= _group_t group, gfp_t gfp) =20 /* * This ensures that we don't reinit the buddy cache - * page which map to the group from which we are already + * folio which map to the group from which we are already * allocating. If we are looking at the buddy cache we would * have taken a reference using ext4_mb_load_buddy and that - * would have pinned buddy page to page cache. - * The call to ext4_mb_get_buddy_page_lock will mark the - * page accessed. + * would have pinned buddy folio to page cache. + * The call to ext4_mb_get_buddy_folio_lock will mark the + * folio accessed. */ - ret =3D ext4_mb_get_buddy_page_lock(sb, group, &e4b, gfp); + ret =3D ext4_mb_get_buddy_folio_lock(sb, group, &e4b, gfp); if (ret || !EXT4_MB_GRP_NEED_INIT(this_grp)) { /* * somebody initialized the group --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 8C6632561B9; Sat, 25 Oct 2025 03:30:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363009; cv=none; b=KbpHtG+dfan2lLCXIIHdxlmLZCE0NCr05jnQVph0gCMnNx4gsHy+olis8DWfNhYKi9QExx/9z73I/PYZ981eW8NzhCzy5uyVdOjAPbIl4aUPKKpFMzS4rdP40vb32EY3k+Snw9qlCTPP1rET8+jVb87uul4ivuBSt3wxWq12+LU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363009; c=relaxed/simple; bh=wSDsd5tXNGGoUjF6TH3TTDRP7vXepXroXrcPJY8MbGo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=AK1NfVQtJ/HsmYyi9CyObIxTVkNgtiHbTGySPjvXQyR+8wHBn5IzVNZ/GRxPLAMjEe5DRiFZWkD13PnT6A4q3Xd84YrEpdnF0Zi30+HI1HBjr8Aw0AC/GOsSL8Yi1qdCz7rEhghmJ+HI5r5T8DBrzuX542lbFHixLA1+VHUsSps= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcK5tw1zYQtnm; Sat, 25 Oct 2025 11:29:05 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 751BA1A19D9; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S17; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 13/25] ext4: support large block size in ext4_mb_init_cache() Date: Sat, 25 Oct 2025 11:22:09 +0800 Message-Id: <20251025032221.2905818-14-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S17 X-Coremail-Antispam: 1UD129KBjvJXoWxZw1ktr1DWw4UKFyDGrWDXFb_yoWruFyrpa 9xKr15Gr18Wa97W3ZrWayvvF1fG34xZF47GFWxXr1xCFW3Xw1FgFnrtr18XFyUtFZrJFZ5 XF15Ar13ZF1UXw7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I7AADsB Content-Type: text/plain; charset="utf-8" From: Baokun Li Currently, ext4_mb_init_cache() uses blocks_per_page to calculate the folio index and offset. However, when blocksize is larger than PAGE_SIZE, blocks_per_page becomes zero, leading to a potential division-by-zero bug. Since we now have the folio, we know its exact size. This allows us to convert {blocks, groups}_per_page to {blocks, groups}_per_folio, thus supporting block sizes greater than page size. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/mballoc.c | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index d42d768a705a..31f4c7d65eb4 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -1329,26 +1329,25 @@ static void mb_regenerate_buddy(struct ext4_buddy *= e4b) * block bitmap and buddy information. The information are * stored in the inode as * - * { page } + * { folio } * [ group 0 bitmap][ group 0 buddy] [group 1][ group 1]... * * * one block each for bitmap and buddy information. - * So for each group we take up 2 blocks. A page can - * contain blocks_per_page (PAGE_SIZE / blocksize) blocks. - * So it can have information regarding groups_per_page which - * is blocks_per_page/2 + * So for each group we take up 2 blocks. A folio can + * contain blocks_per_folio (folio_size / blocksize) blocks. + * So it can have information regarding groups_per_folio which + * is blocks_per_folio/2 * * Locking note: This routine takes the block group lock of all groups - * for this page; do not hold this lock when calling this routine! + * for this folio; do not hold this lock when calling this routine! */ - static int ext4_mb_init_cache(struct folio *folio, char *incore, gfp_t gfp) { ext4_group_t ngroups; unsigned int blocksize; - int blocks_per_page; - int groups_per_page; + int blocks_per_folio; + int groups_per_folio; int err =3D 0; int i; ext4_group_t first_group, group; @@ -1365,27 +1364,24 @@ static int ext4_mb_init_cache(struct folio *folio, = char *incore, gfp_t gfp) sb =3D inode->i_sb; ngroups =3D ext4_get_groups_count(sb); blocksize =3D i_blocksize(inode); - blocks_per_page =3D PAGE_SIZE / blocksize; + blocks_per_folio =3D folio_size(folio) / blocksize; + WARN_ON_ONCE(!blocks_per_folio); + groups_per_folio =3D DIV_ROUND_UP(blocks_per_folio, 2); =20 mb_debug(sb, "init folio %lu\n", folio->index); =20 - groups_per_page =3D blocks_per_page >> 1; - if (groups_per_page =3D=3D 0) - groups_per_page =3D 1; - /* allocate buffer_heads to read bitmaps */ - if (groups_per_page > 1) { - i =3D sizeof(struct buffer_head *) * groups_per_page; + if (groups_per_folio > 1) { + i =3D sizeof(struct buffer_head *) * groups_per_folio; bh =3D kzalloc(i, gfp); if (bh =3D=3D NULL) return -ENOMEM; } else bh =3D &bhs; =20 - first_group =3D folio->index * blocks_per_page / 2; - /* read all groups the folio covers into the cache */ - for (i =3D 0, group =3D first_group; i < groups_per_page; i++, group++) { + first_group =3D EXT4_P_TO_LBLK(inode, folio->index) / 2; + for (i =3D 0, group =3D first_group; i < groups_per_folio; i++, group++) { if (group >=3D ngroups) break; =20 @@ -1393,7 +1389,7 @@ static int ext4_mb_init_cache(struct folio *folio, ch= ar *incore, gfp_t gfp) if (!grinfo) continue; /* - * If page is uptodate then we came here after online resize + * If folio is uptodate then we came here after online resize * which added some new uninitialized group info structs, so * we must skip all initialized uptodate buddies on the folio, * which may be currently in use by an allocating task. @@ -1413,7 +1409,7 @@ static int ext4_mb_init_cache(struct folio *folio, ch= ar *incore, gfp_t gfp) } =20 /* wait for I/O completion */ - for (i =3D 0, group =3D first_group; i < groups_per_page; i++, group++) { + for (i =3D 0, group =3D first_group; i < groups_per_folio; i++, group++) { int err2; =20 if (!bh[i]) @@ -1423,8 +1419,8 @@ static int ext4_mb_init_cache(struct folio *folio, ch= ar *incore, gfp_t gfp) err =3D err2; } =20 - first_block =3D folio->index * blocks_per_page; - for (i =3D 0; i < blocks_per_page; i++) { + first_block =3D EXT4_P_TO_LBLK(inode, folio->index); + for (i =3D 0; i < blocks_per_folio; i++) { group =3D (first_block + i) >> 1; if (group >=3D ngroups) break; @@ -1501,7 +1497,7 @@ static int ext4_mb_init_cache(struct folio *folio, ch= ar *incore, gfp_t gfp) =20 out: if (bh) { - for (i =3D 0; i < groups_per_page; i++) + for (i =3D 0; i < groups_per_folio; i++) brelse(bh[i]); if (bh !=3D &bhs) kfree(bh); --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 AD9D329B79B; Sat, 25 Oct 2025 03:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363011; cv=none; b=ebWq0V6Of1C6u9S5gedpgU5X78dpTrSqphw3OkWI6icTNKNYZGwY/GLWfW6sN9NF8VrmpdTNbPePuMBFh42FIM4dhWgPkvxGaLiWX9O5sNY/cS+VdXBV+XxyrD1WVINKVkLDiblSP1W0ThYlXmGNta7zr3MVhjs5GwCj5j+ewmA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363011; c=relaxed/simple; bh=prii4hUsKg4bmlZfYS+kBYHABUUipd2MHSwbSlvKcYU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Rq+LRs8T5WObTMsy6oIaSysNxj9SzDqlr7BYMWCTB68hX0nTSaWpZIXBQpxQHhY1yTQsB9IaDVkKFonvkXo/njgbsUdjxZKqpyN2Bkw2iMkAVzMAU28GdpnUN2f24fUv4O1SgY17a3/vBdYoCJlDGCQDwjOfS8I8uPSA7NTKhZY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcK6NzKzYQtpT; Sat, 25 Oct 2025 11:29:05 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 86F111A17F0; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S18; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 14/25] ext4: prepare buddy cache inode for BS > PS with large folios Date: Sat, 25 Oct 2025 11:22:10 +0800 Message-Id: <20251025032221.2905818-15-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S18 X-Coremail-Antispam: 1UD129KBjvJXoWrKr1rZw13WF1rZF4DGFyrXrb_yoW8JF17pa 17GF18Gr18W3y5Can7G3W8Ja4xGa1xWay7JrZ29w1jvasrXFyFkFsrtr129Fy8AFWxAayf XF4Uuw43ur43GaDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I7AAFsH Content-Type: text/plain; charset="utf-8" From: Baokun Li We use EXT4_BAD_INO for the buddy cache inode number. This inode is not accessed via __ext4_new_inode() or __ext4_iget(), meaning ext4_set_inode_mapping_order() is not called to set its folio order range. However, future block size greater than page size support requires this inode to support large folios, and the buddy cache code already handles BS > PS. Therefore, ext4_set_inode_mapping_order() is now explicitly called for this specific inode to set its folio order range. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/mballoc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 31f4c7d65eb4..155c43ff2bc2 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -3493,6 +3493,8 @@ static int ext4_mb_init_backend(struct super_block *s= b) * this will avoid confusion if it ever shows up during debugging. */ sbi->s_buddy_cache->i_ino =3D EXT4_BAD_INO; EXT4_I(sbi->s_buddy_cache)->i_disksize =3D 0; + ext4_set_inode_mapping_order(sbi->s_buddy_cache); + for (i =3D 0; i < ngroups; i++) { cond_resched(); desc =3D ext4_get_group_desc(sb, i, NULL); --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 A30542C031B; Sat, 25 Oct 2025 03:30:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363014; cv=none; b=cf3M6GSvULvH3Wi90SzaL04sPumRHhWGhpOw036rnCB80Gu68WWIap/GLYXEojCTGDR83lQABzpK2I/d2rBY9xGc/pLaqtgqfGgnbf3qVx5jfeKO5RRVOk26y8fqDSTRIt6R0/EPtDuLDs5SBVfmJDy8SMkuimQrd4vlbdeJ9ac= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363014; c=relaxed/simple; bh=rtscdptD+wxdUqzFvfZNLTlaTFfsdl/+1WsXXOUs0JQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CjKw/wjHgSB883b3aJNmQi8jA3kL9iblOhdwqXZ/NAyPjpzymisU9mXkMUw3kNaPV+AqBreQyoGGF5VFGgKcYdmE1GTf5ibFvVoqz58QMHouOghPS556x4PrmZMy7Kz2wGsNgd61CQiKZioG6aAorpXgFoxYg9Q608scx/bt0bI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcS6FHMzKHMPS; Sat, 25 Oct 2025 11:29:12 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 92BB71A19DA; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S19; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 15/25] ext4: rename 'page' references to 'folio' in multi-block allocator Date: Sat, 25 Oct 2025 11:22:11 +0800 Message-Id: <20251025032221.2905818-16-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S19 X-Coremail-Antispam: 1UD129KBjvJXoWxCFy7GF15AF45JF1rXFy8AFb_yoWrGryDpF sxCw15Cr1kWrn8u3Zruayj9w1Sy3yv9FWkCrWxWr18Zr9xXryIgFnrtF1UtFy0gFZ7AFn5 ZF4avF13ur17J3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJHgABso Content-Type: text/plain; charset="utf-8" From: Zhihao Cheng The ext4 multi-block allocator now fully supports folio objects. Update all variable names, function names, and comments to replace legacy 'page' terminology with 'folio', improving clarity and consistency. No functional changes. Signed-off-by: Zhihao Cheng Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/mballoc.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 155c43ff2bc2..cf07d1067f5f 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -98,14 +98,14 @@ * block bitmap and buddy information. The information are stored in the * inode as: * - * { page } + * { folio } * [ group 0 bitmap][ group 0 buddy] [group 1][ group 1]... * * * one block each for bitmap and buddy information. So for each group we - * take up 2 blocks. A page can contain blocks_per_page (PAGE_SIZE / - * blocksize) blocks. So it can have information regarding groups_per_page - * which is blocks_per_page/2 + * take up 2 blocks. A folio can contain blocks_per_folio (folio_size / + * blocksize) blocks. So it can have information regarding groups_per_fol= io + * which is blocks_per_folio/2 * * The buddy cache inode is not stored on disk. The inode is thrown * away when the filesystem is unmounted. @@ -1556,7 +1556,7 @@ static int ext4_mb_get_buddy_folio_lock(struct super_= block *sb, return 0; } =20 -static void ext4_mb_put_buddy_page_lock(struct ext4_buddy *e4b) +static void ext4_mb_put_buddy_folio_lock(struct ext4_buddy *e4b) { if (e4b->bd_bitmap_folio) { folio_unlock(e4b->bd_bitmap_folio); @@ -1570,7 +1570,7 @@ static void ext4_mb_put_buddy_page_lock(struct ext4_b= uddy *e4b) =20 /* * Locking note: This routine calls ext4_mb_init_cache(), which takes the - * block group lock of all groups for this page; do not hold the BG lock w= hen + * block group lock of all groups for this folio; do not hold the BG lock = when * calling this routine! */ static noinline_for_stack @@ -1618,7 +1618,7 @@ int ext4_mb_init_group(struct super_block *sb, ext4_g= roup_t group, gfp_t gfp) if (e4b.bd_buddy_folio =3D=3D NULL) { /* * If both the bitmap and buddy are in - * the same page we don't need to force + * the same folio we don't need to force * init the buddy */ ret =3D 0; @@ -1634,7 +1634,7 @@ int ext4_mb_init_group(struct super_block *sb, ext4_g= roup_t group, gfp_t gfp) goto err; } err: - ext4_mb_put_buddy_page_lock(&e4b); + ext4_mb_put_buddy_folio_lock(&e4b); return ret; } =20 @@ -2227,7 +2227,7 @@ static void ext4_mb_use_best_found(struct ext4_alloca= tion_context *ac, ac->ac_buddy =3D ret >> 16; =20 /* - * take the page reference. We want the page to be pinned + * take the folio reference. We want the folio to be pinned * so that we don't get a ext4_mb_init_cache_call for this * group until we update the bitmap. That would mean we * double allocate blocks. The reference is dropped @@ -2933,7 +2933,7 @@ static int ext4_mb_scan_group(struct ext4_allocation_= context *ac, if (cr < CR_ANY_FREE && spin_is_locked(ext4_group_lock_ptr(sb, group))) return 0; =20 - /* This now checks without needing the buddy page */ + /* This now checks without needing the buddy folio */ ret =3D ext4_mb_good_group_nolock(ac, group, cr); if (ret <=3D 0) { if (!ac->ac_first_err) @@ -4725,7 +4725,7 @@ static void ext4_discard_allocated_blocks(struct ext4= _allocation_context *ac) "ext4: mb_load_buddy failed (%d)", err)) /* * This should never happen since we pin the - * pages in the ext4_allocation_context so + * folios in the ext4_allocation_context so * ext4_mb_load_buddy() should never fail. */ return; --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 C535F262FE5; Sat, 25 Oct 2025 03:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363012; cv=none; b=T55nMh/Hi5tPIYmmiklZiKI4m+4F+hN36+eWoH2b9K5rNcfwz1rEx37jgKcXqRc0HOEmhZQrTTVlM9XsZhDS7vMvg1/I+bqitk3hbh0TESjtA2bY9fm3A3VZX74qN265VhiO7kcYJGl4B6TzqHEkNWO8h2pjxy65+gNkhXfsyrY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363012; c=relaxed/simple; bh=2A9GbxCyYmANqsEezNksnGl3vLPW1GFAeT4mOrmRR1g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cm6dQvcBibhQ2NqastII4Hkzmr6i+Ihd9G+BdpRmSQOViCnVdAcVIDq79dqlz3MV8xH18w0cGeXV1f/gY2xNBedHXDnUj8EqyGfb6L7ynceMPbHWry14XdanCUxoDLPacvfawPbUZtTAvU6P2TXqj9K5iG8hjqd77+K9PI//xjA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcL088wzYQtph; Sat, 25 Oct 2025 11:29:06 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id A36B71A0E5E; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S20; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 16/25] ext4: support large block size in ext4_mpage_readpages() Date: Sat, 25 Oct 2025 11:22:12 +0800 Message-Id: <20251025032221.2905818-17-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S20 X-Coremail-Antispam: 1UD129KBjvJXoW7ur4rJw4kWr43JF18uw18uFg_yoW8Gw4fpa 93K3WkGrn7WryS9an3XF1kZrnYga47CFWUJFZ3Xry3Wa47tryfKwnFqas5XF4jqrsxZr93 XF13Wry7AF4rXrJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I7QAAsD Content-Type: text/plain; charset="utf-8" From: Baokun Li Use the EXT4_P_TO_LBLK() macro to convert folio indexes to blocks to avoid negative left shifts after supporting blocksize greater than PAGE_SIZE. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/readpage.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c index f329daf6e5c7..8c8ec9d60b90 100644 --- a/fs/ext4/readpage.c +++ b/fs/ext4/readpage.c @@ -213,9 +213,7 @@ int ext4_mpage_readpages(struct inode *inode, { struct bio *bio =3D NULL; sector_t last_block_in_bio =3D 0; - const unsigned blkbits =3D inode->i_blkbits; - const unsigned blocks_per_page =3D PAGE_SIZE >> blkbits; const unsigned blocksize =3D 1 << blkbits; sector_t next_block; sector_t block_in_file; @@ -251,9 +249,8 @@ int ext4_mpage_readpages(struct inode *inode, =20 blocks_per_folio =3D folio_size(folio) >> blkbits; first_hole =3D blocks_per_folio; - block_in_file =3D next_block =3D - (sector_t)folio->index << (PAGE_SHIFT - blkbits); - last_block =3D block_in_file + nr_pages * blocks_per_page; + block_in_file =3D next_block =3D EXT4_P_TO_LBLK(inode, folio->index); + last_block =3D EXT4_P_TO_LBLK(inode, folio->index + nr_pages); last_block_in_file =3D (ext4_readpage_limit(inode) + blocksize - 1) >> blkbits; if (last_block > last_block_in_file) --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 A2A0226FA56; Sat, 25 Oct 2025 03:30:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; cv=none; b=HZGaEHMdCknY7K9i9xeJ/RPCeXBjQo+ip12dMHQyV2XOzbLWbUUq1mnAwI3E7FswZLZPH/1jhAB8g7aSu7weNtGNojEf/WJqfeIkKslAmDg0BZUx49bDkb4PVeqMJ3L4VS9xCmFHWFQSxqyeStq4tDS2JJlz6JtmvgK0gCpg6bA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; c=relaxed/simple; bh=PDQRBBuBI0KtsRbNWXjVRYAFjEtNYpTKodrSUzo/9gs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eNI6Q7Ni2HL5eJzvnjnc6aMtIbpiUZev8oA+e4wk8SxgleF4VtJADRkSfVAnzFaKh1O73+GloLUcsdYHTwlIQDbq3dJiaSgUCLU59/rEJh33G6jrfmwgtiVLYBhtxFhaAtHDwE1vcFjQHw7NZa5xs1hAMkYUxKvkqP+rWTcK0Zk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcT06ljzKHMPh; Sat, 25 Oct 2025 11:29:13 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id B29961A19DA; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S21; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 17/25] ext4: support large block size in ext4_block_write_begin() Date: Sat, 25 Oct 2025 11:22:13 +0800 Message-Id: <20251025032221.2905818-18-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S21 X-Coremail-Antispam: 1UD129KBjvJXoW7ur4rJw4kWr43Jw1DCrW5Awb_yoW8Xryrpr y3KrZ7Gr4S9r4j93W7WF13Xr18Ka4DWF4UCFW3Zry3Xa48twnagr4kt3s5XF4jqayxZFyk ZFyrtryxW3W7ArJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJHgAEst Content-Type: text/plain; charset="utf-8" From: Baokun Li Use the EXT4_P_TO_LBLK() macro to convert folio indexes to blocks to avoid negative left shifts after supporting blocksize greater than PAGE_SIZE. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/inode.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 73c1da90b604..d97ce88d6e0a 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1162,8 +1162,7 @@ int ext4_block_write_begin(handle_t *handle, struct f= olio *folio, unsigned block_start, block_end; sector_t block; int err =3D 0; - unsigned blocksize =3D inode->i_sb->s_blocksize; - unsigned bbits; + unsigned int blocksize =3D i_blocksize(inode); struct buffer_head *bh, *head, *wait[2]; int nr_wait =3D 0; int i; @@ -1172,12 +1171,12 @@ int ext4_block_write_begin(handle_t *handle, struct= folio *folio, BUG_ON(!folio_test_locked(folio)); BUG_ON(to > folio_size(folio)); BUG_ON(from > to); + WARN_ON_ONCE(blocksize > folio_size(folio)); =20 head =3D folio_buffers(folio); if (!head) head =3D create_empty_buffers(folio, blocksize, 0); - bbits =3D ilog2(blocksize); - block =3D (sector_t)folio->index << (PAGE_SHIFT - bbits); + block =3D EXT4_P_TO_LBLK(inode, folio->index); =20 for (bh =3D head, block_start =3D 0; bh !=3D head || !block_start; block++, block_start =3D block_end, bh =3D bh->b_this_page) { --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 92FC82C17A8; Sat, 25 Oct 2025 03:30:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363015; cv=none; b=fgE3YOBqECT9oz4oJRSFhvJ+VfTLdhhzwYNi9LSirXHJXTq8TymczRvHb972hA0fNHPWMRgfcN5SUL1E+W47BsSnvr9+BA/5kzrUZyu+mSie4AL51ymGjtWuMlNiYMNhvGharMRNLzvmw9kzZYx3eDoNvr8qQvvDhoigxijLpKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363015; c=relaxed/simple; bh=B0yDL/dPmU/L+Joe5KnD2c3F3zFSvBdS0TON+hhaZ5U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Q2Srnx8zE2RJerEByfu0lNJnFEOiEw7PueF56Op3sJcH26YouLEowOBq61i2w3Z6QezUgrcsJOD0BdaBqht7Sbqm3NPwdcB+mDAsy/hohT+kh9bD/sRtMb69UnBmVSsenXBbqsNRh6sb5vTp1HR6kCwK7vlBTwTWqmBVhJn+WDc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcT0mKYzKHMPX; Sat, 25 Oct 2025 11:29:13 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id C6C0C1A121C; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S22; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 18/25] ext4: support large block size in mpage_map_and_submit_buffers() Date: Sat, 25 Oct 2025 11:22:14 +0800 Message-Id: <20251025032221.2905818-19-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S22 X-Coremail-Antispam: 1UD129KBjvJXoW7Cw48Wr18Ww47WF43Ar1DWrg_yoW8XF1fpF W5W3ykGFsY9r4I9F4IqF1DZrn7Ka92gF45ZFWSva4aqFy5Kr10grn5t3W8Za95JFyxXrW0 vF1SkryxW3WxCrJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJHwAAso Content-Type: text/plain; charset="utf-8" From: Baokun Li Use the EXT4_P_TO_LBLK/EXT4_LBLK_TO_P macros to complete the conversion between folio indexes and blocks to avoid negative left/right shifts after supporting blocksize greater than PAGE_SIZE. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/inode.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index d97ce88d6e0a..cbf04b473ae7 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -2289,15 +2289,14 @@ static int mpage_map_and_submit_buffers(struct mpag= e_da_data *mpd) struct folio_batch fbatch; unsigned nr, i; struct inode *inode =3D mpd->inode; - int bpp_bits =3D PAGE_SHIFT - inode->i_blkbits; pgoff_t start, end; ext4_lblk_t lblk; ext4_fsblk_t pblock; int err; bool map_bh =3D false; =20 - start =3D mpd->map.m_lblk >> bpp_bits; - end =3D (mpd->map.m_lblk + mpd->map.m_len - 1) >> bpp_bits; + start =3D EXT4_LBLK_TO_P(inode, mpd->map.m_lblk); + end =3D EXT4_LBLK_TO_P(inode, mpd->map.m_lblk + mpd->map.m_len - 1); pblock =3D mpd->map.m_pblk; =20 folio_batch_init(&fbatch); @@ -2308,7 +2307,7 @@ static int mpage_map_and_submit_buffers(struct mpage_= da_data *mpd) for (i =3D 0; i < nr; i++) { struct folio *folio =3D fbatch.folios[i]; =20 - lblk =3D folio->index << bpp_bits; + lblk =3D EXT4_P_TO_LBLK(inode, folio->index); err =3D mpage_process_folio(mpd, folio, &lblk, &pblock, &map_bh); /* --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 18494202963; Sat, 25 Oct 2025 03:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; cv=none; b=ihPXqDCMYA9QZjP+ykRQN+5d6B+tdf+GF9Ov/TKkw6BAobyeXQhiRDEr5EbOttoq9gaV6DzGAjsPHH0DxENx3cAzPcJL3wVcbQ1u4DuiMs/Z2mNUMZPY4I+bklWc7C1iRA7s4Nki9koSy3pwPo30ie6Vso62uFaAiy3r0kzM9u4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; c=relaxed/simple; bh=IMixN2wTJY67RJ+Fy3YdGUNZ0Yx4HKBd1Fge4s/Tag0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=HUrdV6sCuyOelwFNg5+UUIrmcyOnNa44DMdCTiRPjOkXCxM7A2LYoZIvldJmqBh/3Jskx46htlNkb+KDMsXm4KXNWn+D835E2jaLdDzc7RtFw7pUVpOU/F6L88uFPgGR9aRJcnqfQUxWVjXX/IUoO46q03NtRSOnL7Znt49j6ew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcL1Z8BzYQtpV; Sat, 25 Oct 2025 11:29:06 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id D261F1A122E; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S23; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 19/25] ext4: support large block size in mpage_prepare_extent_to_map() Date: Sat, 25 Oct 2025 11:22:15 +0800 Message-Id: <20251025032221.2905818-20-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S23 X-Coremail-Antispam: 1UD129KBjvJXoW7Cw48Wr18Ww47WF43Ar1DWrg_yoW8Wr1UpF WrWrWkCr4fX34agFWSgF1qvwnrtas3GFWUJFW5tFyYqa45Kr95urWUtFn5ZF4vqFWxAryr XF4Skry3Wa1xJFJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW8JVW5JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I7gACsC Content-Type: text/plain; charset="utf-8" From: Baokun Li Use the EXT4_P_TO_LBLK/EXT4_LBLK_TO_P macros to complete the conversion between folio indexes and blocks to avoid negative left/right shifts after supporting blocksize greater than PAGE_SIZE. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/inode.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index cbf04b473ae7..ce48cc6780a3 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -2610,7 +2610,6 @@ static int mpage_prepare_extent_to_map(struct mpage_d= a_data *mpd) pgoff_t end =3D mpd->end_pos >> PAGE_SHIFT; xa_mark_t tag; int i, err =3D 0; - int blkbits =3D mpd->inode->i_blkbits; ext4_lblk_t lblk; struct buffer_head *head; handle_t *handle =3D NULL; @@ -2649,7 +2648,7 @@ static int mpage_prepare_extent_to_map(struct mpage_d= a_data *mpd) */ if (mpd->wbc->sync_mode =3D=3D WB_SYNC_NONE && mpd->wbc->nr_to_write <=3D - mpd->map.m_len >> (PAGE_SHIFT - blkbits)) + EXT4_LBLK_TO_P(mpd->inode, mpd->map.m_len)) goto out; =20 /* If we can't merge this page, we are done. */ @@ -2727,8 +2726,7 @@ static int mpage_prepare_extent_to_map(struct mpage_d= a_data *mpd) mpage_folio_done(mpd, folio); } else { /* Add all dirty buffers to mpd */ - lblk =3D ((ext4_lblk_t)folio->index) << - (PAGE_SHIFT - blkbits); + lblk =3D EXT4_P_TO_LBLK(mpd->inode, folio->index); head =3D folio_buffers(folio); err =3D mpage_process_page_bufs(mpd, head, head, lblk); --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 7561525B1DC; Sat, 25 Oct 2025 03:30:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; cv=none; b=B5rVdHaRVmbzs6V8eu5RBgFAQwjZt1yhnWbyZa1JvKmv5+7U9lxYXkJ7qCEKXan8t1ytNRbuclLKgC4RbeM06jGopeiJUQNH+EMjioHJRuARths7rAoX7p7BEVKHAg6HIQmuwzwKXigot/7h7XjJ+NkRPmAAJ1NMGJzW3Xato4k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; c=relaxed/simple; bh=jbnnx0yRBWSRQpu331QjQj5/2MkS7HOnnvLDzALKl9k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=EdyUiupDnvydf/X8sMDgVQLC32VZ6QSsMmiRq4oVv7HxWpr8jYPZ0bPmHhmVzL7Xl+oC3I557TrsS1fBPuuYBVt8gnoIVOwPAUJVrD/Zu8m/3cYa1RiKJLmtO4HRaXXoOQVTqcubhfdRJTATS6QTtVSZ+hx/LD/F4j6gIvpJjaA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcL1mBNzYQtpV; Sat, 25 Oct 2025 11:29:06 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id DD1631A19E5; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S24; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 20/25] ext4: support large block size in __ext4_block_zero_page_range() Date: Sat, 25 Oct 2025 11:22:16 +0800 Message-Id: <20251025032221.2905818-21-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S24 X-Coremail-Antispam: 1UD129KBjvdXoW7XFWxtrW7Gw47Cw4fKF1kAFb_yoWfWFgEkF W8Xr4rJanaqFnaya95Aan0q3Z2k3WrCr13ury3Jry5uFyDXFZ5Gw1DtrWYkr4qgF47WrW5 ArWkXFWYyF12gjkaLaAFLSUrUUUUjb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUbmkFF20E14v26rWj6s0DM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M28IrcIa0xkI8VA2jI8067AKxVWUAVCq3wA2048vs2 IY020Ec7CjxVAFwI0_Xr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28E F7xvwVC0I7IYx2IY67AKxVWDJVCq3wA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr 1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0D M2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjx v20xvE14v26r1Y6r17McIj6I8E87Iv67AKxVW8Jr0_Cr1UMcvjeVCFs4IE7xkEbVWUJVW8 JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2Y2 ka0xkIwI1lw4CEc2x0rVAKj4xxMxkF7I0En4kS14v26r1q6r43MxAIw28IcxkI7VAKI48J MxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwV AFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv2 0xvE14v26ryj6F1UMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UMIIF0xvE42xK8V AvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVW8JVWxJwCI42IY6I8E87Iv6xkF7I0E 14v26r4UJVWxJrUvcSsGvfC2KfnxnUUI43ZEXa7VUbG-e7UUUUU== X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJIAABsW Content-Type: text/plain; charset="utf-8" From: Zhihao Cheng Use the EXT4_P_TO_LBLK() macro to convert folio indexes to blocks to avoid negative left shifts after supporting blocksize greater than PAGE_SIZE. Signed-off-by: Zhihao Cheng Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index ce48cc6780a3..b3fa29923a1d 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -4066,7 +4066,7 @@ static int __ext4_block_zero_page_range(handle_t *han= dle, =20 blocksize =3D inode->i_sb->s_blocksize; =20 - iblock =3D folio->index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits); + iblock =3D EXT4_P_TO_LBLK(inode, folio->index); =20 bh =3D folio_buffers(folio); if (!bh) --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (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 761EA2BE7AA; Sat, 25 Oct 2025 03:30:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; cv=none; b=BgOyyFuZV3NqUI2ca0w3DbNRBXU2gR+xTaAZbbNxHvYwaXvX10iYvDECe8myZqilX/i8rbr3ElDms+qiewkjf6Cwg4FAARuuVzZu7uzyx+avxeZHWwqFBpG2cY5v1/u7mqCIAavI4SaEQchdtxL54t040JzjkukQ4d9Pwq1OFLE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363013; c=relaxed/simple; bh=tdGmzqmK3vsFjgSp4u1XjHEX9gSZcCKdpe6d8pvVijs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=eQOkZTsNyw5y33E5ZszqwAYdxXDA6z7nZx8OhbbUkK7VBZAjCZ5azOEddQ/XTXSB8yvuEyvayoocdWBlanVrsYJ9J26N6Ny5uiJ/KbJvqnBKxz6Wl4TjEK6d3VfwJ6brFnTt3Sykh6hUnrAQ9AZVLbORlAZGZEhtqB+8JSKaszo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcL2HHKzYQtpV; Sat, 25 Oct 2025 11:29:06 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id ED1331A121D; Sat, 25 Oct 2025 11:30:04 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S25; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 21/25] ext4: make online defragmentation support large block size Date: Sat, 25 Oct 2025 11:22:17 +0800 Message-Id: <20251025032221.2905818-22-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S25 X-Coremail-Antispam: 1UD129KBjvJXoWxWw4kAF48Ww17CFyUCrykKrg_yoW5Wr15pF WfAr15Kw45X3ZYgws2grsrZ3s5K3ZrCr48WrW0v34FgFW7tryvga4DA3WkuFyYgrWkJrZ3 ZFWjkry7W3y5J3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW5JVW7JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJIQAAsW Content-Type: text/plain; charset="utf-8" From: Zhihao Cheng There are several places assuming that block size <=3D PAGE_SIZE, modify them to support large block size (bs > ps). Signed-off-by: Zhihao Cheng Signed-off-by: Baokun Li --- fs/ext4/move_extent.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c index 4b091c21908f..cb55cd9e7eeb 100644 --- a/fs/ext4/move_extent.c +++ b/fs/ext4/move_extent.c @@ -270,7 +270,6 @@ move_extent_per_page(struct file *o_filp, struct inode = *donor_inode, int i, err2, jblocks, retries =3D 0; int replaced_count =3D 0; int from; - int blocks_per_page =3D PAGE_SIZE >> orig_inode->i_blkbits; struct super_block *sb =3D orig_inode->i_sb; struct buffer_head *bh =3D NULL; =20 @@ -288,11 +287,11 @@ move_extent_per_page(struct file *o_filp, struct inod= e *donor_inode, return 0; } =20 - orig_blk_offset =3D orig_page_offset * blocks_per_page + - data_offset_in_page; + orig_blk_offset =3D EXT4_P_TO_LBLK(orig_inode, orig_page_offset) + + data_offset_in_page; =20 - donor_blk_offset =3D donor_page_offset * blocks_per_page + - data_offset_in_page; + donor_blk_offset =3D EXT4_P_TO_LBLK(donor_inode, donor_page_offset) + + data_offset_in_page; =20 /* Calculate data_size */ if ((orig_blk_offset + block_len_in_page - 1) =3D=3D @@ -565,7 +564,7 @@ ext4_move_extents(struct file *o_filp, struct file *d_f= ilp, __u64 orig_blk, struct inode *orig_inode =3D file_inode(o_filp); struct inode *donor_inode =3D file_inode(d_filp); struct ext4_ext_path *path =3D NULL; - int blocks_per_page =3D PAGE_SIZE >> orig_inode->i_blkbits; + int blocks_per_page =3D 1; ext4_lblk_t o_end, o_start =3D orig_blk; ext4_lblk_t d_start =3D donor_blk; int ret; @@ -608,6 +607,9 @@ ext4_move_extents(struct file *o_filp, struct file *d_f= ilp, __u64 orig_blk, return -EOPNOTSUPP; } =20 + if (i_blocksize(orig_inode) < PAGE_SIZE) + blocks_per_page =3D PAGE_SIZE >> orig_inode->i_blkbits; + /* Protect orig and donor inodes against a truncate */ lock_two_nondirectories(orig_inode, donor_inode); =20 @@ -665,10 +667,8 @@ ext4_move_extents(struct file *o_filp, struct file *d_= filp, __u64 orig_blk, if (o_end - o_start < cur_len) cur_len =3D o_end - o_start; =20 - orig_page_index =3D o_start >> (PAGE_SHIFT - - orig_inode->i_blkbits); - donor_page_index =3D d_start >> (PAGE_SHIFT - - donor_inode->i_blkbits); + orig_page_index =3D EXT4_LBLK_TO_P(orig_inode, o_start); + donor_page_index =3D EXT4_LBLK_TO_P(donor_inode, d_start); offset_in_page =3D o_start % blocks_per_page; if (cur_len > blocks_per_page - offset_in_page) cur_len =3D blocks_per_page - offset_in_page; --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 66F462517AA; Sat, 25 Oct 2025 03:30:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363014; cv=none; b=Vh051i/Hu3mMujOT0NtRURNntiUU64W5WoR1ekiAbyMbe7pCbVYyhseIAoo3cBymnJhlpOKPiIl5StVYjuwEYu5WZeNOMllwd6S8o4rDuwJii3b1BlQ6WQpUNwZAw5/KGVRo5nZkgpRLQahckgCWHrB6WEdCA/Do2G2VKF/2M2M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363014; c=relaxed/simple; bh=FmVUn3+xEVIo1jPDBKJqn+eT2s2jLQkSeEAUP66Zy80=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VjON14I9FBX4KdzdqRDLALqzbjTYfMppS5H9DGs/Odv4S12xSl0eA0hqmIxggwX1y+qYw/CmSszSvhs4GVbGix0Vtuze3CnWOsMQnsygw0CTsLqCrbDKN8tsVi4aOzW02qBVHa6pCWW5D/nvOdHsBFX1gg1Ao2zJdeL2x2k2lyg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcT2qr3zKHMQT; Sat, 25 Oct 2025 11:29:13 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 1C8D11A1B52; Sat, 25 Oct 2025 11:30:05 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S26; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 22/25] fs/buffer: prevent WARN_ON in __alloc_pages_slowpath() when BS > PS Date: Sat, 25 Oct 2025 11:22:18 +0800 Message-Id: <20251025032221.2905818-23-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S26 X-Coremail-Antispam: 1UD129KBjvJXoWxJrykCF4kCr4rKry7uryUZFb_yoW8uF15pF 4rKanxtrWkKF429Fy3AanxtFy3Kas5JayUCFWxW3s3Z3WDGF9I9rnrC3WUZF1rtFyxAFy0 qF45ArWUuF17trUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW5JVW7JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJIgAAsV Content-Type: text/plain; charset="utf-8" From: Baokun Li In __alloc_pages_slowpath(), allocating page units greater than order-1 with the __GFP_NOFAIL flag may trigger an unexpected WARN_ON. To avoid this, handle the case separately in grow_dev_folio(). This ensures that buffer_head-based filesystems will not encounter the warning when using __GFP_NOFAIL to read metadata after BS > PS support is enabled. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi --- fs/buffer.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index 6a8752f7bbed..2f5a7dd199b2 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -1031,6 +1031,35 @@ static sector_t folio_init_buffers(struct folio *fol= io, return end_block; } =20 +static struct folio *blkdev_get_folio(struct address_space *mapping, + pgoff_t index, fgf_t fgp_flags, gfp_t gfp) +{ + struct folio *folio; + unsigned int min_order =3D mapping_min_folio_order(mapping); + + /* + * Allocating page units greater than order-1 with __GFP_NOFAIL in + * __alloc_pages_slowpath() can trigger an unexpected WARN_ON. + * Handle this case separately to suppress the warning. + */ + if (min_order <=3D 1) + return __filemap_get_folio(mapping, index, fgp_flags, gfp); + + while (1) { + folio =3D __filemap_get_folio(mapping, index, fgp_flags, + gfp & ~__GFP_NOFAIL); + if (!IS_ERR(folio) || !(gfp & __GFP_NOFAIL)) + return folio; + + if (PTR_ERR(folio) !=3D -ENOMEM && PTR_ERR(folio) !=3D -EAGAIN) + return folio; + + memalloc_retry_wait(gfp); + } + + return folio; +} + /* * Create the page-cache folio that contains the requested block. * @@ -1047,8 +1076,8 @@ static bool grow_dev_folio(struct block_device *bdev,= sector_t block, struct buffer_head *bh; sector_t end_block =3D 0; =20 - folio =3D __filemap_get_folio(mapping, index, - FGP_LOCK | FGP_ACCESSED | FGP_CREAT, gfp); + folio =3D blkdev_get_folio(mapping, index, + FGP_LOCK | FGP_ACCESSED | FGP_CREAT, gfp); if (IS_ERR(folio)) return false; =20 --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 BB2632C21D6; Sat, 25 Oct 2025 03:30:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363015; cv=none; b=jVIy3JJlEm8OZtOZoRJp2W800SVzsDEBI8S7C8zUPK3JR9Lv+WSol//wr8T7roYzlvB7vt1GT8VYi9GBlAuDb9fIjYWu5rn9vq4GJnmCX3pFYrpOdYS41L3RPFmcvu0dchjM+w9MJGqi7rumFY2TY+GmJtDdP73YnXfrLPVbRAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363015; c=relaxed/simple; bh=PZ0EZ1AQ4o8AyWlggtCntEpasjI9LjS9W3ettl6IstY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LPEcYmOaAaue9Njql/AhfRbMN9je2qWWn2Sts86Gwpdww3TbBZPvowyEzy+wQxg6pSIovytR5GPWyoQSoQMjPGhMp+g74KLGlEyWgeltUTjkKlmAi03/kV8+oXO16h8L8whFIcnWtHnAn+y3LvKmhbMxnkHQAephWhK89Tj4mtc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcT3Sp9zKHMQB; Sat, 25 Oct 2025 11:29:13 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 301BC1A1B4E; Sat, 25 Oct 2025 11:30:05 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S27; Sat, 25 Oct 2025 11:30:04 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 23/25] jbd2: prevent WARN_ON in __alloc_pages_slowpath() when BS > PS Date: Sat, 25 Oct 2025 11:22:19 +0800 Message-Id: <20251025032221.2905818-24-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S27 X-Coremail-Antispam: 1UD129KBjvJXoWxJrykCF4fGr47trW3AryDtrb_yoW8Ar45pF WfK3WSkFWrZry7ta13A3Z0va43Wws5Ga18GF97Z345Zw45Ar90kr1ftFy5JF1jyFW8Wayr CFsavw4fGrnIvaUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW5JVW7JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAQAMBWj7UbRJIwABsV Content-Type: text/plain; charset="utf-8" From: Baokun Li In __alloc_pages_slowpath(), allocating page units larger than order-1 with __GFP_NOFAIL may trigger an unexpected WARN_ON. To prevent this, handle the case explicitly in jbd2_alloc(), ensuring that the warning does not occur after enabling BS > PS support. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi --- fs/jbd2/journal.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index d480b94117cd..9185f9e2b201 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -2761,14 +2761,36 @@ static struct kmem_cache *get_slab(size_t size) void *jbd2_alloc(size_t size, gfp_t flags) { void *ptr; + int order; =20 BUG_ON(size & (size-1)); /* Must be a power of 2 */ =20 - if (size < PAGE_SIZE) + if (size < PAGE_SIZE) { ptr =3D kmem_cache_alloc(get_slab(size), flags); - else - ptr =3D (void *)__get_free_pages(flags, get_order(size)); + goto out; + } + + /* + * Allocating page units greater than order-1 with __GFP_NOFAIL in + * __alloc_pages_slowpath() can trigger an unexpected WARN_ON. + * Handle this case separately to suppress the warning. + */ + order =3D get_order(size); + if (order <=3D 1) { + ptr =3D (void *)__get_free_pages(flags, order); + goto out; + } =20 + while (1) { + ptr =3D (void *)__get_free_pages(flags & ~__GFP_NOFAIL, order); + if (ptr) + break; + if (!(flags & __GFP_NOFAIL)) + break; + memalloc_retry_wait(flags); + } + +out: /* Check alignment; SLUB has gotten this wrong in the past, * and this can lead to user data corruption! */ BUG_ON(((unsigned long) ptr) & (size-1)); --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 B6D1F273D6D; Sat, 25 Oct 2025 03:30:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363014; cv=none; b=LzzEybf59hpi1MOTXVa9LOE0/NMvV+Hvm8CHmTXeWItCt7qXznkc4LN9SYJ9kXtDk+ZxzWEsJ0xBD+cjXYk2QPdS2pNt2pLC2BxRay8eIM5y7Bh1SxfGTzwqaxiaiEaRrAuSC5AstycFNN4qDWd4AL+UptV9MyFfNLQ0E+NQoRw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363014; c=relaxed/simple; bh=eT5cEN37P4zMYUiWwsqyNiPeaGDU+PUJzbhLLNbqhHI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Ld5aRasxu2tZyT1ANDejK+WDLLJx5deaQZsstnf2NlCfe2N3p69ygxedJ1Y8ruGVvPn6sWAWF9O5wH9T2HmGdwwOLdrD9YLQuqa1SkuwuEyeu/DM7HP4RquhNMmn+ainLwNkxJEnvidbfzfOn/3ZGXxGiHtAmcDC9E94Q0jefks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcT4Gx5zKHMQB; Sat, 25 Oct 2025 11:29:13 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 4756C1A0FE8; Sat, 25 Oct 2025 11:30:05 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S28; Sat, 25 Oct 2025 11:30:05 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 24/25] ext4: add checks for large folio incompatibilities when BS > PS Date: Sat, 25 Oct 2025 11:22:20 +0800 Message-Id: <20251025032221.2905818-25-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S28 X-Coremail-Antispam: 1UD129KBjvJXoWxZryUAr4kKFWDJF1rXr4fKrg_yoW5KFWxpF Z5CryrAr48uF1Duan7KF4kWr1Y93WFkayUJ3ySg34UJ3srG340qFWftF1rtF12qrW8W34f XF4rtryxCw43CaDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW5JVW7JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I8AABsf Content-Type: text/plain; charset="utf-8" From: Baokun Li Supporting a block size greater than the page size (BS > PS) requires support for large folios. However, several features (e.g., verity, encrypt) and mount options (e.g., data=3Djournal) do not yet support large folios. To prevent conflicts, this patch adds checks at mount time to prohibit these features and options from being used when BS > PS. Since the data mode cannot be changed on remount, there is no need to check on remount. A new mount flag, EXT4_MF_LARGE_FOLIO, is introduced. This flag is set after the checks pass, indicating that the filesystem has no features or mount options incompatible with large folios. Subsequent checks can simply test for this flag to avoid redundant verifications. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi Reviewed-by: Jan Kara --- fs/ext4/ext4.h | 3 ++- fs/ext4/inode.c | 10 ++++------ fs/ext4/super.c | 26 ++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 8223ed29b343..f1163deb0812 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1859,7 +1859,8 @@ static inline int ext4_get_resgid(struct ext4_super_b= lock *es) enum { EXT4_MF_MNTDIR_SAMPLED, EXT4_MF_FC_INELIGIBLE, /* Fast commit ineligible */ - EXT4_MF_JOURNAL_DESTROY /* Journal is in process of destroying */ + EXT4_MF_JOURNAL_DESTROY,/* Journal is in process of destroying */ + EXT4_MF_LARGE_FOLIO, /* large folio is support */ }; =20 static inline void ext4_set_mount_flag(struct super_block *sb, int bit) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index b3fa29923a1d..04f9380d4211 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5143,14 +5143,12 @@ static bool ext4_should_enable_large_folio(struct i= node *inode) { struct super_block *sb =3D inode->i_sb; =20 - if (!S_ISREG(inode->i_mode)) - return false; - if (test_opt(sb, DATA_FLAGS) =3D=3D EXT4_MOUNT_JOURNAL_DATA || - ext4_test_inode_flag(inode, EXT4_INODE_JOURNAL_DATA)) + if (!ext4_test_mount_flag(sb, EXT4_MF_LARGE_FOLIO)) return false; - if (ext4_has_feature_verity(sb)) + + if (!S_ISREG(inode->i_mode)) return false; - if (ext4_has_feature_encrypt(sb)) + if (ext4_test_inode_flag(inode, EXT4_INODE_JOURNAL_DATA)) return false; =20 return true; diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 7338c708ea1d..fdc006a973aa 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -5034,6 +5034,28 @@ static const char *ext4_has_journal_option(struct su= per_block *sb) return NULL; } =20 +static int ext4_check_large_folio(struct super_block *sb) +{ + const char *err_str =3D NULL; + + if (test_opt(sb, DATA_FLAGS) =3D=3D EXT4_MOUNT_JOURNAL_DATA) + err_str =3D "data=3Djournal"; + else if (ext4_has_feature_verity(sb)) + err_str =3D "verity"; + else if (ext4_has_feature_encrypt(sb)) + err_str =3D "encrypt"; + + if (!err_str) { + ext4_set_mount_flag(sb, EXT4_MF_LARGE_FOLIO); + } else if (sb->s_blocksize > PAGE_SIZE) { + ext4_msg(sb, KERN_ERR, "bs(%lu) > ps(%lu) unsupported for %s", + sb->s_blocksize, PAGE_SIZE, err_str); + return -EINVAL; + } + + return 0; +} + static int ext4_load_super(struct super_block *sb, ext4_fsblk_t *lsb, int silent) { @@ -5310,6 +5332,10 @@ static int __ext4_fill_super(struct fs_context *fc, = struct super_block *sb) =20 ext4_apply_options(fc, sb); =20 + err =3D ext4_check_large_folio(sb); + if (err < 0) + goto failed_mount; + err =3D ext4_encoding_init(sb, es); if (err) goto failed_mount; --=20 2.46.1 From nobody Mon Feb 9 01:50:30 2026 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (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 D9B782D978A; Sat, 25 Oct 2025 03:30:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363017; cv=none; b=XhjnhiZS/QBDmlrH/BgwV1yr/2jtIJkbMyfayru6aPc0buTYxJlVE0dvISS9ESJzG2Ty0Be3483X4BURolB0zwRZMIU5z4MYA4c4e0sgO0ZIxSvAEOJsCyY6t7gocw5Z+SeOgA25uRfrD5FwcWCukOSMV0NCQljjJnKouSSHBhA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761363017; c=relaxed/simple; bh=VGktx5fV3mvcEcsamy+r9TS/X79co1WNFdTFpf0V4FA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GR6idsQUWWxKMIMzPMi39asmktsCRQkrPU04TVrwDNMebk/e0jEAxnvYT8d7jXycm0e0Xvqg6894eRCwS7uQsf7LdoBd7i2GV5PCWuf2RNwmcL9tzfZSiYbsB3m8cu7xVdwKSFqoU0eDTwVrLtv6hNVqdPlCEuqBwIEY02xcpf0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4ctlcT4tGCzKHMQB; Sat, 25 Oct 2025 11:29:13 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.75]) by mail.maildlp.com (Postfix) with ESMTP id 61CC31A1B60; Sat, 25 Oct 2025 11:30:05 +0800 (CST) Received: from huaweicloud.com (unknown [10.50.87.129]) by APP2 (Coremail) with SMTP id Syh0CgBHnEQ6RPxox1YbBg--.45388S29; Sat, 25 Oct 2025 11:30:05 +0800 (CST) From: libaokun@huaweicloud.com To: linux-ext4@vger.kernel.org Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.cz, linux-kernel@vger.kernel.org, kernel@pankajraghav.com, mcgrof@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yi.zhang@huawei.com, yangerkun@huawei.com, chengzhihao1@huawei.com, libaokun1@huawei.com, libaokun@huaweicloud.com Subject: [PATCH 25/25] ext4: enable block size larger than page size Date: Sat, 25 Oct 2025 11:22:21 +0800 Message-Id: <20251025032221.2905818-26-libaokun@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20251025032221.2905818-1-libaokun@huaweicloud.com> References: <20251025032221.2905818-1-libaokun@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: Syh0CgBHnEQ6RPxox1YbBg--.45388S29 X-Coremail-Antispam: 1UD129KBjvJXoW7uFyxArW7Gr1DJF18Cr1UGFg_yoW8tw45pF WrCFy8Gr15W34v9an2ga1DZF18K3y0kFWUXa4Fgw1xZrZrJ340grn7tF15XFyjqrZ3ZryF qF18Ary7XwnxCFJanT9S1TB71UUUUUDqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUQa14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Gr1j6F4UJwAm72CE4IkC6x0Yz7v_Jr0_ Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8c xan2IY04v7M4kE6xkIj40Ew7xC0wCY1x0262kKe7AKxVWUtVW8ZwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4 vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IY x2IY67AKxVW5JVW7JwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8Jr0_Cr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdsqAUUUUU= X-CM-SenderInfo: 5olet0hnxqqx5xdzvxpfor3voofrz/1tbiAgAMBWj7Ua9I8QAAsf Content-Type: text/plain; charset="utf-8" From: Baokun Li Since block device (See commit 3c20917120ce ("block/bdev: enable large folio support for large logical block sizes")) and page cache (See commit ab95d23bab220ef8 ("filemap: allocate mapping_min_order folios in the page cache")) has the ability to have a minimum order when allocating folio, and ext4 has supported large folio in commit 7ac67301e82f ("ext4: enable large folio for regular file"), now add support for block_size > PAGE_SIZE in ext4. set_blocksize() -> bdev_validate_blocksize() already validates the block size, so ext4_load_super() does not need to perform additional checks. Here we only need to enable large folio by default when s_min_folio_order is greater than 0 and add the FS_LBS bit to fs_flags. In addition, mark this feature as experimental. Signed-off-by: Baokun Li Reviewed-by: Zhang Yi --- fs/ext4/inode.c | 3 +++ fs/ext4/super.c | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 04f9380d4211..ba6cf05860ae 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5146,6 +5146,9 @@ static bool ext4_should_enable_large_folio(struct ino= de *inode) if (!ext4_test_mount_flag(sb, EXT4_MF_LARGE_FOLIO)) return false; =20 + if (EXT4_SB(sb)->s_min_folio_order) + return true; + if (!S_ISREG(inode->i_mode)) return false; if (ext4_test_inode_flag(inode, EXT4_INODE_JOURNAL_DATA)) diff --git a/fs/ext4/super.c b/fs/ext4/super.c index fdc006a973aa..4c0bd79bdf68 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -5053,6 +5053,9 @@ static int ext4_check_large_folio(struct super_block = *sb) return -EINVAL; } =20 + if (sb->s_blocksize > PAGE_SIZE) + ext4_msg(sb, KERN_NOTICE, "EXPERIMENTAL bs(%lu) > ps(%lu) enabled.", + sb->s_blocksize, PAGE_SIZE); return 0; } =20 @@ -7432,7 +7435,8 @@ static struct file_system_type ext4_fs_type =3D { .init_fs_context =3D ext4_init_fs_context, .parameters =3D ext4_param_specs, .kill_sb =3D ext4_kill_sb, - .fs_flags =3D FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_MGTIME, + .fs_flags =3D FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_MGTIME | + FS_LBS, }; MODULE_ALIAS_FS("ext4"); =20 --=20 2.46.1