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 71DC5280331 for ; Tue, 15 Sep 2026 02:18:28 +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=1789438709; cv=none; b=DxXB3ktuAIaHgJvLiTis6LfZMfwwYcKFUUdkKW06vpOYQLP8LwaC3f/XJ/gB5YDVQtLU4T/l6WJrU3CRx8WDovtnliyicKxdVcPAdpstAWG0oAXCt+5OajjGvekan4F/0PjS5lf58iJoqhP8HC2dh33SOxigbtxRueyBxA8NlwQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789438709; c=relaxed/simple; bh=0Y2LGc6g5p8+/EfjPiXxaJ+3LSHoqGwcLHSelx8Y7dM=; h=Message-ID:Date:MIME-Version:Cc:Subject:To:References:From: In-Reply-To:Content-Type; b=IErCqhb6gNt//rVUiH7Kn7c2I32wmU4dHeB1pO4fJs8Fpzc4NQs2TA7Hvvpxa94dW3KFciFMJt0mA3Bc+eY3159keBhcJYQ1g4fFA60MdQICvL56yQfR3m+LeZrbQxoTz/KSN6Qg2y2X7V4P+XxULNQt8tx+BdPshM4fkfR6rjg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HKNJcTQ6; 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="HKNJcTQ6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F28C31F000FF; Tue, 15 Sep 2026 02:18:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789438708; bh=L8n+b2jyjPCQEyeK+sxO0PfXUZwS78bHwCOgi1jJE1s=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=HKNJcTQ6iz+1h9p7UZBRSm6RDzZtcspbCcBupI0JswkSqHo9R529JKN/Xw0Ch33Og YgTcH1C7vy6r5FjyP+5pGlLSNbwTcGDgKRxfltkxO6LLoylxnFTKTu69mb61K5Mb9h psOl9joXkgpWBMzj+Rvm36c8KF33G+5/ZRN9aFIOObucV+r5XpG4d9u6E/ZmavlW9U 4osL1QjUSTcRA/omqM2aS4SkghV3Omi4+VeHpF/yHSjn8vYtG+3Gx+kCEAp4eKOXvf J3OEF7051cf7xjPE6+auXPK18Q9Yptig0tqT1eQ60jgk1QHe6IKtuLTXCNsSsJE18u Ku0Zd4B73ThTg== Message-ID: <420b564b-c40b-4618-b072-7c169eca2f87@kernel.org> Date: Tue, 15 Sep 2026 10:18:25 +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, jaegeuk@kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Subject: Re: [f2fs-dev] [PATCH v7 04/12] f2fs: cache: introduce writeback thread To: Zhiguo Niu References: <20260911232405.1815804-1-chao@kernel.org> <20260911232405.1815804-5-chao@kernel.org> Content-Language: en-US From: Chao Yu In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Zhiguo, Thanks for the review, let fix them all. Thanks, On 9/14/26 17:08, Zhiguo Niu wrote: > Chao Yu via Linux-f2fs-devel > 于2026年9月12日周六 07:28写道: >> >> From: Chao Yu >> >> This patch introduces a background writeback kthread (f2fs_writeback-x:y) >> to periodically flush dirty metadata cache entries with a default >> interval of 5 seconds. >> >> It manages thread lifecycle across mount, unmount, and remount (rw/ro) >> transitions. >> >> It introduces a sysfs entry /sys/fs/f2fs//cache_wb_interval to control >> writeback interval. >> >> Signed-off-by: Chao Yu >> --- >> Documentation/ABI/testing/sysfs-fs-f2fs | 6 +++ >> fs/f2fs/cache.c | 56 +++++++++++++++++++++++++ >> fs/f2fs/cache.h | 12 ++++++ >> fs/f2fs/f2fs.h | 3 ++ >> fs/f2fs/super.c | 33 ++++++++++++++- >> fs/f2fs/sysfs.c | 13 +++++- >> 6 files changed, 120 insertions(+), 3 deletions(-) >> >> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs >> index 0cebc89799dd..d2665b7f1f14 100644 >> --- a/Documentation/ABI/testing/sysfs-fs-f2fs >> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs >> @@ -1020,3 +1020,9 @@ Contact: "Daeho Jeong" >> Description: This is a read-only entry to show the upper bound section number >> for pinned files. Pinned files will only be allocated within >> sections 0 to pinned_area_max_secno - 1. >> + >> +What: /sys/fs/f2fs//cache_wb_interval >> +Date: August 2026 >> +Contact: "Chao Yu" >> +Description: This is a writable entry to control writeback interval of >> + f2fs_writeback-x:y, by default the value is 5000, unit is ms. >> diff --git a/fs/f2fs/cache.c b/fs/f2fs/cache.c >> index 563615761d11..404ceac9e6bf 100644 >> --- a/fs/f2fs/cache.c >> +++ b/fs/f2fs/cache.c >> @@ -626,3 +626,59 @@ unsigned long f2fs_shrink_cache(struct f2fs_sb_info *sbi, >> { >> return f2fs_do_shrink_cache(META_CACHE(sbi), nr_to_scan); >> } >> + > Hi Chao >> +static int f2fs_cache_writeback_kthread(void *data) >> +{ >> + struct f2fs_sb_info *sbi = data; >> + struct f2fs_cache_kthread *cache_thread = &sbi->cache_thread; >> + wait_queue_head_t *wq = &cache_thread->cache_wb_wq; >> + unsigned int interval = cache_thread->cache_wb_interval; >> + >> + set_freezable(); >> + >> + while (!kthread_should_stop()) { >> + wait_event_freezable_timeout(*wq, >> + kthread_should_stop(), >> + msecs_to_jiffies(interval)); > if wb thread is running and user set cache_wb_interval at the same > time, the wb thread can not get the new wb interval value for next > round? because local varible is used here >> + >> + if (kthread_should_stop()) >> + break; >> + if (f2fs_cp_error(sbi)) >> + continue; >> + } >> + return 0; >> +} >> + >> +int f2fs_start_cache_wb_thread(struct f2fs_sb_info *sbi) >> +{ >> + struct f2fs_cache_kthread *cache_thread = &sbi->cache_thread; >> + struct task_struct *task; >> + dev_t dev = sbi->sb->s_dev; >> + char name[36]; >> + >> + if (cache_thread->cache_wb_task) >> + return 0; >> + >> + init_waitqueue_head(&cache_thread->cache_wb_wq); >> + cache_thread->cache_wb_interval = DEF_DIRTY_CACHE_TIMEOUT; >> + snprintf(name, sizeof(name), "f2fs_writeback-%u:%u", >> + MAJOR(dev), MINOR(dev)); >> + >> + task = kthread_run(f2fs_cache_writeback_kthread, sbi, "%s", name); >> + if (IS_ERR(task)) >> + return PTR_ERR(task); >> + >> + cache_thread->cache_wb_task = task; >> + return 0; >> +} >> + >> +void f2fs_stop_cache_wb_thread(struct f2fs_sb_info *sbi) >> +{ >> + struct f2fs_cache_kthread *cache_thread = &sbi->cache_thread; >> + >> + if (!cache_thread->cache_wb_task) >> + return; >> + >> + kthread_stop(cache_thread->cache_wb_task); >> + cache_thread->cache_wb_task = NULL; >> +} >> diff --git a/fs/f2fs/cache.h b/fs/f2fs/cache.h >> index 5728e2225465..ea0cf9adf194 100644 >> --- a/fs/f2fs/cache.h >> +++ b/fs/f2fs/cache.h >> @@ -209,4 +209,16 @@ void f2fs_stop_cache_wb_thread(struct f2fs_sb_info *sbi); >> unsigned long f2fs_shrink_cache(struct f2fs_sb_info *sbi, >> unsigned long nr_to_scan); >> >> +#define DEF_DIRTY_CACHE_TIMEOUT 5000 >> + >> +struct f2fs_cache_kthread { >> + struct task_struct *cache_wb_task; >> + wait_queue_head_t cache_wb_wq; >> + atomic_t cache_wb_trigger; > not used? > thanks! >> + unsigned int cache_wb_interval; >> +}; >> + >> +int f2fs_start_cache_wb_thread(struct f2fs_sb_info *sbi); >> +void f2fs_stop_cache_wb_thread(struct f2fs_sb_info *sbi); >> + >> #endif /* _LINUX_F2FS_CACHE_H */ >> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h >> index 85c4bf40b4aa..c0f82b63d732 100644 >> --- a/fs/f2fs/f2fs.h >> +++ b/fs/f2fs/f2fs.h >> @@ -2110,6 +2110,9 @@ struct f2fs_sb_info { >> >> /* f2fs internal cache */ >> struct f2fs_cached_block_list meta_blocks; >> + >> + /* internal cache flush thread */ >> + struct f2fs_cache_kthread cache_thread; >> }; >> >> /* Definitions to access f2fs_sb_info */ >> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c >> index b731b9bb7b54..516b4ee12564 100644 >> --- a/fs/f2fs/super.c >> +++ b/fs/f2fs/super.c >> @@ -2039,6 +2039,7 @@ static void f2fs_put_super(struct super_block *sb) >> * flush all issued checkpoints and stop checkpoint issue thread. >> * after then, all checkpoints should be done by each process context. >> */ >> + f2fs_stop_cache_wb_thread(sbi); >> f2fs_stop_ckpt_thread(sbi); >> >> /* >> @@ -2845,6 +2846,7 @@ static int __f2fs_remount(struct fs_context *fc, struct super_block *sb) >> unsigned int flags = fc->sb_flags; >> int err; >> bool need_restart_gc = false, need_stop_gc = false; >> + bool need_restart_wb = false, need_stop_wb = false; >> bool need_restart_flush = false, need_stop_flush = false; >> bool need_restart_discard = false, need_stop_discard = false; >> bool need_enable_checkpoint = false, need_disable_checkpoint = false; >> @@ -3004,6 +3006,18 @@ static int __f2fs_remount(struct fs_context *fc, struct super_block *sb) >> need_stop_gc = true; >> } >> >> + if (flags & SB_RDONLY) { >> + if (sbi->cache_thread.cache_wb_task) { >> + f2fs_stop_cache_wb_thread(sbi); >> + need_restart_wb = true; >> + } >> + } else if (!sbi->cache_thread.cache_wb_task) { >> + err = f2fs_start_cache_wb_thread(sbi); >> + if (err) >> + goto restore_gc; >> + need_stop_wb = true; >> + } >> + >> if (flags & SB_RDONLY) { >> sync_inodes_sb(sb); >> >> @@ -3011,7 +3025,7 @@ static int __f2fs_remount(struct fs_context *fc, struct super_block *sb) >> set_sbi_flag(sbi, SBI_IS_CLOSE); >> err = f2fs_sync_fs(sb, 1); >> if (err) >> - goto restore_gc; >> + goto restore_wb; >> clear_sbi_flag(sbi, SBI_IS_CLOSE); >> } >> >> @@ -3026,7 +3040,7 @@ static int __f2fs_remount(struct fs_context *fc, struct super_block *sb) >> } else { >> err = f2fs_create_flush_cmd_control(sbi); >> if (err) >> - goto restore_gc; >> + goto restore_wb; >> need_stop_flush = true; >> } >> >> @@ -3123,6 +3137,13 @@ static int __f2fs_remount(struct fs_context *fc, struct super_block *sb) >> clear_opt(sbi, FLUSH_MERGE); >> f2fs_destroy_flush_cmd_control(sbi, false); >> } >> +restore_wb: >> + if (need_restart_wb) { >> + if (f2fs_start_cache_wb_thread(sbi)) >> + f2fs_warn(sbi, "background cache writeback thread has stopped"); >> + } else if (need_stop_wb) { >> + f2fs_stop_cache_wb_thread(sbi); >> + } >> restore_gc: >> if (need_restart_gc) { >> if (f2fs_start_gc_thread(sbi)) >> @@ -5529,6 +5550,12 @@ static int f2fs_fill_super(struct super_block *sb, struct fs_context *fc) >> goto sync_free_meta; >> } >> >> + if (!f2fs_readonly(sb)) { >> + err = f2fs_start_cache_wb_thread(sbi); >> + if (err) >> + goto stop_gc_thread; >> + } >> + >> /* recover broken superblock */ >> if (recovery) { >> err = f2fs_commit_super(sbi, true); >> @@ -5551,6 +5578,8 @@ static int f2fs_fill_super(struct super_block *sb, struct fs_context *fc) >> sbi->umount_lock_holder = NULL; >> return 0; >> >> +stop_gc_thread: >> + f2fs_stop_gc_thread(sbi); >> sync_free_meta: >> /* safe to flush all the data */ >> sync_filesystem(sbi->sb); >> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c >> index aaca9ed9b169..ad25733e32c0 100644 >> --- a/fs/f2fs/sysfs.c >> +++ b/fs/f2fs/sysfs.c >> @@ -40,6 +40,7 @@ enum { >> RESERVED_BLOCKS, /* struct f2fs_sb_info */ >> CPRC_INFO, /* struct ckpt_req_control */ >> ATGC_INFO, /* struct atgc_management */ >> + WB_THREAD, /* struct f2fs_cache_kthread */ >> }; >> >> static const char *gc_mode_names[MAX_GC_MODE] = { >> @@ -98,6 +99,8 @@ static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type) >> return (unsigned char *)&sbi->cprc_info; >> else if (struct_type == ATGC_INFO) >> return (unsigned char *)&sbi->am; >> + else if (struct_type == WB_THREAD) >> + return (unsigned char *)&sbi->cache_thread; >> return NULL; >> } >> >> @@ -1008,7 +1011,8 @@ static ssize_t f2fs_sbi_store(struct f2fs_attr *a, >> bool gc_entry = (!strcmp(a->attr.name, "gc_urgent") || >> a->struct_type == GC_THREAD); >> bool thread_entry = !strcmp(a->attr.name, "ckpt_thread_ioprio") || >> - !strcmp(a->attr.name, "critical_task_priority"); >> + !strcmp(a->attr.name, "critical_task_priority") || >> + !strcmp(a->attr.name, "cache_wb_interval"); >> >> if (gc_entry || thread_entry) { >> if (!down_read_trylock(&sbi->sb->s_umount)) >> @@ -1218,6 +1222,9 @@ static struct f2fs_attr f2fs_attr_##name = __ATTR(name, 0444, name##_show, NULL) >> #define ATGC_INFO_RW_ATTR(name, elname) \ >> F2FS_RW_ATTR(ATGC_INFO, atgc_management, name, elname) >> >> +#define WB_THREAD_RW_ATTR(name, elname) \ >> + F2FS_RW_ATTR(WB_THREAD, f2fs_cache_kthread, name, elname) >> + >> /* GC_THREAD ATTR */ >> GC_THREAD_RW_ATTR(gc_urgent_sleep_time, urgent_sleep_time); >> GC_THREAD_RW_ATTR(gc_min_sleep_time, min_sleep_time); >> @@ -1347,6 +1354,9 @@ ATGC_INFO_RW_ATTR(atgc_candidate_count, max_candidate_count); >> ATGC_INFO_RW_ATTR(atgc_age_weight, age_weight); >> ATGC_INFO_RW_ATTR(atgc_age_threshold, age_threshold); >> >> +/* WB_THREAD ATTR */ >> +WB_THREAD_RW_ATTR(cache_wb_interval, cache_wb_interval); >> + >> F2FS_GENERAL_RO_ATTR(dirty_segments); >> F2FS_GENERAL_RO_ATTR(free_segments); >> F2FS_GENERAL_RO_ATTR(ovp_segments); >> @@ -1533,6 +1543,7 @@ static struct attribute *f2fs_attrs[] = { >> ATTR_LIST(lock_duration_priority), >> ATTR_LIST(adjust_lock_priority), >> ATTR_LIST(critical_task_priority), >> + ATTR_LIST(cache_wb_interval), >> NULL, >> }; >> ATTRIBUTE_GROUPS(f2fs); >> -- >> 2.49.0 >> >> >> >> _______________________________________________ >> Linux-f2fs-devel mailing list >> Linux-f2fs-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel 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 9EF82C88E75 for ; Tue, 15 Sep 2026 02:18:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Type:Content-Transfer-Encoding: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=n49XrieLSu5BCk9jigra/uhgP8tmApmq71wPKmyYZSI=; b=gPDEE6W589Z/gTdxDxWHw/2R1O QrjqZ3uBTluFv1UtwIixqaKjqbqdVNJNfIlgoVQsfs1QPOKtxWyDue6Yq0xw7fhh/caA3+WaJ0A47 ZT4QcepGh6ahsp8X15beLNcXDE2N4RU7SOulEXPE3LxllOrl44YCBXzBa+MA45d07jOA=; Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1x6Ikl-0004ZJ-JZ; Tue, 15 Sep 2026 02:18:36 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1x6Ikk-0004Z3-9k for linux-f2fs-devel@lists.sourceforge.net; Tue, 15 Sep 2026 02:18:35 +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=L8n+b2jyjPCQEyeK+sxO0PfXUZwS78bHwCOgi1jJE1s=; b=M/i5FKGuPIwnV7dKCCDjkpuGHE Xekm4fN9UFW0zRCt7wzJ6TX/lX1O5x7um17rA2WYyNUdqGPvIxAn07ftKVwndXaDh4Cpa+333JUK+ 3ipqB5/EjR94lp6vEyHQJSDwppu4vZou5NK0bkzxBomQwG9Fz3Ni/MmJKy9dCEJrIGiI=; 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=L8n+b2jyjPCQEyeK+sxO0PfXUZwS78bHwCOgi1jJE1s=; b=PBL3stQZG6/g+5DaHIA0UufNxu 35hn13oPocFJ95b0Du5mEgrXlGiKeCMsk2BeIOrsySIg2T4nZ0V2WyyDhfMtzX7+9VmY7efKDjeCc CGM40TpNupQyitjyENnwQPYxnyt+lkuFThVbE0GmTG0ZfvavlIhoc2QKpBw4nVcK0UNo=; Received: from sea.source.kernel.org ([172.234.252.31]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1x6Ikj-0007Kn-Ez for linux-f2fs-devel@lists.sourceforge.net; Tue, 15 Sep 2026 02:18:35 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 1C218412AE; Tue, 15 Sep 2026 02:18:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F28C31F000FF; Tue, 15 Sep 2026 02:18:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789438708; bh=L8n+b2jyjPCQEyeK+sxO0PfXUZwS78bHwCOgi1jJE1s=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=HKNJcTQ6iz+1h9p7UZBRSm6RDzZtcspbCcBupI0JswkSqHo9R529JKN/Xw0Ch33Og YgTcH1C7vy6r5FjyP+5pGlLSNbwTcGDgKRxfltkxO6LLoylxnFTKTu69mb61K5Mb9h psOl9joXkgpWBMzj+Rvm36c8KF33G+5/ZRN9aFIOObucV+r5XpG4d9u6E/ZmavlW9U 4osL1QjUSTcRA/omqM2aS4SkghV3Omi4+VeHpF/yHSjn8vYtG+3Gx+kCEAp4eKOXvf J3OEF7051cf7xjPE6+auXPK18Q9Yptig0tqT1eQ60jgk1QHe6IKtuLTXCNsSsJE18u Ku0Zd4B73ThTg== Message-ID: <420b564b-c40b-4618-b072-7c169eca2f87@kernel.org> Date: Tue, 15 Sep 2026 10:18:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Zhiguo Niu References: <20260911232405.1815804-1-chao@kernel.org> <20260911232405.1815804-5-chao@kernel.org> Content-Language: en-US In-Reply-To: X-Headers-End: 1x6Ikj-0007Kn-Ez Subject: Re: [f2fs-dev] [PATCH v7 04/12] f2fs: cache: introduce writeback thread 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: jaegeuk@kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net WmhpZ3VvLAoKVGhhbmtzIGZvciB0aGUgcmV2aWV3LCBsZXQgZml4IHRoZW0gYWxsLgoKVGhhbmtz LAoKT24gOS8xNC8yNiAxNzowOCwgWmhpZ3VvIE5pdSB3cm90ZToKPiBDaGFvIFl1IHZpYSBMaW51 eC1mMmZzLWRldmVsIDxsaW51eC1mMmZzLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KPiDk uo4yMDI25bm0OeaciDEy5pel5ZGo5YWtIDA3OjI45YaZ6YGT77yaCj4+Cj4+IEZyb206IENoYW8g WXUgPGNoYW9Aa2VybmVsLm9yZz4KPj4KPj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYmFja2dy b3VuZCB3cml0ZWJhY2sga3RocmVhZCAoZjJmc193cml0ZWJhY2steDp5KQo+PiB0byBwZXJpb2Rp Y2FsbHkgZmx1c2ggZGlydHkgbWV0YWRhdGEgY2FjaGUgZW50cmllcyB3aXRoIGEgZGVmYXVsdAo+ PiBpbnRlcnZhbCBvZiA1IHNlY29uZHMuCj4+Cj4+IEl0IG1hbmFnZXMgdGhyZWFkIGxpZmVjeWNs ZSBhY3Jvc3MgbW91bnQsIHVubW91bnQsIGFuZCByZW1vdW50IChydy9ybykKPj4gdHJhbnNpdGlv bnMuCj4+Cj4+IEl0IGludHJvZHVjZXMgYSBzeXNmcyBlbnRyeSAvc3lzL2ZzL2YyZnMvPGRpc2s+ L2NhY2hlX3diX2ludGVydmFsIHRvIGNvbnRyb2wKPj4gd3JpdGViYWNrIGludGVydmFsLgo+Pgo+ PiBTaWduZWQtb2ZmLWJ5OiBDaGFvIFl1IDxjaGFvQGtlcm5lbC5vcmc+Cj4+IC0tLQo+PiAgIERv Y3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZnMtZjJmcyB8ICA2ICsrKwo+PiAgIGZzL2Yy ZnMvY2FjaGUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDU2ICsrKysrKysrKysrKysrKysr KysrKysrKysKPj4gICBmcy9mMmZzL2NhY2hlLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAx MiArKysrKysKPj4gICBmcy9mMmZzL2YyZnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg MyArKwo+PiAgIGZzL2YyZnMvc3VwZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDMzICsr KysrKysrKysrKysrLQo+PiAgIGZzL2YyZnMvc3lzZnMuYyAgICAgICAgICAgICAgICAgICAgICAg ICB8IDEzICsrKysrLQo+PiAgIDYgZmlsZXMgY2hhbmdlZCwgMTIwIGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5n L3N5c2ZzLWZzLWYyZnMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZzLWYyZnMK Pj4gaW5kZXggMGNlYmM4OTc5OWRkLi5kMjY2NWI3ZjFmMTQgMTAwNjQ0Cj4+IC0tLSBhL0RvY3Vt ZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZnMtZjJmcwo+PiArKysgYi9Eb2N1bWVudGF0aW9u L0FCSS90ZXN0aW5nL3N5c2ZzLWZzLWYyZnMKPj4gQEAgLTEwMjAsMyArMTAyMCw5IEBAIENvbnRh Y3Q6ICAiRGFlaG8gSmVvbmciIDxkYWVob2plb25nQGdvb2dsZS5jb20+Cj4+ICAgRGVzY3JpcHRp b246ICAgVGhpcyBpcyBhIHJlYWQtb25seSBlbnRyeSB0byBzaG93IHRoZSB1cHBlciBib3VuZCBz ZWN0aW9uIG51bWJlcgo+PiAgICAgICAgICAgICAgICAgIGZvciBwaW5uZWQgZmlsZXMuIFBpbm5l ZCBmaWxlcyB3aWxsIG9ubHkgYmUgYWxsb2NhdGVkIHdpdGhpbgo+PiAgICAgICAgICAgICAgICAg IHNlY3Rpb25zIDAgdG8gcGlubmVkX2FyZWFfbWF4X3NlY25vIC0gMS4KPj4gKwo+PiArV2hhdDog ICAgICAgICAgL3N5cy9mcy9mMmZzLzxkaXNrPi9jYWNoZV93Yl9pbnRlcnZhbAo+PiArRGF0ZTog ICAgICAgICAgQXVndXN0IDIwMjYKPj4gK0NvbnRhY3Q6ICAgICAgICJDaGFvIFl1IiA8Y2hhb0Br ZXJuZWwub3JnPgo+PiArRGVzY3JpcHRpb246ICAgVGhpcyBpcyBhIHdyaXRhYmxlIGVudHJ5IHRv IGNvbnRyb2wgd3JpdGViYWNrIGludGVydmFsIG9mCj4+ICsgICAgICAgICAgICAgICBmMmZzX3dy aXRlYmFjay14OnksIGJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzIDUwMDAsIHVuaXQgaXMgbXMuCj4+ IGRpZmYgLS1naXQgYS9mcy9mMmZzL2NhY2hlLmMgYi9mcy9mMmZzL2NhY2hlLmMKPj4gaW5kZXgg NTYzNjE1NzYxZDExLi40MDRjZWFjOWU2YmYgMTAwNjQ0Cj4+IC0tLSBhL2ZzL2YyZnMvY2FjaGUu Ywo+PiArKysgYi9mcy9mMmZzL2NhY2hlLmMKPj4gQEAgLTYyNiwzICs2MjYsNTkgQEAgdW5zaWdu ZWQgbG9uZyBmMmZzX3Nocmlua19jYWNoZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksCj4+ICAg ewo+PiAgICAgICAgICByZXR1cm4gZjJmc19kb19zaHJpbmtfY2FjaGUoTUVUQV9DQUNIRShzYmkp LCBucl90b19zY2FuKTsKPj4gICB9Cj4+ICsKPiBIaSBDaGFvCj4+ICtzdGF0aWMgaW50IGYyZnNf Y2FjaGVfd3JpdGViYWNrX2t0aHJlYWQodm9pZCAqZGF0YSkKPj4gK3sKPj4gKyAgICAgICBzdHJ1 Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBkYXRhOwo+PiArICAgICAgIHN0cnVjdCBmMmZzX2NhY2hl X2t0aHJlYWQgKmNhY2hlX3RocmVhZCA9ICZzYmktPmNhY2hlX3RocmVhZDsKPj4gKyAgICAgICB3 YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSAmY2FjaGVfdGhyZWFkLT5jYWNoZV93Yl93cTsKPj4gKyAg ICAgICB1bnNpZ25lZCBpbnQgaW50ZXJ2YWwgPSBjYWNoZV90aHJlYWQtPmNhY2hlX3diX2ludGVy dmFsOwo+PiArCj4+ICsgICAgICAgc2V0X2ZyZWV6YWJsZSgpOwo+PiArCj4+ICsgICAgICAgd2hp bGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKPj4gKyAgICAgICAgICAgICAgIHdhaXRfZXZl bnRfZnJlZXphYmxlX3RpbWVvdXQoKndxLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKSk7Cj4gaWYgd2IgdGhyZWFkIGlzIHJ1bm5p bmcgYW5kIHVzZXIgc2V0IGNhY2hlX3diX2ludGVydmFsIGF0IHRoZSBzYW1lCj4gdGltZe+8jCB0 aGUgd2IgdGhyZWFkIGNhbiBub3QgZ2V0IHRoZSBuZXcgd2IgaW50ZXJ2YWwgdmFsdWUgZm9yIG5l eHQKPiByb3VuZD8gYmVjYXVzZSBsb2NhbCB2YXJpYmxlIGlzIHVzZWQgaGVyZQo+PiArCj4+ICsg ICAgICAgICAgICAgICBpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQo+PiArICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgICAgICAgIGlmIChmMmZzX2NwX2Vycm9yKHNi aSkpCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArICAgICAgIH0KPj4g KyAgICAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAraW50IGYyZnNfc3RhcnRfY2FjaGVfd2Jf dGhyZWFkKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSkKPj4gK3sKPj4gKyAgICAgICBzdHJ1Y3Qg ZjJmc19jYWNoZV9rdGhyZWFkICpjYWNoZV90aHJlYWQgPSAmc2JpLT5jYWNoZV90aHJlYWQ7Cj4+ ICsgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwo+PiArICAgICAgIGRldl90IGRldiA9 IHNiaS0+c2ItPnNfZGV2Owo+PiArICAgICAgIGNoYXIgbmFtZVszNl07Cj4+ICsKPj4gKyAgICAg ICBpZiAoY2FjaGVfdGhyZWFkLT5jYWNoZV93Yl90YXNrKQo+PiArICAgICAgICAgICAgICAgcmV0 dXJuIDA7Cj4+ICsKPj4gKyAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYWNoZV90aHJlYWQt PmNhY2hlX3diX3dxKTsKPj4gKyAgICAgICBjYWNoZV90aHJlYWQtPmNhY2hlX3diX2ludGVydmFs ID0gREVGX0RJUlRZX0NBQ0hFX1RJTUVPVVQ7Cj4+ICsgICAgICAgc25wcmludGYobmFtZSwgc2l6 ZW9mKG5hbWUpLCAiZjJmc193cml0ZWJhY2stJXU6JXUiLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICBNQUpPUihkZXYpLCBNSU5PUihkZXYpKTsKPj4gKwo+PiArICAgICAgIHRhc2sgPSBrdGhy ZWFkX3J1bihmMmZzX2NhY2hlX3dyaXRlYmFja19rdGhyZWFkLCBzYmksICIlcyIsIG5hbWUpOwo+ PiArICAgICAgIGlmIChJU19FUlIodGFzaykpCj4+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRS X0VSUih0YXNrKTsKPj4gKwo+PiArICAgICAgIGNhY2hlX3RocmVhZC0+Y2FjaGVfd2JfdGFzayA9 IHRhc2s7Cj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgZjJmc19zdG9w X2NhY2hlX3diX3RocmVhZChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpCj4+ICt7Cj4+ICsgICAg ICAgc3RydWN0IGYyZnNfY2FjaGVfa3RocmVhZCAqY2FjaGVfdGhyZWFkID0gJnNiaS0+Y2FjaGVf dGhyZWFkOwo+PiArCj4+ICsgICAgICAgaWYgKCFjYWNoZV90aHJlYWQtPmNhY2hlX3diX3Rhc2sp Cj4+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4+ICsKPj4gKyAgICAgICBrdGhyZWFkX3N0b3Ao Y2FjaGVfdGhyZWFkLT5jYWNoZV93Yl90YXNrKTsKPj4gKyAgICAgICBjYWNoZV90aHJlYWQtPmNh Y2hlX3diX3Rhc2sgPSBOVUxMOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9jYWNoZS5o IGIvZnMvZjJmcy9jYWNoZS5oCj4+IGluZGV4IDU3MjhlMjIyNTQ2NS4uZWEwY2Y5YWRmMTk0IDEw MDY0NAo+PiAtLS0gYS9mcy9mMmZzL2NhY2hlLmgKPj4gKysrIGIvZnMvZjJmcy9jYWNoZS5oCj4+ IEBAIC0yMDksNCArMjA5LDE2IEBAIHZvaWQgZjJmc19zdG9wX2NhY2hlX3diX3RocmVhZChzdHJ1 Y3QgZjJmc19zYl9pbmZvICpzYmkpOwo+PiAgIHVuc2lnbmVkIGxvbmcgZjJmc19zaHJpbmtfY2Fj aGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4pOwo+Pgo+PiArI2RlZmluZSBERUZfRElS VFlfQ0FDSEVfVElNRU9VVCA1MDAwCj4+ICsKPj4gK3N0cnVjdCBmMmZzX2NhY2hlX2t0aHJlYWQg ewo+PiArICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2FjaGVfd2JfdGFzazsKPj4gKyAgICAg ICB3YWl0X3F1ZXVlX2hlYWRfdCBjYWNoZV93Yl93cTsKPj4gKyAgICAgICBhdG9taWNfdCBjYWNo ZV93Yl90cmlnZ2VyOwo+IG5vdCB1c2VkPwo+IHRoYW5rcyEKPj4gKyAgICAgICB1bnNpZ25lZCBp bnQgY2FjaGVfd2JfaW50ZXJ2YWw7Cj4+ICt9Owo+PiArCj4+ICtpbnQgZjJmc19zdGFydF9jYWNo ZV93Yl90aHJlYWQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKTsKPj4gK3ZvaWQgZjJmc19zdG9w X2NhY2hlX3diX3RocmVhZChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpOwo+PiArCj4+ICAgI2Vu ZGlmIC8qIF9MSU5VWF9GMkZTX0NBQ0hFX0ggKi8KPj4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZjJm cy5oIGIvZnMvZjJmcy9mMmZzLmgKPj4gaW5kZXggODVjNGJmNDBiNGFhLi5jMGY4MmI2M2Q3MzIg MTAwNjQ0Cj4+IC0tLSBhL2ZzL2YyZnMvZjJmcy5oCj4+ICsrKyBiL2ZzL2YyZnMvZjJmcy5oCj4+ IEBAIC0yMTEwLDYgKzIxMTAsOSBAQCBzdHJ1Y3QgZjJmc19zYl9pbmZvIHsKPj4KPj4gICAgICAg ICAgLyogZjJmcyBpbnRlcm5hbCBjYWNoZSAqLwo+PiAgICAgICAgICBzdHJ1Y3QgZjJmc19jYWNo ZWRfYmxvY2tfbGlzdCBtZXRhX2Jsb2NrczsKPj4gKwo+PiArICAgICAgIC8qIGludGVybmFsIGNh Y2hlIGZsdXNoIHRocmVhZCAqLwo+PiArICAgICAgIHN0cnVjdCBmMmZzX2NhY2hlX2t0aHJlYWQg Y2FjaGVfdGhyZWFkOwo+PiAgIH07Cj4+Cj4+ICAgLyogRGVmaW5pdGlvbnMgdG8gYWNjZXNzIGYy ZnNfc2JfaW5mbyAqLwo+PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9zdXBlci5jIGIvZnMvZjJmcy9z dXBlci5jCj4+IGluZGV4IGI3MzFiOWJiN2I1NC4uNTE2YjRlZTEyNTY0IDEwMDY0NAo+PiAtLS0g YS9mcy9mMmZzL3N1cGVyLmMKPj4gKysrIGIvZnMvZjJmcy9zdXBlci5jCj4+IEBAIC0yMDM5LDYg KzIwMzksNyBAQCBzdGF0aWMgdm9pZCBmMmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiKQo+PiAgICAgICAgICAgKiBmbHVzaCBhbGwgaXNzdWVkIGNoZWNrcG9pbnRzIGFuZCBzdG9w IGNoZWNrcG9pbnQgaXNzdWUgdGhyZWFkLgo+PiAgICAgICAgICAgKiBhZnRlciB0aGVuLCBhbGwg Y2hlY2twb2ludHMgc2hvdWxkIGJlIGRvbmUgYnkgZWFjaCBwcm9jZXNzIGNvbnRleHQuCj4+ICAg ICAgICAgICAqLwo+PiArICAgICAgIGYyZnNfc3RvcF9jYWNoZV93Yl90aHJlYWQoc2JpKTsKPj4g ICAgICAgICAgZjJmc19zdG9wX2NrcHRfdGhyZWFkKHNiaSk7Cj4+Cj4+ICAgICAgICAgIC8qCj4+ IEBAIC0yODQ1LDYgKzI4NDYsNyBAQCBzdGF0aWMgaW50IF9fZjJmc19yZW1vdW50KHN0cnVjdCBm c19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKPj4gICAgICAgICAgdW5zaWdu ZWQgaW50IGZsYWdzID0gZmMtPnNiX2ZsYWdzOwo+PiAgICAgICAgICBpbnQgZXJyOwo+PiAgICAg ICAgICBib29sIG5lZWRfcmVzdGFydF9nYyA9IGZhbHNlLCBuZWVkX3N0b3BfZ2MgPSBmYWxzZTsK Pj4gKyAgICAgICBib29sIG5lZWRfcmVzdGFydF93YiA9IGZhbHNlLCBuZWVkX3N0b3Bfd2IgPSBm YWxzZTsKPj4gICAgICAgICAgYm9vbCBuZWVkX3Jlc3RhcnRfZmx1c2ggPSBmYWxzZSwgbmVlZF9z dG9wX2ZsdXNoID0gZmFsc2U7Cj4+ICAgICAgICAgIGJvb2wgbmVlZF9yZXN0YXJ0X2Rpc2NhcmQg PSBmYWxzZSwgbmVlZF9zdG9wX2Rpc2NhcmQgPSBmYWxzZTsKPj4gICAgICAgICAgYm9vbCBuZWVk X2VuYWJsZV9jaGVja3BvaW50ID0gZmFsc2UsIG5lZWRfZGlzYWJsZV9jaGVja3BvaW50ID0gZmFs c2U7Cj4+IEBAIC0zMDA0LDYgKzMwMDYsMTggQEAgc3RhdGljIGludCBfX2YyZnNfcmVtb3VudChz dHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCj4+ICAgICAgICAg ICAgICAgICAgbmVlZF9zdG9wX2djID0gdHJ1ZTsKPj4gICAgICAgICAgfQo+Pgo+PiArICAgICAg IGlmIChmbGFncyAmIFNCX1JET05MWSkgewo+PiArICAgICAgICAgICAgICAgaWYgKHNiaS0+Y2Fj aGVfdGhyZWFkLmNhY2hlX3diX3Rhc2spIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZjJm c19zdG9wX2NhY2hlX3diX3RocmVhZChzYmkpOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBu ZWVkX3Jlc3RhcnRfd2IgPSB0cnVlOwo+PiArICAgICAgICAgICAgICAgfQo+PiArICAgICAgIH0g ZWxzZSBpZiAoIXNiaS0+Y2FjaGVfdGhyZWFkLmNhY2hlX3diX3Rhc2spIHsKPj4gKyAgICAgICAg ICAgICAgIGVyciA9IGYyZnNfc3RhcnRfY2FjaGVfd2JfdGhyZWFkKHNiaSk7Cj4+ICsgICAgICAg ICAgICAgICBpZiAoZXJyKQo+PiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc3RvcmVf Z2M7Cj4+ICsgICAgICAgICAgICAgICBuZWVkX3N0b3Bfd2IgPSB0cnVlOwo+PiArICAgICAgIH0K Pj4gKwo+PiAgICAgICAgICBpZiAoZmxhZ3MgJiBTQl9SRE9OTFkpIHsKPj4gICAgICAgICAgICAg ICAgICBzeW5jX2lub2Rlc19zYihzYik7Cj4+Cj4+IEBAIC0zMDExLDcgKzMwMjUsNyBAQCBzdGF0 aWMgaW50IF9fZjJmc19yZW1vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVy X2Jsb2NrICpzYikKPj4gICAgICAgICAgICAgICAgICBzZXRfc2JpX2ZsYWcoc2JpLCBTQklfSVNf Q0xPU0UpOwo+PiAgICAgICAgICAgICAgICAgIGVyciA9IGYyZnNfc3luY19mcyhzYiwgMSk7Cj4+ ICAgICAgICAgICAgICAgICAgaWYgKGVycikKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgZ290 byByZXN0b3JlX2djOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc3RvcmVfd2I7 Cj4+ICAgICAgICAgICAgICAgICAgY2xlYXJfc2JpX2ZsYWcoc2JpLCBTQklfSVNfQ0xPU0UpOwo+ PiAgICAgICAgICB9Cj4+Cj4+IEBAIC0zMDI2LDcgKzMwNDAsNyBAQCBzdGF0aWMgaW50IF9fZjJm c19yZW1vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikK Pj4gICAgICAgICAgfSBlbHNlIHsKPj4gICAgICAgICAgICAgICAgICBlcnIgPSBmMmZzX2NyZWF0 ZV9mbHVzaF9jbWRfY29udHJvbChzYmkpOwo+PiAgICAgICAgICAgICAgICAgIGlmIChlcnIpCj4+ IC0gICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzdG9yZV9nYzsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgZ290byByZXN0b3JlX3diOwo+PiAgICAgICAgICAgICAgICAgIG5lZWRfc3Rv cF9mbHVzaCA9IHRydWU7Cj4+ICAgICAgICAgIH0KPj4KPj4gQEAgLTMxMjMsNiArMzEzNywxMyBA QCBzdGF0aWMgaW50IF9fZjJmc19yZW1vdW50KHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0 IHN1cGVyX2Jsb2NrICpzYikKPj4gICAgICAgICAgICAgICAgICBjbGVhcl9vcHQoc2JpLCBGTFVT SF9NRVJHRSk7Cj4+ICAgICAgICAgICAgICAgICAgZjJmc19kZXN0cm95X2ZsdXNoX2NtZF9jb250 cm9sKHNiaSwgZmFsc2UpOwo+PiAgICAgICAgICB9Cj4+ICtyZXN0b3JlX3diOgo+PiArICAgICAg IGlmIChuZWVkX3Jlc3RhcnRfd2IpIHsKPj4gKyAgICAgICAgICAgICAgIGlmIChmMmZzX3N0YXJ0 X2NhY2hlX3diX3RocmVhZChzYmkpKQo+PiArICAgICAgICAgICAgICAgICAgICAgICBmMmZzX3dh cm4oc2JpLCAiYmFja2dyb3VuZCBjYWNoZSB3cml0ZWJhY2sgdGhyZWFkIGhhcyBzdG9wcGVkIik7 Cj4+ICsgICAgICAgfSBlbHNlIGlmIChuZWVkX3N0b3Bfd2IpIHsKPj4gKyAgICAgICAgICAgICAg IGYyZnNfc3RvcF9jYWNoZV93Yl90aHJlYWQoc2JpKTsKPj4gKyAgICAgICB9Cj4+ICAgcmVzdG9y ZV9nYzoKPj4gICAgICAgICAgaWYgKG5lZWRfcmVzdGFydF9nYykgewo+PiAgICAgICAgICAgICAg ICAgIGlmIChmMmZzX3N0YXJ0X2djX3RocmVhZChzYmkpKQo+PiBAQCAtNTUyOSw2ICs1NTUwLDEy IEBAIHN0YXRpYyBpbnQgZjJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0 cnVjdCBmc19jb250ZXh0ICpmYykKPj4gICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3lu Y19mcmVlX21ldGE7Cj4+ICAgICAgICAgIH0KPj4KPj4gKyAgICAgICBpZiAoIWYyZnNfcmVhZG9u bHkoc2IpKSB7Cj4+ICsgICAgICAgICAgICAgICBlcnIgPSBmMmZzX3N0YXJ0X2NhY2hlX3diX3Ro cmVhZChzYmkpOwo+PiArICAgICAgICAgICAgICAgaWYgKGVycikKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgZ290byBzdG9wX2djX3RocmVhZDsKPj4gKyAgICAgICB9Cj4+ICsKPj4gICAgICAg ICAgLyogcmVjb3ZlciBicm9rZW4gc3VwZXJibG9jayAqLwo+PiAgICAgICAgICBpZiAocmVjb3Zl cnkpIHsKPj4gICAgICAgICAgICAgICAgICBlcnIgPSBmMmZzX2NvbW1pdF9zdXBlcihzYmksIHRy dWUpOwo+PiBAQCAtNTU1MSw2ICs1NTc4LDggQEAgc3RhdGljIGludCBmMmZzX2ZpbGxfc3VwZXIo c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQo+PiAgICAgICAg ICBzYmktPnVtb3VudF9sb2NrX2hvbGRlciA9IE5VTEw7Cj4+ICAgICAgICAgIHJldHVybiAwOwo+ Pgo+PiArc3RvcF9nY190aHJlYWQ6Cj4+ICsgICAgICAgZjJmc19zdG9wX2djX3RocmVhZChzYmkp Owo+PiAgIHN5bmNfZnJlZV9tZXRhOgo+PiAgICAgICAgICAvKiBzYWZlIHRvIGZsdXNoIGFsbCB0 aGUgZGF0YSAqLwo+PiAgICAgICAgICBzeW5jX2ZpbGVzeXN0ZW0oc2JpLT5zYik7Cj4+IGRpZmYg LS1naXQgYS9mcy9mMmZzL3N5c2ZzLmMgYi9mcy9mMmZzL3N5c2ZzLmMKPj4gaW5kZXggYWFjYTll ZDliMTY5Li5hZDI1NzMzZTMyYzAgMTAwNjQ0Cj4+IC0tLSBhL2ZzL2YyZnMvc3lzZnMuYwo+PiAr KysgYi9mcy9mMmZzL3N5c2ZzLmMKPj4gQEAgLTQwLDYgKzQwLDcgQEAgZW51bSB7Cj4+ICAgICAg ICAgIFJFU0VSVkVEX0JMT0NLUywgICAgICAgIC8qIHN0cnVjdCBmMmZzX3NiX2luZm8gKi8KPj4g ICAgICAgICAgQ1BSQ19JTkZPLCAgICAgIC8qIHN0cnVjdCBja3B0X3JlcV9jb250cm9sICovCj4+ ICAgICAgICAgIEFUR0NfSU5GTywgICAgICAvKiBzdHJ1Y3QgYXRnY19tYW5hZ2VtZW50ICovCj4+ ICsgICAgICAgV0JfVEhSRUFELCAgICAgIC8qIHN0cnVjdCBmMmZzX2NhY2hlX2t0aHJlYWQgKi8K Pj4gICB9Owo+Pgo+PiAgIHN0YXRpYyBjb25zdCBjaGFyICpnY19tb2RlX25hbWVzW01BWF9HQ19N T0RFXSA9IHsKPj4gQEAgLTk4LDYgKzk5LDggQEAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKl9fc3Ry dWN0X3B0cihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIGludCBzdHJ1Y3RfdHlwZSkKPj4gICAg ICAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikmc2JpLT5jcHJjX2luZm87Cj4+ ICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdF90eXBlID09IEFUR0NfSU5GTykKPj4gICAgICAgICAg ICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikmc2JpLT5hbTsKPj4gKyAgICAgICBlbHNl IGlmIChzdHJ1Y3RfdHlwZSA9PSBXQl9USFJFQUQpCj4+ICsgICAgICAgICAgICAgICByZXR1cm4g KHVuc2lnbmVkIGNoYXIgKikmc2JpLT5jYWNoZV90aHJlYWQ7Cj4+ICAgICAgICAgIHJldHVybiBO VUxMOwo+PiAgIH0KPj4KPj4gQEAgLTEwMDgsNyArMTAxMSw4IEBAIHN0YXRpYyBzc2l6ZV90IGYy ZnNfc2JpX3N0b3JlKHN0cnVjdCBmMmZzX2F0dHIgKmEsCj4+ICAgICAgICAgIGJvb2wgZ2NfZW50 cnkgPSAoIXN0cmNtcChhLT5hdHRyLm5hbWUsICJnY191cmdlbnQiKSB8fAo+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEtPnN0cnVjdF90eXBlID09IEdDX1RIUkVB RCk7Cj4+ICAgICAgICAgIGJvb2wgdGhyZWFkX2VudHJ5ID0gIXN0cmNtcChhLT5hdHRyLm5hbWUs ICJja3B0X3RocmVhZF9pb3ByaW8iKSB8fAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAhc3Ry Y21wKGEtPmF0dHIubmFtZSwgImNyaXRpY2FsX3Rhc2tfcHJpb3JpdHkiKTsKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIXN0cmNtcChhLT5hdHRyLm5hbWUsICJjcml0aWNhbF90YXNrX3ByaW9y aXR5IikgfHwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIXN0cmNtcChhLT5hdHRyLm5hbWUs ICJjYWNoZV93Yl9pbnRlcnZhbCIpOwo+Pgo+PiAgICAgICAgICBpZiAoZ2NfZW50cnkgfHwgdGhy ZWFkX2VudHJ5KSB7Cj4+ICAgICAgICAgICAgICAgICAgaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygm c2JpLT5zYi0+c191bW91bnQpKQo+PiBAQCAtMTIxOCw2ICsxMjIyLDkgQEAgc3RhdGljIHN0cnVj dCBmMmZzX2F0dHIgZjJmc19hdHRyXyMjbmFtZSA9IF9fQVRUUihuYW1lLCAwNDQ0LCBuYW1lIyNf c2hvdywgTlVMTCkKPj4gICAjZGVmaW5lIEFUR0NfSU5GT19SV19BVFRSKG5hbWUsIGVsbmFtZSkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gICAgICAgICAgRjJGU19SV19BVFRS KEFUR0NfSU5GTywgYXRnY19tYW5hZ2VtZW50LCBuYW1lLCBlbG5hbWUpCj4+Cj4+ICsjZGVmaW5l IFdCX1RIUkVBRF9SV19BVFRSKG5hbWUsIGVsbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPj4gKyAgICAgICBGMkZTX1JXX0FUVFIoV0JfVEhSRUFELCBmMmZzX2NhY2hlX2t0 aHJlYWQsIG5hbWUsIGVsbmFtZSkKPj4gKwo+PiAgIC8qIEdDX1RIUkVBRCBBVFRSICovCj4+ICAg R0NfVEhSRUFEX1JXX0FUVFIoZ2NfdXJnZW50X3NsZWVwX3RpbWUsIHVyZ2VudF9zbGVlcF90aW1l KTsKPj4gICBHQ19USFJFQURfUldfQVRUUihnY19taW5fc2xlZXBfdGltZSwgbWluX3NsZWVwX3Rp bWUpOwo+PiBAQCAtMTM0Nyw2ICsxMzU0LDkgQEAgQVRHQ19JTkZPX1JXX0FUVFIoYXRnY19jYW5k aWRhdGVfY291bnQsIG1heF9jYW5kaWRhdGVfY291bnQpOwo+PiAgIEFUR0NfSU5GT19SV19BVFRS KGF0Z2NfYWdlX3dlaWdodCwgYWdlX3dlaWdodCk7Cj4+ICAgQVRHQ19JTkZPX1JXX0FUVFIoYXRn Y19hZ2VfdGhyZXNob2xkLCBhZ2VfdGhyZXNob2xkKTsKPj4KPj4gKy8qIFdCX1RIUkVBRCBBVFRS ICovCj4+ICtXQl9USFJFQURfUldfQVRUUihjYWNoZV93Yl9pbnRlcnZhbCwgY2FjaGVfd2JfaW50 ZXJ2YWwpOwo+PiArCj4+ICAgRjJGU19HRU5FUkFMX1JPX0FUVFIoZGlydHlfc2VnbWVudHMpOwo+ PiAgIEYyRlNfR0VORVJBTF9ST19BVFRSKGZyZWVfc2VnbWVudHMpOwo+PiAgIEYyRlNfR0VORVJB TF9ST19BVFRSKG92cF9zZWdtZW50cyk7Cj4+IEBAIC0xNTMzLDYgKzE1NDMsNyBAQCBzdGF0aWMg c3RydWN0IGF0dHJpYnV0ZSAqZjJmc19hdHRyc1tdID0gewo+PiAgICAgICAgICBBVFRSX0xJU1Qo bG9ja19kdXJhdGlvbl9wcmlvcml0eSksCj4+ICAgICAgICAgIEFUVFJfTElTVChhZGp1c3RfbG9j a19wcmlvcml0eSksCj4+ICAgICAgICAgIEFUVFJfTElTVChjcml0aWNhbF90YXNrX3ByaW9yaXR5 KSwKPj4gKyAgICAgICBBVFRSX0xJU1QoY2FjaGVfd2JfaW50ZXJ2YWwpLAo+PiAgICAgICAgICBO VUxMLAo+PiAgIH07Cj4+ICAgQVRUUklCVVRFX0dST1VQUyhmMmZzKTsKPj4gLS0KPj4gMi40OS4w Cj4+Cj4+Cj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4+IExpbnV4LWYyZnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IExpbnV4LWYyZnMtZGV2ZWxA bGlzdHMuc291cmNlZm9yZ2UubmV0Cj4+IGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xp c3RzL2xpc3RpbmZvL2xpbnV4LWYyZnMtZGV2ZWwKCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5nIGxpc3QKTGlu dXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vm b3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbGludXgtZjJmcy1kZXZlbAo=