From nobody Wed Apr 8 03:06:11 2026 Received: from mail-dl1-f49.google.com (mail-dl1-f49.google.com [74.125.82.49]) (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 865AE313547 for ; Tue, 10 Mar 2026 20:49:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773175763; cv=none; b=AnlGYD9imGzYYIZY66DlTAM+tO2gBDMi8gFU2DuQOUKFHZRcsrBuO5ZfJbRnnll54f/u2bHGg+gnpzAup8G785Z8l9dHx5wRytRiuXO6CxgAb37YLMurbp44T7/TNypeJ1VuK4jphN7zU25hGHY4Ihd0yT1Rgyzw/wRlHzT9MU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773175763; c=relaxed/simple; bh=5U1ZCinAOV3JW3UgwRt3sRuY+Mc28Zpd+af9SrBs8Fs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=fmwIrdvlbpBUzJESkwb4JBgWjRd1Oakxp1KYKhESlF7LS8ovXg8VKwMCcyl83r5ho8UVJA+Pyea6wwToVVm5BMrjXFbqfVzUIDdb8jhnCtNZiws2ZWCszUMXe7ktTkADKxZYF3EQHmtICjDKsnC4d7RHaQ/Lqe/ICsMvnQWOBPU= 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=aFDrr2gt; arc=none smtp.client-ip=74.125.82.49 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="aFDrr2gt" Received: by mail-dl1-f49.google.com with SMTP id a92af1059eb24-12732e6a123so754496c88.1 for ; Tue, 10 Mar 2026 13:49:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773175761; x=1773780561; 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=IJuWdsrqe+6jRpgcLawBwjbQOS7Fk+dZEC7WEwVmrnk=; b=aFDrr2gtJo4rzLTbHG4wHPG+aFOElloKT8OfEt4eN6E3HOKKPLQicdJN2EfdeSR0FG BQ8W6Rqd+koYC2dwRXUSS/VbdmWFe+FCFj6mZpdrdDSZn57FMHSKBfXvTZDsCbTYN/C8 B/mOkbAwOole3E2/mYB5tS6S4nNW+/7cZMD+4MOTW3vVwAwpBwcDJcyTzcZ/Wk5h2zap jr5xNyThYm4hziIvE+2ETdjj5GDc/FYWhfdIkWoLQNs3eM0I+i946XfIb+5NP+ByHqwx Ehry4B6wYp8fsYbvlqUG6VoLD4bliwQo16jhjSYJCzGY6a/xsONb6RkxsJ4DqAZcaPz6 oFrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773175761; x=1773780561; 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=IJuWdsrqe+6jRpgcLawBwjbQOS7Fk+dZEC7WEwVmrnk=; b=oUAlrTGyEktrkry35FQjj9jCp8PWNvS55uj25eOkTMJy968L8gon9zziBURLBpnqTO p5WqUv/tV+MvoqLg23QmQXa0fuzd0NxwvDCsUzKKNI2nU9HlpQFo36tF+uvloeYpb8Re 39JUh+yh2qSjTF8wNtITLoKJgkZfjB8/obaONXNbq3tI93eLMenCeSfAa3SKFRncn24y xEJtTW/li3bYtvuTTfCt2raK3AKfpDvS8+boR8qGYn6Kv/hzwwiIGs8iCXJ5DEZmC4eI FfmajDIqrfWPZiMk3HLz8elfGk31sjHs9yCKGuEyEEdauPh54zY45umbPc5UmFkcz0Ia vO9w== X-Gm-Message-State: AOJu0Yw4sjXL1AlG5ByEpaaCj0vyJ4HWIcFULa9klNLE7jN9enfJWBXp FO645vbK9M3s8C0oHMRRRrKKLgyS2fELU5/6lfUxhPvYYiLwC5HEWchYcKOmaQ== X-Gm-Gg: ATEYQzxAM2L28f/C89qqJEKALfVy89bzUs+Lx7zqT1kO37zLbfXzhW/9DtqVL52Gidm 6fixTZDPt3hQ8FXIcpf/UhgpZnCEwJOQ4W26HVo5fBRDXpcM6CBIqHp0aL6T3F3Y+Lq3p5qA7l6 RGwAULxp/PvTn6RtWJmRoIg38hOhcalOjehqpbMRnAne0r34Sa1J5Rvtpjw7ShemgeDypzS7lun E/9yJ+l/VyObMMBa/j5jHBeb9Y/J/zdJZImftbLfE75MkQlSmy5DGeIn4o9efaVXr/JM49Jnd4b frJihgsC/Uypy02EbcnQRC2vt9iMQum+fng9qilRslreDXe6nEIcem2qRcMPbqHXXT+FLsjwP6U WtY+I+9+EOn/JWlG7hXNPFgawRFJCGzc2TlT0278vsbGDWQVtNhMi7OCBmP7QTrD6jbZJkjDud/ zjGPszX5PP2VayJP6VgzalPothAHk3E5LTZZwJFIcjGR/CZTgzYW6Ll5wAlaDcIUuVFjRQ8O0Br 8fkkiCHIEh03oVvPz174q4lK70l4Ne7ZAJBsniKo8PrzKVkhXk= X-Received: by 2002:a05:7301:1292:b0:2be:ca4:e13d with SMTP id 5a478bee46e88-2be8a572eaamr27094eec.30.1773175761255; Tue, 10 Mar 2026 13:49:21 -0700 (PDT) Received: from daehojeong-desktop.mtv.corp.google.com ([2a00:79e0:2e7c:8:493f:f39e:ec36:a0a3]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2be4f807a30sm14188481eec.6.2026.03.10.13.49.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 13:49:20 -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] f2fs: fix to freeze GC and discard threads quickly Date: Tue, 10 Mar 2026 13:49:16 -0700 Message-ID: <20260310204916.1265736-1-daeho43@gmail.com> X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-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 --- fs/f2fs/gc.c | 4 ++++ fs/f2fs/segment.c | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 981eac629fe9..fdc3366c4db3 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -1962,6 +1962,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..a6c82ab28288 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,11 +1703,12 @@ static int __issue_discard_cmd(struct f2fs_sb_info = *sbi, 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 - if (dpolicy->type =3D=3D DPOLICY_UMOUNT && issued) { + if (dpolicy->type =3D=3D DPOLICY_UMOUNT && issued && !suspended) { __wait_all_discard_cmd(sbi, dpolicy); goto retry; } --=20 2.53.0.473.g4a7958ca14-goog