FAILED: patch "[PATCH] f2fs: fix to reset all pinned status during fggc" failed to apply to 6.6-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 2b8704b6a8b2896ccad1f5941d9a3e2c5031a470
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090945-delicacy-nutmeg-a9dc@gregkh' --subject-prefix 'PATCH 6.6.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 2b8704b6a8b2896ccad1f5941d9a3e2c5031a470 Mon Sep 17 00:00:00 2001
From: Chao Yu <[email protected]>
Date: Mon, 17 Aug 2026 02:39:27 +0000
Subject: [PATCH] f2fs: fix to reset all pinned status during fggc
Otherwise, the pinned status may affect latter flow of fggc.
fs/f2fs/gc.c +3 -0
@@ -2183,6 +2183,9 @@ int f2fs_gc_range(struct f2fs_sb_info *sbi,do_garbage_collect (sbi, segno, &gc_list,FG_GC , true, false);put_gc_inode (&gc_list); +/* reset all pinned status during fggc */ +f2fs_unpin_all_sections (sbi, true); +if (!dry_run &&get_valid_blocks (sbi, segno, true)) { err = -EAGAIN ; goto next;
Sasha Levin
maintainerPATCH 1/2 f2fs: fix to reclaim space in f2fs_allocate_pinning_section()
From: Chao Yu <[email protected]>
[ Upstream commit fa487f56efba6344aef67d871688f0908fe08af3 ]
It needs to trigger checkpoint to free space reclaimed by f2fs_gc_range(), otherwise, fallocate() on pinfile will fail easily even there is slash space in conventional zone.
[Testcase]nullblk_create.sh 512 2 1024 1024
mkfs.f2fs /dev/nullb0 -f -m
mount /dev/nullb0 /mnt/f2fs/
touch /mnt/f2fs/pinfilef2fs_io pinfile set /mnt/f2fs/pinfile
mkdir /mnt/f2fs/dir/
for((i=0;i<3934;i++)) do { dd if=/dev/zero of=/mnt/f2fs/dir/$i bs=1M count=1;} done sync
for((i=0;i<3934;i+=2)) do { rm /mnt/f2fs/dir/$i;} done for((i=0;i<1950;i++)) do { rm /mnt/f2fs/dir/$i;} done
syncf2fs_io fallocate 0 0 $((1024*1024*1024)) /mnt/f2fs/pinfile
sync
stat /mnt/f2fs/pinfilef2fs_io fiemap 0 $((1024*1024*1024)) /mnt/f2fs/pinfile
[Before]
fallocate failed: Resource temporarily unavailable
File: /mnt/f2fs/pinfile
Size: 109051904 Blocks: 213208 IO Block: 4096 regular file
Device: 250,0 Inode: 4 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-08-12 20:04:02.264000000 +0800
Modify: 2026-08-12 20:04:26.784000000 +0800
Change: 2026-08-12 20:04:26.784000000 +0800
Birth: -
root@localhost:~#
root@localhost:~#
root@localhost:~#
root@localhost:~# f2fs_io fiemap 0 $((1024*1024*1024)) /mnt/f2fs/pinfile
Fiemap: offset = 0 len = 1073741824
logical addr. physical addr. length flags
0 0000000000000000 0000000002e00000 0000000000200000 00001000
1 0000000000200000 000000002dc00000 0000000000400000 00001000
2 0000000000600000 000000002e400000 0000000000600000 00001000
3 0000000000c00000 000000007a400000 0000000005c00000 00001001[After]
File: /mnt/f2fs/pinfile
Size: 1073741824 Blocks: 2099216 IO Block: 4096 regular file
Device: 250,0 Inode: 4 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-08-12 19:47:49.428000000 +0800
Modify: 2026-08-12 19:49:06.808000000 +0800
Change: 2026-08-12 19:49:06.808000000 +0800
Birth: -
Fiemap: offset = 0 len = 1073741824
logical addr. physical addr. length flags
0 0000000000000000 0000000002e00000 0000000000200000 00001000 1 0000000000200000 000000003aa00000 0000000000400000 00001000 2 0000000000600000 000000003b400000 0000000000200000 00001000 3 0000000000800000 000000007a200000 0000000005e00000 00001000 4 0000000006600000 0000000002800000 0000000000200000 00001000 5 0000000006800000 0000000003200000 0000000000400000 00001000 6 0000000006c00000 0000000003000000 0000000000200000 00001000 7 0000000006e00000 0000000003600000 0000000037200000 00001000 8 000000003e000000 000000003b200000 0000000000200000 00001000 9 000000003e200000 000000003a800000 0000000000200000 00001000 10 000000003e400000 000000003ae00000 0000000000400000 00001000 11 000000003e800000 000000003b600000 0000000001800000 00001001
Backport to 6.6: retain the existing gc_lock helpers and first-device GC range with its one-section reclaim request. Capture the GC result, return GC failures, and issue the checkpoint after releasing gc_lock before the single allocation retry. The newer lock-tracing and zone-range interfaces are not required for this fix.
Add braces around the existing -EAGAIN check in f2fs_gc_range(), without changing its behavior. This supplies the merge context needed to cherry-pick 2b8704b6a8b2896ccad1f5941d9a3e2c5031a470 cleanly on 6.6, without importing the upstream GC locking refactor or adding functions.
Stable-dep-of: 2b8704b6a8b2 ("f2fs: fix to reset all pinned status during fggc")
--- fs/f2fs/gc.c | 3 ++- fs/f2fs/segment.c | 13 +++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-)
fs/f2fs/gc.c +2 -1
@@ -2060,8 +2060,9 @@ int f2fs_gc_range(struct f2fs_sb_info *sbi, dry_run_sections == 0);put_gc_inode (&gc_list); -if (!dry_run &&get_valid_blocks (sbi, segno, true)) +if (!dry_run &&get_valid_blocks (sbi, segno, true)) {return -EAGAIN ; + }if (dry_run && dry_run_sections && !get_valid_blocks (sbi, segno, true) && --gc_secs ==0 )break ;
fs/f2fs/segment.c +9 -4
@@ -3148,11 +3148,16 @@ int f2fs_allocate_pinning_section(struct f2fs_sb_info *sbi)if (f2fs_sb_has_blkzoned (sbi) && err && gc_required) {f2fs_down_write (&sbi->gc_lock); -f2fs_gc_range (sbi,0 ,GET_SEGNO (sbi,FDEV (0 ).end_blk), true,1 ); + err =f2fs_gc_range (sbi,0 ,GET_SEGNO (sbi,FDEV (0 ).end_blk), + true,1 );f2fs_up_write (&sbi->gc_lock); - - gc_required = false; - goto retry; +if (err) +return err; + err =f2fs_sync_fs (sbi->sb,1 ); +if (!err) { + gc_required = false; + goto retry; + } }return err;
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 f2fs: fix to reset all pinned status during fggc
From: Chao Yu <[email protected]>
[ Upstream commit 2b8704b6a8b2896ccad1f5941d9a3e2c5031a470 ]
Otherwise, the pinned status may affect latter flow of fggc.
--- fs/f2fs/gc.c | 3 +++ 1 file changed, 3 insertions(+)
fs/f2fs/gc.c +3 -0
@@ -2060,6 +2060,9 @@ int f2fs_gc_range(struct f2fs_sb_info *sbi, dry_run_sections == 0);put_gc_inode (&gc_list); +/* reset all pinned status during fggc */ +f2fs_unpin_all_sections (sbi, true); +if (!dry_run &&get_valid_blocks (sbi, segno, true)) {return -EAGAIN ; }
Signature · 1 line
2.53.0