From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F2C436A369 for ; Wed, 5 Aug 2026 01:51:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785894668; cv=none; b=HSUVIr4aBvCfwWDqNufTOHIu2ESOv2IFoXBBfDPHsUKfNlGk9PlPO6/CO3jD4kOr3piaL20LOIzJLKRotc2oVl+3DJcAQQiHVvliTPOov2UBfJGAL3iCVstPylqulsIPYFKqGT6wjoD8zGPnR6KDdBvFd6G3cYxLQXJr9dzGHXE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785894668; c=relaxed/simple; bh=B1gueQo1ra6i8UX1rwEbiudzCexxkfLAQ83asnkfbsI=; h=Message-ID:Date:MIME-Version:Cc:Subject:To:References:From: In-Reply-To:Content-Type; b=fPgK8HfZhZpJYT0kq3EEuqt3yPvttM0baeJ+kLmTvNModbhFskgtPhFFIkV9rQ0GxkG11gHfyvSuid4WVolEgtqBl8eqAGxD1wx49eZ7a5+t8TedfyO0YlpbtOQQTNQNBPNbzgS/0DP9/cjgL0ArEQGSQ8fNf0dKkJRENkWJHlg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TqXjz5Gk; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TqXjz5Gk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9E64C1F000E9; Wed, 5 Aug 2026 01:51:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785894666; bh=SnoPLtwIfP2xVQ3yNsAfZxAqq3ADBmzkFWQzNoDcG/I=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=TqXjz5Gka22jQgSpL2ZVorPzP0yk9/mafFxyy3vDuUXEpAQGVO/SXAgThCzwMNap7 DSvwnss0SHmudmM1xq84lkQS89e3vuObx4XAxI/Fbldw4tmMFXm2uI/LqmG9o1ZVvO d+J1NdkjWDqXUoCuXqcDlHhdsVYG6cEW3IGN5edoiHGaeV9kgIzOviOz4SZYPwCAUB 02rraFftLqk8uGL4NfIzrmDXcghvPeypqtVHFwSxMJGg/Ef/KxJ9SGTrvtALhOXgbo /NGT//pMKopKTqMqE6pJSoxBf3KbAttrqbHH25cqr8ZNHFcE/95mDc6SeaU4TtZPoE EXHddZ22VmNow== Message-ID: Date: Wed, 5 Aug 2026 09:51:03 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Cc: chao@kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, kernel-team@android.com, Daeho Jeong Subject: Re: [f2fs-dev] [PATCH] f2fs: quiesce background threads during system suspend using PM notifier To: Daeho Jeong References: <20260729192319.4051409-1-daeho43@gmail.com> Content-Language: en-US From: Chao Yu In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 8/5/26 01:35, Daeho Jeong wrote: > On Tue, Aug 4, 2026 at 4:24 AM Chao Yu wrote: >> >> On 8/4/26 02:42, Daeho Jeong wrote: >>> On Mon, Aug 3, 2026 at 2:08 AM Chao Yu wrote: >>>> >>>> On 7/30/26 03:23, Daeho Jeong wrote: >>>>> From: Daeho Jeong >>>>> >>>>> During system suspend, a race condition can cause f2fs_gc and f2fs_discard >>>>> threads to call submit_bio() while the underlying block device (e.g., UFS) >>>>> is in Runtime PM suspend. Because Runtime PM worker threads are already >>>>> frozen during task freezing, the threads become trapped in >>>>> __bio_queue_enter() waiting on mq_freeze_wq, leading to a PM freezer >>>>> timeout. >>>>> >>>>> To prevent this deadlock, register a PM notifier to set SBI_IS_SUSPENDING >>>>> during PM_SUSPEND_PREPARE. Background GC and discard threads check this >>>> >>>> Should we cover issue_flush_thread and issue_checkpoint_thread as well in >>>> where we will submit bio? >>> >>> Unlike GC and discard, which are background optimization tasks and can >>> be safely paused, other operations like checkpoint are critical for >>> data consistency. >>> It is better not to interrupt them in the middle of their progress. If >>> they are running and take too long, it is safer to just let the system >>> suspend temporarily fail rather than forcibly breaking their >>> operations. >> >> So why foreground thread like ckpt thread or flush thread won't suffer the >> same issue like gc or discard thread? because foreground thread will prevent >> UFS from running into suspend state? I may missed something here. :) >> > > Foreground threads (ckpt/flush) issue I/O on-demand for dirty data sync. > If suspend aborts due to active I/O, it is legitimate and expected > behavior rather than an issue, as it is a necessary filesystem > operation under a non-idle workload. Okay, so if ckpt/flush are active, that means there are userspace applications are waiting for checkpoint/flush completion, so freeze_processes() form system suspend still didn't completion, and it won't enter phase 2 (device suspend & freezing pm_wq). Let me know if I understand it correctly. > In contrast, f2fs_gc and f2fs_discard are autonomous background > threads waking up even on an idle system with UFS in Runtime PM > suspend, which is the main cause of UFS deadlock when entering the > suspend. > With ZUFS, GC runs much more frequently, causing frequent suspend aborts. > >>> >>>> >>>>> flag and immediately stop issuing new bios, allowing them to enter a >>>>> freezable sleep state cleanly before process freezing begins. >>>>> >>>>> Signed-off-by: Daeho Jeong >>>>> --- >>>>> fs/f2fs/f2fs.h | 3 +++ >>>>> fs/f2fs/gc.c | 13 ++++++++----- >>>>> fs/f2fs/segment.c | 13 +++++++++---- >>>>> fs/f2fs/super.c | 25 +++++++++++++++++++++++++ >>>>> 4 files changed, 45 insertions(+), 9 deletions(-) >>>>> >>>>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h >>>>> index f24e30bb5c3d..c46bf4df9412 100644 >>>>> --- a/fs/f2fs/f2fs.h >>>>> +++ b/fs/f2fs/f2fs.h >>>>> @@ -25,6 +25,7 @@ >>>>> #include >>>>> #include >>>>> #include >>>>> +#include >>>>> >>>>> #include >>>>> #include >>>>> @@ -1494,6 +1495,7 @@ enum { >>>>> SBI_IS_FREEZING, /* freezefs is in process */ >>>>> SBI_IS_WRITABLE, /* remove ro mountoption transiently */ >>>>> SBI_ENABLE_CHECKPOINT, /* indicate it's during f2fs_enable_checkpoint() */ >>>>> + SBI_IS_SUSPENDING, /* system suspend is in progress */ >>>>> MAX_SBI_FLAG, >>>>> }; >>>>> >>>>> @@ -1757,6 +1759,7 @@ struct f2fs_sb_info { >>>>> struct f2fs_rwsem sb_lock; /* lock for raw super block */ >>>>> int valid_super_block; /* valid super block no */ >>>>> unsigned long s_flag; /* flags for sbi */ >>>>> + struct notifier_block pm_nb; /* for PM notifier */ >>>>> struct mutex writepages; /* mutex for writepages() */ >>>>> >>>>> #ifdef CONFIG_BLK_DEV_ZONED >>>>> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c >>>>> index 93bcb35a5b5d..86b2b29402a5 100644 >>>>> --- a/fs/f2fs/gc.c >>>>> +++ b/fs/f2fs/gc.c >>>>> @@ -71,7 +71,8 @@ static int gc_thread_func(void *data) >>>>> if (kthread_should_stop()) >>>>> break; >>>>> >>>>> - if (sbi->sb->s_writers.frozen >= SB_FREEZE_WRITE) { >>>>> + if (sbi->sb->s_writers.frozen >= SB_FREEZE_WRITE || >>>>> + is_sbi_flag_set(sbi, SBI_IS_SUSPENDING)) { >>>>> increase_sleep_time(gc_th, &wait_ms); >>>>> stat_other_skip_bggc_count(sbi); >>>>> continue; >>>>> @@ -1064,8 +1065,9 @@ static int gc_node_segment(struct f2fs_sb_info *sbi, >>>>> struct node_info ni; >>>>> int err; >>>>> >>>>> - /* stop BG_GC if there is not enough free sections. */ >>>>> - if (gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0)) >>>>> + /* stop BG_GC if there is not enough free sections or suspending. */ >>>>> + if (gc_type == BG_GC && (has_not_enough_free_secs(sbi, 0, 0) || >>>>> + is_sbi_flag_set(sbi, SBI_IS_SUSPENDING))) >>>>> return submitted; >>>>> >>>>> if (check_valid_map(sbi, segno, off) == 0) >>>>> @@ -1611,7 +1613,8 @@ static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum, >>>>> * Or, stop GC if the segment becomes fully valid caused by >>>>> * race condition along with SSR block allocation. >>>>> */ >>>>> - if ((gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0)) || >>>>> + if ((gc_type == BG_GC && (has_not_enough_free_secs(sbi, 0, 0) || >>>>> + is_sbi_flag_set(sbi, SBI_IS_SUSPENDING))) || >>>>> (!force_migrate && get_valid_blocks(sbi, segno, true) == >>>>> CAP_BLKS_PER_SEC(sbi))) >>>>> return submitted; >>>>> @@ -2015,7 +2018,7 @@ int f2fs_gc(struct f2fs_sb_info *sbi, struct f2fs_gc_control *gc_control) >>>>> goto stop; >>>>> } >>>>> retry: >>>>> - if (unlikely(freezing(current))) { >>>> >>>> Shouldn't we keep original freezing logic? in case filesystem are frozen >>>> when low device snapshot is triggered? >>> >>> Since the runtime PM suspend/resume workers are only frozen during >>> system-wide PM transitions (suspend/hibernation), the PM notifier >>> approach with SBI_IS_SUSPENDING sufficiently prevents the deadlock. >> >> What I mean is: >> >> if (is_sbi_flag_set(sbi, SBI_IS_SUSPENDING) || unlikely(freezing(current))) { >> >> otherwise, gc thread or discard thread won't detect freeze state, and will >> continue to trigger IO in background even there is a system freeze request >> from device snapshot or cgroup freezing, right? >> > > The hang in system suspend happens because Runtime PM workers (pm_wq) > are frozen, so UFS cannot be resumed from submit_bio(). > During cgroup freeze or snapshot, I believe pm_wq is alive, so UFS > resumes in a few ms and I/O finishes without deadlock. Also, > wait_event_freezable_timeout() will freeze the threads when they > sleep. Here, we need to detect the freezing state and stop issuing any new I/O immediately because non-PM freezing mechanisms (such as dm-snapshot or cgroup freezer) require the underlying filesystem/device to reach a quiescent (static) state. It's not limited strictly to the PM suspend state. > > If you prefer keeping freezing(current) as a fast path for non-PM > freezing, I can change it to: > if (is_sbi_flag_set(sbi, SBI_IS_SUSPENDING) || unlikely(freezing(current))) > Do you still think it is required? If so, plz, let me know. Yes, please. Thanks, > > Thanks. > >> Thanks, >> >>> >>> Thanks, >>> >>>> >>>>> + if (is_sbi_flag_set(sbi, SBI_IS_SUSPENDING)) { >>>>> ret = 0; >>>>> goto stop; >>>>> } >>>>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >>>>> index d70dc5ef3de4..e27197953356 100644 >>>>> --- a/fs/f2fs/segment.c >>>>> +++ b/fs/f2fs/segment.c >>>>> @@ -1300,7 +1300,8 @@ static int __submit_discard_cmd(struct f2fs_sb_info *sbi, >>>>> if (dc->state != D_PREP) >>>>> return 0; >>>>> >>>>> - if (is_sbi_flag_set(sbi, SBI_NEED_FSCK)) >>>>> + if (is_sbi_flag_set(sbi, SBI_NEED_FSCK) || >>>>> + is_sbi_flag_set(sbi, SBI_IS_SUSPENDING)) >>>>> return 0; >>>>> >>>>> #ifdef CONFIG_BLK_DEV_ZONED >>>>> @@ -1341,6 +1342,9 @@ static int __submit_discard_cmd(struct f2fs_sb_info *sbi, >>>>> unsigned long flags; >>>>> bool last = true; >>>>> >>>>> + if (is_sbi_flag_set(sbi, SBI_IS_SUSPENDING)) >>>>> + break; >>>>> + >>>>> if (len > max_discard_blocks) { >>>>> len = max_discard_blocks; >>>>> last = false; >>>>> @@ -1615,7 +1619,7 @@ static void __issue_discard_cmd_orderly(struct f2fs_sb_info *sbi, >>>>> if (dc->state != D_PREP) >>>>> goto next; >>>>> >>>>> - if (*issued > 0 && unlikely(freezing(current))) >>>> >>>> Ditto, >>>> >>>>> + if (is_sbi_flag_set(sbi, SBI_IS_SUSPENDING)) >>>>> break; >>>>> >>>>> if (dpolicy->io_aware && !is_idle(sbi, DISCARD_TIME)) { >>>>> @@ -1688,7 +1692,7 @@ 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 != D_PREP); >>>>> >>>>> - if (issued > 0 && unlikely(freezing(current))) { >>>> >>>> Ditto, >>>> >>>> Thanks, >>>> >>>>> + if (is_sbi_flag_set(sbi, SBI_IS_SUSPENDING)) { >>>>> suspended = true; >>>>> break; >>>>> } >>>>> @@ -1955,7 +1959,8 @@ static int issue_discard_thread(void *data) >>>>> continue; >>>>> if (kthread_should_stop()) >>>>> return 0; >>>>> - if (is_sbi_flag_set(sbi, SBI_NEED_FSCK) || >>>>> + if (is_sbi_flag_set(sbi, SBI_IS_SUSPENDING) || >>>>> + is_sbi_flag_set(sbi, SBI_NEED_FSCK) || >>>>> !atomic_read(&dcc->discard_cmd_cnt)) { >>>>> wait_ms = dpolicy.max_interval; >>>>> continue; >>>>> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c >>>>> index d5dc83e613e2..536f3ffe5354 100644 >>>>> --- a/fs/f2fs/super.c >>>>> +++ b/fs/f2fs/super.c >>>>> @@ -1979,6 +1979,26 @@ static void destroy_device_list(struct f2fs_sb_info *sbi) >>>>> kvfree(sbi->devs); >>>>> } >>>>> >>>>> +static int f2fs_pm_notifier(struct notifier_block *nb, >>>>> + unsigned long action, void *ptr) >>>>> +{ >>>>> + struct f2fs_sb_info *sbi = container_of(nb, struct f2fs_sb_info, pm_nb); >>>>> + >>>>> + switch (action) { >>>>> + case PM_HIBERNATION_PREPARE: >>>>> + case PM_SUSPEND_PREPARE: >>>>> + case PM_RESTORE_PREPARE: >>>>> + set_sbi_flag(sbi, SBI_IS_SUSPENDING); >>>>> + break; >>>>> + case PM_POST_SUSPEND: >>>>> + case PM_POST_HIBERNATION: >>>>> + case PM_POST_RESTORE: >>>>> + clear_sbi_flag(sbi, SBI_IS_SUSPENDING); >>>>> + break; >>>>> + } >>>>> + return NOTIFY_OK; >>>>> +} >>>>> + >>>>> static void f2fs_put_super(struct super_block *sb) >>>>> { >>>>> struct f2fs_sb_info *sbi = F2FS_SB(sb); >>>>> @@ -1986,6 +2006,8 @@ static void f2fs_put_super(struct super_block *sb) >>>>> int err = 0; >>>>> bool done; >>>>> >>>>> + unregister_pm_notifier(&sbi->pm_nb); >>>>> + >>>>> /* unregister procfs/sysfs entries in advance to avoid race case */ >>>>> f2fs_unregister_sysfs(sbi); >>>>> >>>>> @@ -5472,6 +5494,9 @@ static int f2fs_fill_super(struct super_block *sb, struct fs_context *fc) >>>>> >>>>> f2fs_restore_device_alias(sbi); >>>>> >>>>> + sbi->pm_nb.notifier_call = f2fs_pm_notifier; >>>>> + register_pm_notifier(&sbi->pm_nb); >>>>> + >>>>> sbi->umount_lock_holder = NULL; >>>>> return 0; >>>>> >>>> >> From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 88890C55184 for ; Wed, 5 Aug 2026 01:51:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type:Cc: Reply-To:From:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Subject:In-Reply-To:References:To:MIME-Version:Date: Message-ID:Sender:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=EDCXrrttm7D09PPKC6BWD7jQkCxFLAMSnM8IEDQHDbc=; b=cjEJ1q2LnHs6dGgt119YoCpyCQ KAby4ZosGnt6DKgKqE7s9yobqoDIB2cZVrR1OYcJIaBuHbkS+enNblpywWGQoovxobdBZYKqteL1f D6hKzLQrSx7lhsvc+qxwiaRX30vDBE7/c8UWXKBi/k99MafUdLT9ZjI7M4z1l0HziWxs=; Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1wrQms-0000pZ-BG; Wed, 05 Aug 2026 01:51:15 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1wrQmr-0000pR-1I for linux-f2fs-devel@lists.sourceforge.net; Wed, 05 Aug 2026 01:51:14 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: From:References:To:Subject:Cc:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=SnoPLtwIfP2xVQ3yNsAfZxAqq3ADBmzkFWQzNoDcG/I=; b=hGap9Ys5dRI18gxSbjlLnkGmlh qBHwEjUCBzqb8DIjRhUZfsil35TdZDKFkGQ5La/bMBynnzwb/nAGrEtx32VP2u8x2fTRm3DLihxKt lKmD9ftCREeuJd2KHvcR6RHNwpI1y7Tsw96SXSTs94XRDsnZYyGfgsEdnH6bkuNu7wFY=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From:References:To: Subject:Cc:MIME-Version:Date:Message-ID:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=SnoPLtwIfP2xVQ3yNsAfZxAqq3ADBmzkFWQzNoDcG/I=; b=KD9qQhfWKKGgaLWgrQYwNiHsov GDLfzeVIs33tC1crdv5jjLxmA+nGJ2CGzKoFKFM2PNDuBiAaBnfVQDMW23Q28Pe+noQkcEG/9xo0+ EaJMf+TVmPrbK/Zy8AQhPJp+xIzZMG1LVw7G2VZKMfjNyJTdSXPAdjSHKCzhoEXYANmA=; Received: from tor.source.kernel.org ([172.105.4.254]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1wrQmm-0008Vm-RB for linux-f2fs-devel@lists.sourceforge.net; Wed, 05 Aug 2026 01:51:14 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 29F98600AA; Wed, 5 Aug 2026 01:51:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9E64C1F000E9; Wed, 5 Aug 2026 01:51:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785894666; bh=SnoPLtwIfP2xVQ3yNsAfZxAqq3ADBmzkFWQzNoDcG/I=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=TqXjz5Gka22jQgSpL2ZVorPzP0yk9/mafFxyy3vDuUXEpAQGVO/SXAgThCzwMNap7 DSvwnss0SHmudmM1xq84lkQS89e3vuObx4XAxI/Fbldw4tmMFXm2uI/LqmG9o1ZVvO d+J1NdkjWDqXUoCuXqcDlHhdsVYG6cEW3IGN5edoiHGaeV9kgIzOviOz4SZYPwCAUB 02rraFftLqk8uGL4NfIzrmDXcghvPeypqtVHFwSxMJGg/Ef/KxJ9SGTrvtALhOXgbo /NGT//pMKopKTqMqE6pJSoxBf3KbAttrqbHH25cqr8ZNHFcE/95mDc6SeaU4TtZPoE EXHddZ22VmNow== Message-ID: Date: Wed, 5 Aug 2026 09:51:03 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Daeho Jeong References: <20260729192319.4051409-1-daeho43@gmail.com> Content-Language: en-US In-Reply-To: X-Headers-End: 1wrQmm-0008Vm-RB Subject: Re: [f2fs-dev] [PATCH] f2fs: quiesce background threads during system suspend using PM notifier X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Chao Yu via Linux-f2fs-devel Reply-To: Chao Yu Cc: Daeho Jeong , kernel-team@android.com, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net T24gOC81LzI2IDAxOjM1LCBEYWVobyBKZW9uZyB3cm90ZToKPiBPbiBUdWUsIEF1ZyA0LCAyMDI2 IGF0IDQ6MjTigK9BTSBDaGFvIFl1IDxjaGFvQGtlcm5lbC5vcmc+IHdyb3RlOgo+Pgo+PiBPbiA4 LzQvMjYgMDI6NDIsIERhZWhvIEplb25nIHdyb3RlOgo+Pj4gT24gTW9uLCBBdWcgMywgMjAyNiBh dCAyOjA44oCvQU0gQ2hhbyBZdSA8Y2hhb0BrZXJuZWwub3JnPiB3cm90ZToKPj4+Pgo+Pj4+IE9u IDcvMzAvMjYgMDM6MjMsIERhZWhvIEplb25nIHdyb3RlOgo+Pj4+PiBGcm9tOiBEYWVobyBKZW9u ZyA8ZGFlaG9qZW9uZ0Bnb29nbGUuY29tPgo+Pj4+Pgo+Pj4+PiBEdXJpbmcgc3lzdGVtIHN1c3Bl bmQsIGEgcmFjZSBjb25kaXRpb24gY2FuIGNhdXNlIGYyZnNfZ2MgYW5kIGYyZnNfZGlzY2FyZAo+ Pj4+PiB0aHJlYWRzIHRvIGNhbGwgc3VibWl0X2JpbygpIHdoaWxlIHRoZSB1bmRlcmx5aW5nIGJs b2NrIGRldmljZSAoZS5nLiwgVUZTKQo+Pj4+PiBpcyBpbiBSdW50aW1lIFBNIHN1c3BlbmQuIEJl Y2F1c2UgUnVudGltZSBQTSB3b3JrZXIgdGhyZWFkcyBhcmUgYWxyZWFkeQo+Pj4+PiBmcm96ZW4g ZHVyaW5nIHRhc2sgZnJlZXppbmcsIHRoZSB0aHJlYWRzIGJlY29tZSB0cmFwcGVkIGluCj4+Pj4+ IF9fYmlvX3F1ZXVlX2VudGVyKCkgd2FpdGluZyBvbiBtcV9mcmVlemVfd3EsIGxlYWRpbmcgdG8g YSBQTSBmcmVlemVyCj4+Pj4+IHRpbWVvdXQuCj4+Pj4+Cj4+Pj4+IFRvIHByZXZlbnQgdGhpcyBk ZWFkbG9jaywgcmVnaXN0ZXIgYSBQTSBub3RpZmllciB0byBzZXQgU0JJX0lTX1NVU1BFTkRJTkcK Pj4+Pj4gZHVyaW5nIFBNX1NVU1BFTkRfUFJFUEFSRS4gQmFja2dyb3VuZCBHQyBhbmQgZGlzY2Fy ZCB0aHJlYWRzIGNoZWNrIHRoaXMKPj4+Pgo+Pj4+IFNob3VsZCB3ZSBjb3ZlciBpc3N1ZV9mbHVz aF90aHJlYWQgYW5kIGlzc3VlX2NoZWNrcG9pbnRfdGhyZWFkIGFzIHdlbGwgaW4KPj4+PiB3aGVy ZSB3ZSB3aWxsIHN1Ym1pdCBiaW8/Cj4+Pgo+Pj4gVW5saWtlIEdDIGFuZCBkaXNjYXJkLCB3aGlj aCBhcmUgYmFja2dyb3VuZCBvcHRpbWl6YXRpb24gdGFza3MgYW5kIGNhbgo+Pj4gYmUgc2FmZWx5 IHBhdXNlZCwgb3RoZXIgb3BlcmF0aW9ucyBsaWtlIGNoZWNrcG9pbnQgYXJlIGNyaXRpY2FsIGZv cgo+Pj4gZGF0YSBjb25zaXN0ZW5jeS4KPj4+IEl0IGlzIGJldHRlciBub3QgdG8gaW50ZXJydXB0 IHRoZW0gaW4gdGhlIG1pZGRsZSBvZiB0aGVpciBwcm9ncmVzcy4gSWYKPj4+IHRoZXkgYXJlIHJ1 bm5pbmcgYW5kIHRha2UgdG9vIGxvbmcsIGl0IGlzIHNhZmVyIHRvIGp1c3QgbGV0IHRoZSBzeXN0 ZW0KPj4+IHN1c3BlbmQgdGVtcG9yYXJpbHkgZmFpbCByYXRoZXIgdGhhbiBmb3JjaWJseSBicmVh a2luZyB0aGVpcgo+Pj4gb3BlcmF0aW9ucy4KPj4KPj4gU28gd2h5IGZvcmVncm91bmQgdGhyZWFk IGxpa2UgY2twdCB0aHJlYWQgb3IgZmx1c2ggdGhyZWFkIHdvbid0IHN1ZmZlciB0aGUKPj4gc2Ft ZSBpc3N1ZSBsaWtlIGdjIG9yIGRpc2NhcmQgdGhyZWFkPyBiZWNhdXNlIGZvcmVncm91bmQgdGhy ZWFkIHdpbGwgcHJldmVudAo+PiBVRlMgZnJvbSBydW5uaW5nIGludG8gc3VzcGVuZCBzdGF0ZT8g SSBtYXkgbWlzc2VkIHNvbWV0aGluZyBoZXJlLiA6KQo+Pgo+IAo+IEZvcmVncm91bmQgdGhyZWFk cyAoY2twdC9mbHVzaCkgaXNzdWUgSS9PIG9uLWRlbWFuZCBmb3IgZGlydHkgZGF0YSBzeW5jLgo+ IElmIHN1c3BlbmQgYWJvcnRzIGR1ZSB0byBhY3RpdmUgSS9PLCBpdCBpcyBsZWdpdGltYXRlIGFu ZCBleHBlY3RlZAo+IGJlaGF2aW9yIHJhdGhlciB0aGFuIGFuIGlzc3VlLCBhcyBpdCBpcyBhIG5l Y2Vzc2FyeSBmaWxlc3lzdGVtCj4gb3BlcmF0aW9uIHVuZGVyIGEgbm9uLWlkbGUgd29ya2xvYWQu CgpPa2F5LCBzbyBpZiBja3B0L2ZsdXNoIGFyZSBhY3RpdmUsIHRoYXQgbWVhbnMgdGhlcmUgYXJl IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgYXJlCndhaXRpbmcgZm9yIGNoZWNrcG9pbnQvZmx1c2gg Y29tcGxldGlvbiwgc28gZnJlZXplX3Byb2Nlc3NlcygpIGZvcm0gc3lzdGVtIHN1c3BlbmQKc3Rp bGwgZGlkbid0IGNvbXBsZXRpb24sIGFuZCBpdCB3b24ndCBlbnRlciBwaGFzZSAyIChkZXZpY2Ug c3VzcGVuZCAmIGZyZWV6aW5nIHBtX3dxKS4KCkxldCBtZSBrbm93IGlmIEkgdW5kZXJzdGFuZCBp dCBjb3JyZWN0bHkuCgo+IEluIGNvbnRyYXN0LCBmMmZzX2djIGFuZCBmMmZzX2Rpc2NhcmQgYXJl IGF1dG9ub21vdXMgYmFja2dyb3VuZAo+IHRocmVhZHMgd2FraW5nIHVwIGV2ZW4gb24gYW4gaWRs ZSBzeXN0ZW0gd2l0aCBVRlMgaW4gUnVudGltZSBQTQo+IHN1c3BlbmQsIHdoaWNoIGlzIHRoZSBt YWluIGNhdXNlIG9mIFVGUyBkZWFkbG9jayB3aGVuIGVudGVyaW5nIHRoZQo+IHN1c3BlbmQuCj4g V2l0aCBaVUZTLCBHQyBydW5zIG11Y2ggbW9yZSBmcmVxdWVudGx5LCBjYXVzaW5nIGZyZXF1ZW50 IHN1c3BlbmQgYWJvcnRzLgo+IAo+Pj4KPj4+Pgo+Pj4+PiBmbGFnIGFuZCBpbW1lZGlhdGVseSBz dG9wIGlzc3VpbmcgbmV3IGJpb3MsIGFsbG93aW5nIHRoZW0gdG8gZW50ZXIgYQo+Pj4+PiBmcmVl emFibGUgc2xlZXAgc3RhdGUgY2xlYW5seSBiZWZvcmUgcHJvY2VzcyBmcmVlemluZyBiZWdpbnMu Cj4+Pj4+Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6IERhZWhvIEplb25nIDxkYWVob2plb25nQGdvb2ds ZS5jb20+Cj4+Pj4+IC0tLQo+Pj4+PiAgIGZzL2YyZnMvZjJmcy5oICAgIHwgIDMgKysrCj4+Pj4+ ICAgZnMvZjJmcy9nYy5jICAgICAgfCAxMyArKysrKysrKy0tLS0tCj4+Pj4+ICAgZnMvZjJmcy9z ZWdtZW50LmMgfCAxMyArKysrKysrKystLS0tCj4+Pj4+ICAgZnMvZjJmcy9zdXBlci5jICAgfCAy NSArKysrKysrKysrKysrKysrKysrKysrKysrCj4+Pj4+ICAgNCBmaWxlcyBjaGFuZ2VkLCA0NSBp bnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZnMv ZjJmcy9mMmZzLmggYi9mcy9mMmZzL2YyZnMuaAo+Pj4+PiBpbmRleCBmMjRlMzBiYjVjM2QuLmM0 NmJmNGRmOTQxMiAxMDA2NDQKPj4+Pj4gLS0tIGEvZnMvZjJmcy9mMmZzLmgKPj4+Pj4gKysrIGIv ZnMvZjJmcy9mMmZzLmgKPj4+Pj4gQEAgLTI1LDYgKzI1LDcgQEAKPj4+Pj4gICAjaW5jbHVkZSA8 bGludXgvcXVvdGFvcHMuaD4KPj4+Pj4gICAjaW5jbHVkZSA8bGludXgvcGFydF9zdGF0Lmg+Cj4+ Pj4+ICAgI2luY2x1ZGUgPGxpbnV4L3J3X2hpbnQuaD4KPj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9z dXNwZW5kLmg+Cj4+Pj4+Cj4+Pj4+ICAgI2luY2x1ZGUgPGxpbnV4L2ZzY3J5cHQuaD4KPj4+Pj4g ICAjaW5jbHVkZSA8bGludXgvZnN2ZXJpdHkuaD4KPj4+Pj4gQEAgLTE0OTQsNiArMTQ5NSw3IEBA IGVudW0gewo+Pj4+PiAgICAgICBTQklfSVNfRlJFRVpJTkcsICAgICAgICAgICAgICAgICAgICAg ICAgLyogZnJlZXplZnMgaXMgaW4gcHJvY2VzcyAqLwo+Pj4+PiAgICAgICBTQklfSVNfV1JJVEFC TEUsICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVtb3ZlIHJvIG1vdW50b3B0aW9uIHRyYW5z aWVudGx5ICovCj4+Pj4+ICAgICAgIFNCSV9FTkFCTEVfQ0hFQ0tQT0lOVCwgICAgICAgICAgICAg ICAgICAvKiBpbmRpY2F0ZSBpdCdzIGR1cmluZyBmMmZzX2VuYWJsZV9jaGVja3BvaW50KCkgKi8K Pj4+Pj4gKyAgICAgU0JJX0lTX1NVU1BFTkRJTkcsICAgICAgICAgICAgICAgICAgICAgIC8qIHN5 c3RlbSBzdXNwZW5kIGlzIGluIHByb2dyZXNzICovCj4+Pj4+ICAgICAgIE1BWF9TQklfRkxBRywK Pj4+Pj4gICB9Owo+Pj4+Pgo+Pj4+PiBAQCAtMTc1Nyw2ICsxNzU5LDcgQEAgc3RydWN0IGYyZnNf c2JfaW5mbyB7Cj4+Pj4+ICAgICAgIHN0cnVjdCBmMmZzX3J3c2VtIHNiX2xvY2s7ICAgICAgICAg ICAgICAvKiBsb2NrIGZvciByYXcgc3VwZXIgYmxvY2sgKi8KPj4+Pj4gICAgICAgaW50IHZhbGlk X3N1cGVyX2Jsb2NrOyAgICAgICAgICAgICAgICAgIC8qIHZhbGlkIHN1cGVyIGJsb2NrIG5vICov Cj4+Pj4+ICAgICAgIHVuc2lnbmVkIGxvbmcgc19mbGFnOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGZsYWdzIGZvciBzYmkgKi8KPj4+Pj4gKyAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2Nr IHBtX25iOyAgICAgICAgICAgIC8qIGZvciBQTSBub3RpZmllciAqLwo+Pj4+PiAgICAgICBzdHJ1 Y3QgbXV0ZXggd3JpdGVwYWdlczsgICAgICAgICAgICAgICAgLyogbXV0ZXggZm9yIHdyaXRlcGFn ZXMoKSAqLwo+Pj4+Pgo+Pj4+PiAgICNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRAo+Pj4+PiBk aWZmIC0tZ2l0IGEvZnMvZjJmcy9nYy5jIGIvZnMvZjJmcy9nYy5jCj4+Pj4+IGluZGV4IDkzYmNi MzVhNWI1ZC4uODZiMmIyOTQwMmE1IDEwMDY0NAo+Pj4+PiAtLS0gYS9mcy9mMmZzL2djLmMKPj4+ Pj4gKysrIGIvZnMvZjJmcy9nYy5jCj4+Pj4+IEBAIC03MSw3ICs3MSw4IEBAIHN0YXRpYyBpbnQg Z2NfdGhyZWFkX2Z1bmModm9pZCAqZGF0YSkKPj4+Pj4gICAgICAgICAgICAgICBpZiAoa3RocmVh ZF9zaG91bGRfc3RvcCgpKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+Pj4+ Cj4+Pj4+IC0gICAgICAgICAgICAgaWYgKHNiaS0+c2ItPnNfd3JpdGVycy5mcm96ZW4gPj0gU0Jf RlJFRVpFX1dSSVRFKSB7Cj4+Pj4+ICsgICAgICAgICAgICAgaWYgKHNiaS0+c2ItPnNfd3JpdGVy cy5mcm96ZW4gPj0gU0JfRlJFRVpFX1dSSVRFIHx8Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAg ICBpc19zYmlfZmxhZ19zZXQoc2JpLCBTQklfSVNfU1VTUEVORElORykpIHsKPj4+Pj4gICAgICAg ICAgICAgICAgICAgICAgIGluY3JlYXNlX3NsZWVwX3RpbWUoZ2NfdGgsICZ3YWl0X21zKTsKPj4+ Pj4gICAgICAgICAgICAgICAgICAgICAgIHN0YXRfb3RoZXJfc2tpcF9iZ2djX2NvdW50KHNiaSk7 Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4+Pj4gQEAgLTEwNjQsOCAr MTA2NSw5IEBAIHN0YXRpYyBpbnQgZ2Nfbm9kZV9zZWdtZW50KHN0cnVjdCBmMmZzX3NiX2luZm8g KnNiaSwKPj4+Pj4gICAgICAgICAgICAgICBzdHJ1Y3Qgbm9kZV9pbmZvIG5pOwo+Pj4+PiAgICAg ICAgICAgICAgIGludCBlcnI7Cj4+Pj4+Cj4+Pj4+IC0gICAgICAgICAgICAgLyogc3RvcCBCR19H QyBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGZyZWUgc2VjdGlvbnMuICovCj4+Pj4+IC0gICAgICAg ICAgICAgaWYgKGdjX3R5cGUgPT0gQkdfR0MgJiYgaGFzX25vdF9lbm91Z2hfZnJlZV9zZWNzKHNi aSwgMCwgMCkpCj4+Pj4+ICsgICAgICAgICAgICAgLyogc3RvcCBCR19HQyBpZiB0aGVyZSBpcyBu b3QgZW5vdWdoIGZyZWUgc2VjdGlvbnMgb3Igc3VzcGVuZGluZy4gKi8KPj4+Pj4gKyAgICAgICAg ICAgICBpZiAoZ2NfdHlwZSA9PSBCR19HQyAmJiAoaGFzX25vdF9lbm91Z2hfZnJlZV9zZWNzKHNi aSwgMCwgMCkgfHwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp c19zYmlfZmxhZ19zZXQoc2JpLCBTQklfSVNfU1VTUEVORElORykpKQo+Pj4+PiAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHN1Ym1pdHRlZDsKPj4+Pj4KPj4+Pj4gICAgICAgICAgICAgICBp ZiAoY2hlY2tfdmFsaWRfbWFwKHNiaSwgc2Vnbm8sIG9mZikgPT0gMCkKPj4+Pj4gQEAgLTE2MTEs NyArMTYxMyw4IEBAIHN0YXRpYyBpbnQgZ2NfZGF0YV9zZWdtZW50KHN0cnVjdCBmMmZzX3NiX2lu Zm8gKnNiaSwgc3RydWN0IGYyZnNfc3VtbWFyeSAqc3VtLAo+Pj4+PiAgICAgICAgICAgICAgICAq IE9yLCBzdG9wIEdDIGlmIHRoZSBzZWdtZW50IGJlY29tZXMgZnVsbHkgdmFsaWQgY2F1c2VkIGJ5 Cj4+Pj4+ICAgICAgICAgICAgICAgICogcmFjZSBjb25kaXRpb24gYWxvbmcgd2l0aCBTU1IgYmxv Y2sgYWxsb2NhdGlvbi4KPj4+Pj4gICAgICAgICAgICAgICAgKi8KPj4+Pj4gLSAgICAgICAgICAg ICBpZiAoKGdjX3R5cGUgPT0gQkdfR0MgJiYgaGFzX25vdF9lbm91Z2hfZnJlZV9zZWNzKHNiaSwg MCwgMCkpIHx8Cj4+Pj4+ICsgICAgICAgICAgICAgaWYgKChnY190eXBlID09IEJHX0dDICYmICho YXNfbm90X2Vub3VnaF9mcmVlX3NlY3Moc2JpLCAwLCAwKSB8fAo+Pj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NiaV9mbGFnX3NldChzYmksIFNCSV9JU19TVVNQ RU5ESU5HKSkpIHx8Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAoIWZvcmNlX21pZ3JhdGUg JiYgZ2V0X3ZhbGlkX2Jsb2NrcyhzYmksIHNlZ25vLCB0cnVlKSA9PQo+Pj4+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVBfQkxLU19QRVJf U0VDKHNiaSkpKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Ym1pdHRlZDsK Pj4+Pj4gQEAgLTIwMTUsNyArMjAxOCw3IEBAIGludCBmMmZzX2djKHN0cnVjdCBmMmZzX3NiX2lu Zm8gKnNiaSwgc3RydWN0IGYyZnNfZ2NfY29udHJvbCAqZ2NfY29udHJvbCkKPj4+Pj4gICAgICAg ICAgICAgICBnb3RvIHN0b3A7Cj4+Pj4+ICAgICAgIH0KPj4+Pj4gICByZXRyeToKPj4+Pj4gLSAg ICAgaWYgKHVubGlrZWx5KGZyZWV6aW5nKGN1cnJlbnQpKSkgewo+Pj4+Cj4+Pj4gU2hvdWxkbid0 IHdlIGtlZXAgb3JpZ2luYWwgZnJlZXppbmcgbG9naWM/IGluIGNhc2UgZmlsZXN5c3RlbSBhcmUg ZnJvemVuCj4+Pj4gd2hlbiBsb3cgZGV2aWNlIHNuYXBzaG90IGlzIHRyaWdnZXJlZD8KPj4+Cj4+ PiBTaW5jZSB0aGUgcnVudGltZSBQTSBzdXNwZW5kL3Jlc3VtZSB3b3JrZXJzIGFyZSBvbmx5IGZy b3plbiBkdXJpbmcKPj4+IHN5c3RlbS13aWRlIFBNIHRyYW5zaXRpb25zIChzdXNwZW5kL2hpYmVy bmF0aW9uKSwgdGhlIFBNIG5vdGlmaWVyCj4+PiBhcHByb2FjaCB3aXRoIFNCSV9JU19TVVNQRU5E SU5HIHN1ZmZpY2llbnRseSBwcmV2ZW50cyB0aGUgZGVhZGxvY2suCj4+Cj4+IFdoYXQgSSBtZWFu IGlzOgo+Pgo+PiBpZiAoaXNfc2JpX2ZsYWdfc2V0KHNiaSwgU0JJX0lTX1NVU1BFTkRJTkcpIHx8 IHVubGlrZWx5KGZyZWV6aW5nKGN1cnJlbnQpKSkgewo+Pgo+PiBvdGhlcndpc2UsIGdjIHRocmVh ZCBvciBkaXNjYXJkIHRocmVhZCB3b24ndCBkZXRlY3QgZnJlZXplIHN0YXRlLCBhbmQgd2lsbAo+ PiBjb250aW51ZSB0byB0cmlnZ2VyIElPIGluIGJhY2tncm91bmQgZXZlbiB0aGVyZSBpcyBhIHN5 c3RlbSBmcmVlemUgcmVxdWVzdAo+PiBmcm9tIGRldmljZSBzbmFwc2hvdCBvciBjZ3JvdXAgZnJl ZXppbmcsIHJpZ2h0Pwo+Pgo+IAo+IFRoZSBoYW5nIGluIHN5c3RlbSBzdXNwZW5kIGhhcHBlbnMg YmVjYXVzZSBSdW50aW1lIFBNIHdvcmtlcnMgKHBtX3dxKQo+IGFyZSBmcm96ZW4sIHNvIFVGUyBj YW5ub3QgYmUgcmVzdW1lZCBmcm9tIHN1Ym1pdF9iaW8oKS4KPiBEdXJpbmcgY2dyb3VwIGZyZWV6 ZSBvciBzbmFwc2hvdCwgSSBiZWxpZXZlIHBtX3dxIGlzIGFsaXZlLCBzbyBVRlMKPiByZXN1bWVz IGluIGEgZmV3IG1zIGFuZCBJL08gZmluaXNoZXMgd2l0aG91dCBkZWFkbG9jay4gQWxzbywKPiB3 YWl0X2V2ZW50X2ZyZWV6YWJsZV90aW1lb3V0KCkgd2lsbCBmcmVlemUgdGhlIHRocmVhZHMgd2hl biB0aGV5Cj4gc2xlZXAuCgpIZXJlLCB3ZSBuZWVkIHRvIGRldGVjdCB0aGUgZnJlZXppbmcgc3Rh dGUgYW5kIHN0b3AgaXNzdWluZyBhbnkgbmV3IEkvTwppbW1lZGlhdGVseSBiZWNhdXNlIG5vbi1Q TSBmcmVlemluZyBtZWNoYW5pc21zIChzdWNoIGFzIGRtLXNuYXBzaG90IG9yCmNncm91cCBmcmVl emVyKSByZXF1aXJlIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0vZGV2aWNlIHRvIHJlYWNoIGEK cXVpZXNjZW50IChzdGF0aWMpIHN0YXRlLiBJdCdzIG5vdCBsaW1pdGVkIHN0cmljdGx5IHRvIHRo ZSBQTSBzdXNwZW5kCnN0YXRlLgoKPiAKPiBJZiB5b3UgcHJlZmVyIGtlZXBpbmcgZnJlZXppbmco Y3VycmVudCkgYXMgYSBmYXN0IHBhdGggZm9yIG5vbi1QTQo+IGZyZWV6aW5nLCBJIGNhbiBjaGFu Z2UgaXQgdG86Cj4gaWYgKGlzX3NiaV9mbGFnX3NldChzYmksIFNCSV9JU19TVVNQRU5ESU5HKSB8 fCB1bmxpa2VseShmcmVlemluZyhjdXJyZW50KSkpCj4gRG8geW91IHN0aWxsIHRoaW5rIGl0IGlz IHJlcXVpcmVkPyBJZiBzbywgcGx6LCBsZXQgbWUga25vdy4KClllcywgcGxlYXNlLgoKVGhhbmtz LAoKPiAKPiBUaGFua3MuCj4gCj4+IFRoYW5rcywKPj4KPj4+Cj4+PiBUaGFua3MsCj4+Pgo+Pj4+ Cj4+Pj4+ICsgICAgIGlmIChpc19zYmlfZmxhZ19zZXQoc2JpLCBTQklfSVNfU1VTUEVORElORykp IHsKPj4+Pj4gICAgICAgICAgICAgICByZXQgPSAwOwo+Pj4+PiAgICAgICAgICAgICAgIGdvdG8g c3RvcDsKPj4+Pj4gICAgICAgfQo+Pj4+PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9zZWdtZW50LmMg Yi9mcy9mMmZzL3NlZ21lbnQuYwo+Pj4+PiBpbmRleCBkNzBkYzVlZjNkZTQuLmUyNzE5Nzk1MzM1 NiAxMDA2NDQKPj4+Pj4gLS0tIGEvZnMvZjJmcy9zZWdtZW50LmMKPj4+Pj4gKysrIGIvZnMvZjJm cy9zZWdtZW50LmMKPj4+Pj4gQEAgLTEzMDAsNyArMTMwMCw4IEBAIHN0YXRpYyBpbnQgX19zdWJt aXRfZGlzY2FyZF9jbWQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLAo+Pj4+PiAgICAgICBpZiAo ZGMtPnN0YXRlICE9IERfUFJFUCkKPj4+Pj4gICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+Pj4K Pj4+Pj4gLSAgICAgaWYgKGlzX3NiaV9mbGFnX3NldChzYmksIFNCSV9ORUVEX0ZTQ0spKQo+Pj4+ PiArICAgICBpZiAoaXNfc2JpX2ZsYWdfc2V0KHNiaSwgU0JJX05FRURfRlNDSykgfHwKPj4+Pj4g KyAgICAgICAgICAgICBpc19zYmlfZmxhZ19zZXQoc2JpLCBTQklfSVNfU1VTUEVORElORykpCj4+ Pj4+ICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+Pj4+Cj4+Pj4+ICAgI2lmZGVmIENPTkZJR19C TEtfREVWX1pPTkVECj4+Pj4+IEBAIC0xMzQxLDYgKzEzNDIsOSBAQCBzdGF0aWMgaW50IF9fc3Vi bWl0X2Rpc2NhcmRfY21kKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwKPj4+Pj4gICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+Pj4+PiAgICAgICAgICAgICAgIGJvb2wgbGFzdCA9 IHRydWU7Cj4+Pj4+Cj4+Pj4+ICsgICAgICAgICAgICAgaWYgKGlzX3NiaV9mbGFnX3NldChzYmks IFNCSV9JU19TVVNQRU5ESU5HKSkKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ Pj4+PiArCj4+Pj4+ICAgICAgICAgICAgICAgaWYgKGxlbiA+IG1heF9kaXNjYXJkX2Jsb2Nrcykg ewo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gbWF4X2Rpc2NhcmRfYmxvY2tzOwo+ Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGZhbHNlOwo+Pj4+PiBAQCAtMTYxNSw3 ICsxNjE5LDcgQEAgc3RhdGljIHZvaWQgX19pc3N1ZV9kaXNjYXJkX2NtZF9vcmRlcmx5KHN0cnVj dCBmMmZzX3NiX2luZm8gKnNiaSwKPj4+Pj4gICAgICAgICAgICAgICBpZiAoZGMtPnN0YXRlICE9 IERfUFJFUCkKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dDsKPj4+Pj4KPj4+ Pj4gLSAgICAgICAgICAgICBpZiAoKmlzc3VlZCA+IDAgJiYgdW5saWtlbHkoZnJlZXppbmcoY3Vy cmVudCkpKQo+Pj4+Cj4+Pj4gRGl0dG8sCj4+Pj4KPj4+Pj4gKyAgICAgICAgICAgICBpZiAoaXNf c2JpX2ZsYWdfc2V0KHNiaSwgU0JJX0lTX1NVU1BFTkRJTkcpKQo+Pj4+PiAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Cj4+Pj4+Cj4+Pj4+ICAgICAgICAgICAgICAgaWYgKGRwb2xpY3ktPmlv X2F3YXJlICYmICFpc19pZGxlKHNiaSwgRElTQ0FSRF9USU1FKSkgewo+Pj4+PiBAQCAtMTY4OCw3 ICsxNjkyLDcgQEAgc3RhdGljIGludCBfX2lzc3VlX2Rpc2NhcmRfY21kKHN0cnVjdCBmMmZzX3Ni X2luZm8gKnNiaSwKPj4+Pj4gICAgICAgICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo ZGMsIHRtcCwgcGVuZF9saXN0LCBsaXN0KSB7Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICBm MmZzX2J1Z19vbihzYmksIGRjLT5zdGF0ZSAhPSBEX1BSRVApOwo+Pj4+Pgo+Pj4+PiAtICAgICAg ICAgICAgICAgICAgICAgaWYgKGlzc3VlZCA+IDAgJiYgdW5saWtlbHkoZnJlZXppbmcoY3VycmVu dCkpKSB7Cj4+Pj4KPj4+PiBEaXR0bywKPj4+Pgo+Pj4+IFRoYW5rcywKPj4+Pgo+Pj4+PiArICAg ICAgICAgICAgICAgICAgICAgaWYgKGlzX3NiaV9mbGFnX3NldChzYmksIFNCSV9JU19TVVNQRU5E SU5HKSkgewo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5kZWQgPSB0 cnVlOwo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+Pj4gICAg ICAgICAgICAgICAgICAgICAgIH0KPj4+Pj4gQEAgLTE5NTUsNyArMTk1OSw4IEBAIHN0YXRpYyBp bnQgaXNzdWVfZGlzY2FyZF90aHJlYWQodm9pZCAqZGF0YSkKPj4+Pj4gICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+Pj4+PiAgICAgICAgICAgICAgIGlmIChrdGhyZWFkX3Nob3VsZF9z dG9wKCkpCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+Pj4gLSAgICAg ICAgICAgICBpZiAoaXNfc2JpX2ZsYWdfc2V0KHNiaSwgU0JJX05FRURfRlNDSykgfHwKPj4+Pj4g KyAgICAgICAgICAgICBpZiAoaXNfc2JpX2ZsYWdfc2V0KHNiaSwgU0JJX0lTX1NVU1BFTkRJTkcp IHx8Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBpc19zYmlfZmxhZ19zZXQoc2JpLCBTQklf TkVFRF9GU0NLKSB8fAo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgIWF0b21pY19yZWFkKCZk Y2MtPmRpc2NhcmRfY21kX2NudCkpIHsKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgIHdhaXRf bXMgPSBkcG9saWN5Lm1heF9pbnRlcnZhbDsKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwo+Pj4+PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9zdXBlci5jIGIvZnMvZjJmcy9zdXBl ci5jCj4+Pj4+IGluZGV4IGQ1ZGM4M2U2MTNlMi4uNTM2ZjNmZmU1MzU0IDEwMDY0NAo+Pj4+PiAt LS0gYS9mcy9mMmZzL3N1cGVyLmMKPj4+Pj4gKysrIGIvZnMvZjJmcy9zdXBlci5jCj4+Pj4+IEBA IC0xOTc5LDYgKzE5NzksMjYgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9kZXZpY2VfbGlzdChzdHJ1 Y3QgZjJmc19zYl9pbmZvICpzYmkpCj4+Pj4+ICAgICAgIGt2ZnJlZShzYmktPmRldnMpOwo+Pj4+ PiAgIH0KPj4+Pj4KPj4+Pj4gK3N0YXRpYyBpbnQgZjJmc19wbV9ub3RpZmllcihzdHJ1Y3Qgbm90 aWZpZXJfYmxvY2sgKm5iLAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgYWN0aW9uLCB2b2lkICpwdHIpCj4+Pj4+ICt7Cj4+Pj4+ICsgICAgIHN0cnVjdCBmMmZz X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGYyZnNfc2JfaW5mbywgcG1f bmIpOwo+Pj4+PiArCj4+Pj4+ICsgICAgIHN3aXRjaCAoYWN0aW9uKSB7Cj4+Pj4+ICsgICAgIGNh c2UgUE1fSElCRVJOQVRJT05fUFJFUEFSRToKPj4+Pj4gKyAgICAgY2FzZSBQTV9TVVNQRU5EX1BS RVBBUkU6Cj4+Pj4+ICsgICAgIGNhc2UgUE1fUkVTVE9SRV9QUkVQQVJFOgo+Pj4+PiArICAgICAg ICAgICAgIHNldF9zYmlfZmxhZyhzYmksIFNCSV9JU19TVVNQRU5ESU5HKTsKPj4+Pj4gKyAgICAg ICAgICAgICBicmVhazsKPj4+Pj4gKyAgICAgY2FzZSBQTV9QT1NUX1NVU1BFTkQ6Cj4+Pj4+ICsg ICAgIGNhc2UgUE1fUE9TVF9ISUJFUk5BVElPTjoKPj4+Pj4gKyAgICAgY2FzZSBQTV9QT1NUX1JF U1RPUkU6Cj4+Pj4+ICsgICAgICAgICAgICAgY2xlYXJfc2JpX2ZsYWcoc2JpLCBTQklfSVNfU1VT UEVORElORyk7Cj4+Pj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+Pj4+ICsgICAgIH0KPj4+Pj4g KyAgICAgcmV0dXJuIE5PVElGWV9PSzsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+PiAgIHN0YXRpYyB2 b2lkIGYyZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCj4+Pj4+ICAgewo+Pj4+ PiAgICAgICBzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX1NCKHNiKTsKPj4+Pj4gQEAg LTE5ODYsNiArMjAwNiw4IEBAIHN0YXRpYyB2b2lkIGYyZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IpCj4+Pj4+ICAgICAgIGludCBlcnIgPSAwOwo+Pj4+PiAgICAgICBib29sIGRv bmU7Cj4+Pj4+Cj4+Pj4+ICsgICAgIHVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJnNiaS0+cG1fbmIp Owo+Pj4+PiArCj4+Pj4+ICAgICAgIC8qIHVucmVnaXN0ZXIgcHJvY2ZzL3N5c2ZzIGVudHJpZXMg aW4gYWR2YW5jZSB0byBhdm9pZCByYWNlIGNhc2UgKi8KPj4+Pj4gICAgICAgZjJmc191bnJlZ2lz dGVyX3N5c2ZzKHNiaSk7Cj4+Pj4+Cj4+Pj4+IEBAIC01NDcyLDYgKzU0OTQsOSBAQCBzdGF0aWMg aW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29u dGV4dCAqZmMpCj4+Pj4+Cj4+Pj4+ICAgICAgIGYyZnNfcmVzdG9yZV9kZXZpY2VfYWxpYXMoc2Jp KTsKPj4+Pj4KPj4+Pj4gKyAgICAgc2JpLT5wbV9uYi5ub3RpZmllcl9jYWxsID0gZjJmc19wbV9u b3RpZmllcjsKPj4+Pj4gKyAgICAgcmVnaXN0ZXJfcG1fbm90aWZpZXIoJnNiaS0+cG1fbmIpOwo+ Pj4+PiArCj4+Pj4+ICAgICAgIHNiaS0+dW1vdW50X2xvY2tfaG9sZGVyID0gTlVMTDsKPj4+Pj4g ICAgICAgcmV0dXJuIDA7Cj4+Pj4+Cj4+Pj4KPj4KCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5nIGxpc3QKTGlu dXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vm b3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbGludXgtZjJmcy1kZXZlbAo=