From nobody Tue Apr 7 11:15:20 2026 Received: from mail-dl1-f48.google.com (mail-dl1-f48.google.com [74.125.82.48]) (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 1DBF234BA33 for ; Fri, 13 Mar 2026 16:00:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773417660; cv=none; b=RIx+v6cu33PPXz9UOUM7o3tqopE2cg27z7VOa7f4aeZV09IdCzuhaRQgORhUmq1f8j2W/piOhEW66r0Rdk/ZYXyp8+On2r7RViKndDroHuT3xi6sJcO+EPgJrzn3xL65JrGYBfvQvbTbiyGiYF5RoUUShViQJtJilYF95v8M09I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773417660; c=relaxed/simple; bh=+JGPUyJDzaeLAbQBFn3VTOkr5vGZ7IXMdsm/RcXzIn0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=boPkwb6PY320E7wZ9oZikL3+JoPREKf88uUhDdkbbKW732EGG93rBMAkk/fxKA3KoJh3UjORJ6QtXV/FfWH6USrYw4uNmucGTtMkajx2pGrniK8EuSYAvRdAs/L7nj8bRDivmGXM2CVGN1ZEXr80td+UrVqjSP+3l/wAjepDCbg= 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=ZFIyZ7Wu; arc=none smtp.client-ip=74.125.82.48 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="ZFIyZ7Wu" Received: by mail-dl1-f48.google.com with SMTP id a92af1059eb24-1274204434bso2080900c88.1 for ; Fri, 13 Mar 2026 09:00:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773417658; x=1774022458; 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=LN9w9yNR9f1cITqQHAVZ9h1iIpjIk95ptPB5LEz0210=; b=ZFIyZ7WuYcJcPAn8Xx0gRX2fi9A6py07EYkebm5yDQTIlINoNXZkQp9btyCl+wxz+N lz7VZezgl36sCbqcBft3XtkkoAfbiwmKYcM/9WyykILnIql1rRbAcCIVCkl9mWwT1Ppk 4axQzRszTlcr3tckGjY7T8JUPNutp+evfHkQjlgDHZpo88cvMWfGhbBXmtCBU0MLvlX5 hN38/cE0itCITGAFoqpDnKNI8V6ypEWhN/cMcgOrvThOSzP5CrB1zYVf3V3DWkRQy1HP osP5tz/EtFYGkEYmkdQGeLJe/+9Benn3HJau7WeYlqZPjn0vpgu6dMeCJ9ca+GP8JkTV ijkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773417658; x=1774022458; 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=LN9w9yNR9f1cITqQHAVZ9h1iIpjIk95ptPB5LEz0210=; b=BrZQqiUiKyfkvqe7a1U8jD5cjihzK6QyCSOofIjQUGEIBQU9uXyiNuKL4pgEkIYXfQ ZDB3Q7kIRCXsrWX/aO5WLfbTHA3WOm9nsmnALVtux0Ud7F0fQQjTxTOJEAGfmEURKNXq h9l6cbBRnvSvKXJ4tCl3lIReimLydHnVNXiX201NBp709m1TOfG5p06wsxxlaQjFS/pf Lb2Tymtb3arU/1ztKgcz61WHRTC6JxqOHv7WXgLXfNQ2zeHxQLjfASKCQTPHEfmTL0oT LMSHMZT2cwqmIbp+Y0XG3LDc1DRfFp30mySe9USFxkV6LgATQSoJZ6/5UcWAdI4hZPEh ACfg== X-Gm-Message-State: AOJu0Yz8aqLIdYX1q29h0Kn3FjFLkFX5F9inNO9qciDl+85RjakyUkv5 dp6k61CN2+UGUHgqTtsVTAJCK8+kLrJIeuQGp+RxJ5bfzmoWV4u4iX2oFJbhWg== X-Gm-Gg: ATEYQzxfobPpABdOo4TWceOdyvTmBwwsqNdZd82zdJW+T2HnRApBgasDg5eKd+GvgSi 8gezwCgmxICoO6NC5yTWUySu1MxrOrsHSKllK7aXzYzums6vAT5GKa7nyFNIaDH6Ux9RVZcuu0s 6fg6TLWMohOVvayNlQka6Zcvg0sfPZQmLyW7srcLix//X4lAWafPEOy3yTvgdtT4Qw+MJWTzanp 6DgjKoFyu/crCXIqu1YeaYyNMWgkgplqBAc6u9saa2aLkf8MeQqE5250J+ZeLkCfggh53myQRJ1 8aGj54xACp3nDJvBiRn3qD7QJwSHjE6u87IUxihQ9SJzY5HZK7yUHYfn45xlZ+ruw7sAtwcgsGZ B2h2lCNjZtVaimGxILwMJ6tkNY4j5eqj7PDjRtos64dhC/NmtdsyGxQtXPWTxEgjdOGYygb1Kx5 /eznspfes16CWb4RJ7Nu9LrGG8Uqah+CesvbB7NtZduSbo6r30HP8xLAl9m5Fxmk59LhZIOr4pD Tanc7UYvbYXc1Ud93o5karaZkp4xnjUwCufYPCpODoMnNi4QS+tX/5KU3kScA== X-Received: by 2002:a05:7301:3f0a:b0:2be:1a8e:10bb with SMTP id 5a478bee46e88-2bea54e71bcmr1628648eec.12.1773417657233; Fri, 13 Mar 2026 09:00:57 -0700 (PDT) Received: from daehojeong-desktop.mtv.corp.google.com ([2a00:79e0:2e7c:8:e956:1317:d042:5a42]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2beab525c5fsm2955467eec.22.2026.03.13.09.00.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 09:00:56 -0700 (PDT) From: Daeho Jeong To: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, kernel-team@android.com Cc: Daeho Jeong Subject: [PATCH v3] f2fs: fix to freeze GC and discard threads quickly Date: Fri, 13 Mar 2026 09:00:51 -0700 Message-ID: <20260313160051.3471704-1-daeho43@gmail.com> X-Mailer: git-send-email 2.53.0.880.g73c4285caa-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" From: Daeho Jeong Suspend can fail if kernel threads do not freeze for a while. f2fs_gc and f2fs_discard threads can perform long-running operations that prevent them from reaching a freeze point in a timely manner. This patch adds explicit freezing checks in the following locations: 1. f2fs_gc: Added a check at the 'retry' label to exit the loop quickly if freezing is requested, especially during heavy GC rounds. 2. __issue_discard_cmd: Added a 'suspended' flag to break both inner and outer loops during discard command issuance if freezing is detected after at least one command has been issued. 3. __issue_discard_cmd_orderly: Added a similar check for orderly discard to ensure responsiveness. These checks ensure that the threads release locks safely and enter the frozen state. Signed-off-by: Daeho Jeong --- v3: removed unnecessary suspended check v2: add freezing check in do_garbage_collect() --- fs/f2fs/gc.c | 10 ++++++++++ fs/f2fs/segment.c | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 981eac629fe9..f07746a14aa4 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -1883,12 +1883,18 @@ static int do_garbage_collect(struct f2fs_sb_info *= sbi, sbi->next_victim_seg[gc_type] =3D (cur_segno + 1 < sec_end_segno) ? cur_segno + 1 : NULL_SEGNO; + + if (unlikely(freezing(current))) { + folio_put_refs(sum_folio, 2); + goto stop; + } } next_block: folio_put_refs(sum_folio, 2); segno =3D block_end_segno; } =20 +stop: if (submitted) f2fs_submit_merged_write(sbi, data_type); =20 @@ -1962,6 +1968,10 @@ int f2fs_gc(struct f2fs_sb_info *sbi, struct f2fs_gc= _control *gc_control) goto stop; } retry: + if (unlikely(freezing(current))) { + ret =3D 0; + goto stop; + } ret =3D __get_victim(sbi, &segno, gc_type, gc_control->one_time); if (ret) { /* allow to search victim from sections has pinned data */ diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index e9b6d774b985..0c4fb4270185 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -1606,6 +1606,9 @@ static void __issue_discard_cmd_orderly(struct f2fs_s= b_info *sbi, if (dc->state !=3D D_PREP) goto next; =20 + if (*issued > 0 && unlikely(freezing(current))) + break; + if (dpolicy->io_aware && !is_idle(sbi, DISCARD_TIME)) { io_interrupted =3D true; break; @@ -1645,6 +1648,7 @@ static int __issue_discard_cmd(struct f2fs_sb_info *s= bi, struct blk_plug plug; int i, issued; bool io_interrupted =3D false; + bool suspended =3D false; =20 if (dpolicy->timeout) f2fs_update_time(sbi, UMOUNT_DISCARD_TIMEOUT); @@ -1675,6 +1679,11 @@ static int __issue_discard_cmd(struct f2fs_sb_info *= sbi, list_for_each_entry_safe(dc, tmp, pend_list, list) { f2fs_bug_on(sbi, dc->state !=3D D_PREP); =20 + if (issued > 0 && unlikely(freezing(current))) { + suspended =3D true; + break; + } + if (dpolicy->timeout && f2fs_time_over(sbi, UMOUNT_DISCARD_TIMEOUT)) break; @@ -1694,7 +1703,8 @@ static int __issue_discard_cmd(struct f2fs_sb_info *s= bi, next: mutex_unlock(&dcc->cmd_lock); =20 - if (issued >=3D dpolicy->max_requests || io_interrupted) + if (issued >=3D dpolicy->max_requests || io_interrupted || + suspended) break; } =20 --=20 2.53.0.880.g73c4285caa-goog