From nobody Sun May 24 21:41:18 2026 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D401927E045 for ; Thu, 21 May 2026 05:30:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779341460; cv=none; b=Es7WLfBQ1UQ+Elsrtqah1yhWdZFkp4xdgJ3tlaEmWpRydoIXDInsVFvze/xTynT8i7CiM4+/G9YQBQgxibefNvOZsRC4wcacIzsA+nR9zSvpkiuHnJLfxnYgaHFW2gyo/9Y769fBw4ggggi5tkefJ/NFj95MvUdLA7NVhKThfuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779341460; c=relaxed/simple; bh=8JSk+qwXlV7T/SUkglL24sFEurDUNzqKBETQXGqm21Q=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=JCzSB39QS2Nddl4xGrwYcBYI98nsUUG3+wGaH5ayIl8KrXhPdtQhTUbO6ORv5GS0YZ8nXgA71LFUwB8kbPGssED0pNS6cM6SL+a7mz5OwBCSg+X6pSQB2HbXAthTv4RI2T65KmUtu7ZOEJ6RmD1xT+H3xxYS3cdvspjvSkCGbzo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=U5j/DVhN; arc=none smtp.client-ip=209.85.215.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="U5j/DVhN" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-c827313dac0so3046472a12.1 for ; Wed, 20 May 2026 22:30:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779341458; x=1779946258; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=q0PEOQd221VA2US+NtTYAbb78QjXPFIspT57cYj0TFg=; b=U5j/DVhNcgi4M9A4B+tm6F06OiyJ8ejBuIBGigK99cBe0Lj1akjmccnOsA/M6xUNKe sGEVmgD2r6/BrjZL3UQCo6RV+s+wvBumchlyU7WPgmboqlaFcTfAllJ5I278qhEGirqw bgr1RGeaQNVzAsuCytxgly7dlWSXwQ6Si9p8hzL1jJlFEbbG1GT5U1ZNfnaTRmIxPh9u bVneeNmqbaeNWr9NF3/ahFhaK2dfSdGCVGayqM84zd6OHFBKcViVJSSgHYfpAjZvrc/d 8B2AJt5ysWTCTXhFUFptacMCIZ2lY249P/II7ECF53//RnpVyemm5nJFOhHcQ2kYsyQA woug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779341458; x=1779946258; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=q0PEOQd221VA2US+NtTYAbb78QjXPFIspT57cYj0TFg=; b=W53qfSeu06n50f484HkYLX4wAqu9DyxER89A1dHuO1QVmASHHboW9IdU471AcYz1lz mP5I0ZZ+wVYdOW4Id1b7BQhVh9Zagsj4T619+gl281eS8ZAexuO8KWGHGJJNb+r3fA6Y ceoVEwbu3jXHJKYgm+ah7SeyoNIDunctdbahItpYgYu2s68k9cODAg+xfsnnAsgGOJsL UnkvAAltmOk90JpdSM5Oom7+CUGv2EExl5df1FlFCeLTn1ddYSGFo5oHReSkBTJYuoCJ ju0EhGlRUzEQLDzmXorsVcwT6R8IxoGSU79rObQqTbhgF0kThH4gzyRawod1D+jvGMv2 wCTA== X-Forwarded-Encrypted: i=1; AFNElJ/p81WTo7mGljUoKAW20dPTKzS25RhLzx1ho6JozjGNV+BLw3UYUj+7k/n7xEdf01CvJLGyQoYZJybi4uU=@vger.kernel.org X-Gm-Message-State: AOJu0YyqYJBU50MDr07OG+MbbxN9hfE82YeUDEP+suESMw/s66dpV4QO b7A/oxpZ+uso30pNUCIsReYD8Vwtr/5qn4wlc9fvdXPNpbKh8KOUpoCa X-Gm-Gg: Acq92OHTmW06M6Ow3tgbHix7714L+FLEbyRixuzgHq5nAr3CrMTsI3GL9vr3jL3XQD1 l8F+h7FmBLatwTxcTUfmVW4ZlW6BNN7ighZA7zxoqUUB0ATQzc7TRnzct/W0j03qk4zNkIc751f PonF1kfsQYFt7g6SjPFfJ7whfxPKYO1PUmv50NgIOkMqcN/tjI5K5n+w0noe/EnGRgvUL6G4o+L 0XWPiuomiouU93a5behp2XaOlWt7LSf4zgReNvkH6VdnrmxxYIbJ4ixmHA5l6/0SJB5e6I/jnQc vCosp8ReIbeTQiuUqRPA72hK5CqbJSpwIFDUt1Pma60CeVw+5jPVpT0NKtZAZLsFWUv7RGZU2Ew sv2bUTwVRzCHknCOzXJIqRSGZdmZDR9KQVezfSxnnr2/s3d0ZhaqqisWY9/iXsFNG6WJBoUcKYU I6gICr+xff/d7BMrxGvhY7D2Ucxj/xk9ZqIOVar+o9evS4BTxFzloL9PWn9JYpT/KHAJGzWA== X-Received: by 2002:a17:902:fc50:b0:2b0:91e6:bc18 with SMTP id d9443c01a7336-2bea2641874mr13741025ad.14.1779341458019; Wed, 20 May 2026 22:30:58 -0700 (PDT) Received: from qiwenjie-ThinkCentre-M760t.mioffice.cn ([43.224.245.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bd5cfe47bdsm244625805ad.44.2026.05.20.22.30.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 22:30:57 -0700 (PDT) From: Wenjie Qi X-Google-Original-From: Wenjie Qi To: jaegeuk@kernel.org, chao@kernel.org Cc: ruipengqi3@gmail.com, linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, qiwenjie@xiaomi.com, qwjhust@gmail.com Subject: [PATCH] f2fs: submit cached data bios before gc_merge GC Date: Thu, 21 May 2026 13:30:50 +0800 Message-ID: <20260521053050.1785858-1-qiwenjie@xiaomi.com> X-Mailer: git-send-email 2.43.0 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" Commit fefdf0723650 ("f2fs: fix potential deadlock in f2fs_balance_fs()") added cached DATA bio submission before direct foreground GC in f2fs_balance_fs(). This avoids a deadlock between writeback and GC on cached data folios. However, when gc_merge is enabled, f2fs_balance_fs() does not execute foreground GC in the caller. It wakes the background GC thread and waits for that foreground request to finish. That branch currently skips the cached DATA bio submission, so the same foreground GC request can still start with cached DATA bios pending. Move the cached DATA bio submission before the gc_merge branch so both direct and merged foreground GC paths satisfy the same precondition. Fixes: fefdf0723650 ("f2fs: fix potential deadlock in f2fs_balance_fs()") Signed-off-by: Wenjie Qi --- fs/f2fs/segment.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 7c8ac62b1b0..1ef4edb7707 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -445,6 +445,13 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool ne= ed) if (has_enough_free_secs(sbi, 0, 0)) return; =20 + /* + * Submit all cached OPU/IPU DATA bios before triggering + * foreground GC to avoid potential deadlocks. + */ + f2fs_submit_merged_write(sbi, DATA); + f2fs_submit_all_merged_ipu_writes(sbi); + if (test_opt(sbi, GC_MERGE) && sbi->gc_thread && sbi->gc_thread->f2fs_gc_task) { DEFINE_WAIT(wait); @@ -464,13 +471,6 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool ne= ed) .err_gc_skipped =3D false, .nr_free_secs =3D 1 }; =20 - /* - * Submit all cached OPU/IPU DATA bios before triggering - * foreground GC to avoid potential deadlocks. - */ - f2fs_submit_merged_write(sbi, DATA); - f2fs_submit_all_merged_ipu_writes(sbi); - f2fs_down_write_trace(&sbi->gc_lock, &gc_control.lc); stat_inc_gc_call_count(sbi, FOREGROUND); f2fs_gc(sbi, &gc_control); --=20 2.43.0