From nobody Tue Apr 7 02:34:19 2026 Received: from mail-dl1-f45.google.com (mail-dl1-f45.google.com [74.125.82.45]) (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 D11822BCF68 for ; Mon, 16 Mar 2026 18:59:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773687600; cv=none; b=MEwSoWTG64wJ0mnOnA2ojw2c4rjUeIXM40Yi5Z/DJXW9sr26IEUj5deZ37Mv5JYzT9MMGjP2XDLZUBy/XPuX6kz1v1qBnS0KhJEEXjYhlYSL3DmxqyT2Pb9c1b3mjJsNNA8ovDzoLKF0Dt84XxarckpQDZdGZxxLjC+/6MGS82M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773687600; c=relaxed/simple; bh=2ZayzLLfAxNsXgSyQzfecr1kLwe32daO/aDX+1sBvfM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=p0yEkaXOLtRVkZeYXqJHtOsStg8Oh6IxcsDxQaibraeVVUikbtynMW2nnJlN1YiZO3E/X/z4AwGEt5BRlhdBupi0tFpBeRtTu1JSQYetDF0HLL3Wb9yTytCogROvaBZ8WMk/EgE0g8Y/Feh9e3zwEtFA3HZwK73AJpA/6SdW8Us= 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=cx43/2kK; arc=none smtp.client-ip=74.125.82.45 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="cx43/2kK" Received: by mail-dl1-f45.google.com with SMTP id a92af1059eb24-128d2e3082eso5438999c88.0 for ; Mon, 16 Mar 2026 11:59:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773687598; x=1774292398; 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=nNIGcqXPfOweXoNb/mSBQcHnKJcZGl2TXjikUXsxC6U=; b=cx43/2kKYwJ8kJgPx423j5FHBa04LvMYODWRYJlKiELjKMnQUKMB1j3qV+P0Na0FCj oEjH3OPCsl19cq9OvZSgU93QHzKqZaMtPyUbfjzXYVIYinu+iT9if6VSYdj3yelRyP7S CDTdvGPDXWl2qL9DS15J1PDCmR/idmb89RuSlgdvcg3qt24i+5wSLQeWdGTkeq8amoKY yGZgPsEZ5+K0AVdtjMj03IbvvIi1n37CsSwDYbevEEXyluRwfbLsha6CYb5HAJfAuzq8 R9DSojG2xCDDR0KBWN+jzNZQ7QWoB9D0qEMUFGw5yE2DSXlFkH5Sy65DfMzkjrO+RVxT RXpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773687598; x=1774292398; 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=nNIGcqXPfOweXoNb/mSBQcHnKJcZGl2TXjikUXsxC6U=; b=Hzn2hKpxuOraB4in/snhJn129rhjcCMEwbShYATbtN9Ey9qQ+6BiROqyX9QO2KtuJm Df5l2XSzVWp7yGxm8CXmaLklR+Yud4L5rFtfrepyZI1XZqWxx0BewPTKV+UgqYG3eFib I6ZNZZyDYgdZb0/RlKfMz59QeTocitoTbfvbUXKNkvBwOrSZzjzsbXA4i3EPr0jjkZaA nkMTs06+nTauKeS5Q1mEWHckDPuhfkZMNycelzJkPJcTcBwPdDpG3mXg0G7m4Ykhr/Cj PAD/mD3DUbGBSWPVvsaV7zdOmk9D4Kf5ArGM/nnIgBeIZZ0WdfPorOKpoV1VNgNdZqSv gSCw== X-Gm-Message-State: AOJu0YwXYq0i92sepWw94oDl8yrZjiumY4V8v0KqdB1zb3x6KMLoZRps Vsoai9q45V4acoQ6L2TbovweT3dDq0awm0fC2g8DktRW6W6oTuA3Zb0YUZm55A== X-Gm-Gg: ATEYQzxmM9k3Tvl62k54hkMbbjNn1Wqs5JoZV/azvtPuvosZpm2wOMiWCEceDQEb7pb uL0RMEbws12GAght638JUDOGxYZoTPnpwScxG8wY6LSvZY4QbMBijuDVjPvPMBo/RDGtFuIr3Ur 40kbTwP6zeTZQmVGymGttwZ0we8xiTahPUdqnXVnZUd76tKA/JXVBrfaUmZQJO8yJmbgy7oB4q0 sUTP/PYOhsGwc5TGItFR55PbuEnNuk4NndJ+dvtzpC9qCrLuViNDyuZDmE+pxTzxBm5tFShXEuu IP/HY9y68/CD51398vB1qH7zABex8EZg/6Qq2f//C/iNLxI9NL30qTsUKJH1toLLpb8fl/7vgI2 4hYPQL3bGGPbmGDKZ9UAHX45GCPnkiXStPdJpTO1Kq+IJKwUTYF/HEF7RjQoG3Xp35jMXNE62Xy E3idkGAzhZBMP3dPLqHvAPtnv3Tw+45O0HsVC5pozNGsxuMOi62dCWjbFKbPcWstES0b86iRawp npcs/ifgvz/A9xera9lamWy9bOXrW9F8Bfn8i5GJDqi6hC9XYg= X-Received: by 2002:a05:7022:48c:b0:128:ce44:be8f with SMTP id a92af1059eb24-128f3d1c017mr7639005c88.2.1773687597708; Mon, 16 Mar 2026 11:59:57 -0700 (PDT) Received: from daehojeong-desktop.mtv.corp.google.com ([2a00:79e0:2e7c:8:de83:bdfe:287b:a163]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-128f63b6a34sm15729412c88.14.2026.03.16.11.59.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 11:59:57 -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: Mon, 16 Mar 2026 11:59:54 -0700 Message-ID: <20260316185954.2185806-1-daeho43@gmail.com> X-Mailer: git-send-email 2.53.0.851.ga537e3e6e9-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 Reviewed-by: Chao Yu --- 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 246496fbe5e5..2305f16cbabb 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -1889,12 +1889,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 @@ -1968,6 +1974,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.851.ga537e3e6e9-goog