From nobody Tue Dec 2 01:51:17 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9BB2D136349 for ; Fri, 21 Nov 2025 01:48:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763689730; cv=none; b=R4t8YlIKNbF0E0k95hXry6cfCrBdOQullX9WuJadgeDsBAVRlEcQ0sdutSfbKjE8kHLG6/X0YSe3hrl4gBlnwTkU7eG0PGOFFB8k3GvYmOta/D672k4NplhjiFZ17EGaHeKyIyHInKPKBdAu5zFEdBcJmQriNH6548z041TWqAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763689730; c=relaxed/simple; bh=/W57j2ll3ACPGt8wN96H/XWIaVIW2a3EbaNx6lzNUEw=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=GSv50SWEbGLZcS99cTXMvQE4LTdyj6umZUfih9RLa9kbQsDzSOrkEEyVpzzn20Unh+1mxNSiO03kA/jAZ2MRBL/c3KC29kgZAL+Cho0Q0LBEhIrGj9CBQwo0a2CLJ/uRwW3CJ/jXYIjjLH8/lsVsQfnhlfjMovKqmlcBKAHHQh0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=S80GXaus; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="S80GXaus" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3FC80C4CEF1; Fri, 21 Nov 2025 01:48:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763689728; bh=/W57j2ll3ACPGt8wN96H/XWIaVIW2a3EbaNx6lzNUEw=; h=From:To:Cc:Subject:Date:From; b=S80GXausSHkLJWw/Bl5XMhNLGKWvRw60S8IzQbwCIXwkTQ/R2xCTsZzX/hwAjPv4J 14miCzfUD9TjPgaGyi5ggWoNDg91FD3xPMeTGbp3/eeJhdKw0QG6UFTuj1twczqJqw L1G4qWc7rLXkVPAFHNUvDSW2VplEasSysNiez1uAYPLJLfZrPmzcCw6SvH9vxrVJTz 6WsyQ+rmXWH+IAMgjmzIhf8P+vG+WIui1iH/ne4uuHCSQLJZG5AMu0WotEezV41dpp WW2DB5I3RHo3opMHsJZtuWtEcLIn/AUDinbufeYjMfyZNkYkOp3lYWNtJMqTFYtuTo nFIXTi4s6smvg== From: Jaegeuk Kim To: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Cc: Jaegeuk Kim Subject: [PATCH] f2fs: add a way to change the desired readahead folio order Date: Fri, 21 Nov 2025 01:48:46 +0000 Message-ID: <20251121014846.1971924-1-jaegeuk@kernel.org> X-Mailer: git-send-email 2.52.0.487.g5c8c507ade-goog 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 Content-Type: text/plain; charset="utf-8" This patch adds a sysfs entry to change the folio order for readahead. Signed-off-by: Jaegeuk Kim --- fs/f2fs/data.c | 1 + fs/f2fs/f2fs.h | 3 +++ fs/f2fs/super.c | 1 + fs/f2fs/sysfs.c | 9 +++++++++ 4 files changed, 14 insertions(+) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index c80d7960b652..faf1faa27c41 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -2764,6 +2764,7 @@ int f2fs_readahead_pages(struct file *file, loff_t of= fset, loff_t len) while (nrpages) { unsigned long this_chunk =3D min(nrpages, ra_pages); =20 + ractl.ra->desired_order =3D F2FS_I_SB(inode)->ra_folio_order; ractl.ra->ra_pages =3D this_chunk; =20 page_cache_sync_ra(&ractl, this_chunk << 1); diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 934287cc5624..0e61e253d861 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -1921,6 +1921,9 @@ struct f2fs_sb_info { /* carve out reserved_blocks from total blocks */ bool carve_out; =20 + /* enable large folio. */ + unsigned int ra_folio_order; + #ifdef CONFIG_F2FS_FS_COMPRESSION struct kmem_cache *page_array_slab; /* page array entry */ unsigned int page_array_slab_size; /* default page array slab size */ diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index d47ec718f3be..dabac6f288f0 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -4287,6 +4287,7 @@ static void init_sb_info(struct f2fs_sb_info *sbi) NAT_ENTRY_PER_BLOCK)); sbi->allocate_section_hint =3D le32_to_cpu(raw_super->section_count); sbi->allocate_section_policy =3D ALLOCATE_FORWARD_NOHINT; + sbi->ra_folio_order =3D 0; F2FS_ROOT_INO(sbi) =3D le32_to_cpu(raw_super->root_ino); F2FS_NODE_INO(sbi) =3D le32_to_cpu(raw_super->node_ino); F2FS_META_INO(sbi) =3D le32_to_cpu(raw_super->meta_ino); diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c index c42f4f979d13..2537a25986a6 100644 --- a/fs/f2fs/sysfs.c +++ b/fs/f2fs/sysfs.c @@ -906,6 +906,13 @@ static ssize_t __sbi_store(struct f2fs_attr *a, return count; } =20 + if (!strcmp(a->attr.name, "ra_folio_order")) { + if (t < 0 || t > MAX_PAGECACHE_ORDER) + return -EINVAL; + sbi->ra_folio_order =3D t; + return count; + } + *ui =3D (unsigned int)t; =20 return count; @@ -1180,6 +1187,7 @@ F2FS_SBI_GENERAL_RW_ATTR(migration_window_granularity= ); F2FS_SBI_GENERAL_RW_ATTR(dir_level); F2FS_SBI_GENERAL_RW_ATTR(allocate_section_hint); F2FS_SBI_GENERAL_RW_ATTR(allocate_section_policy); +F2FS_SBI_GENERAL_RW_ATTR(ra_folio_order); #ifdef CONFIG_F2FS_IOSTAT F2FS_SBI_GENERAL_RW_ATTR(iostat_enable); F2FS_SBI_GENERAL_RW_ATTR(iostat_period_ms); @@ -1422,6 +1430,7 @@ static struct attribute *f2fs_attrs[] =3D { ATTR_LIST(reserved_pin_section), ATTR_LIST(allocate_section_hint), ATTR_LIST(allocate_section_policy), + ATTR_LIST(ra_folio_order), NULL, }; ATTRIBUTE_GROUPS(f2fs); --=20 2.52.0.487.g5c8c507ade-goog