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 C402A3806D9 for ; Tue, 14 Jul 2026 02:38:30 +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=1783996712; cv=none; b=UgqIq+axF3Ripqmu/O4TrI4UFWz6O6EOIWqTrFOwzYaU/kgnlurAv/HPA7IKFlqfT88si2EjGiMZ2ZK4eSJpWqGmwKQycHXsBFASm3NbczCx2HUB0LACp9BREtPNM2kxPpyZTzo5vgfUNj3utzp6ZldXA6TYaTXw4fMhj7nID+Y= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783996712; c=relaxed/simple; bh=hx8H/qeAwABbEsoxlb3RrXLDnyio0J49POyy9EV9sig=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Opv1O2YZrodfkfOdSh02a6o0HwAXqvDAoWPZ2hHvWQ/UoBVa6XxuSmTzrJfRoA5xPGjFLksnx51vWerHA4EactNVCcj01EtjOL7JlqJ0cTHAu/Jgl11SUouCxqWn3XDGqEdi4OwOpMqUR3vc3mpL2hbxwop6Pwr6REd9oVuf1hk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Uik5BOEz; 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="Uik5BOEz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A2741F000E9; Tue, 14 Jul 2026 02:38:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783996710; bh=Fw+xe3f7RClCVgszAuH9YldIuwV/gLDcxiThpIVhvBY=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=Uik5BOEzDVrmkBBI9MSzMtKsCAiklLh3MzH4A7U2PJVHHg1Rmmb8ieS4G7wC8Bxnz XyK8Ii8GQPjqGSghEFMcqNbE7mk5iu+Fwe88brq1tjNU8PGh+PcoBi1uJdWdm31F5M 08JcxMRzctSe9PZv4ueRhJMNW8s/C71t3etLR2/FwhnUlJHQVQNknfqB4rX5zau6X1 6f8ebMgCyqVbkhTQvQoUtkUf0uSVvJ1mZ5gwdJZsixgdyED34SJTWjkFQ7ZtCKGIaU qKYhfFyZszAoU+dS0n3o7HudbaQL31amyGQ7PCwmPqk6t6XLuLpKz7WIUzEYVc7/Tg nj7Wj9QnY6iOg== Date: Tue, 14 Jul 2026 02:38:28 +0000 From: Jaegeuk Kim To: Cen Zhang Cc: Chao Yu , linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: Re: [PATCH v7] f2fs: protect gc task pointer during teardown Message-ID: References: <20260630142046.3145107-1-rollkingzzc@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Could you please post the original patch again? Somehow I can't find it. On 07/08, Cen Zhang wrote: > Hi all, > > This is a gentle ping on this patch. > > I would really appreciate any feedback when you have a chance. > > Best regards, > Zhang Cen > > Zhang Cen 于2026年6月30日周二 22:20写道: > > > > This patch is based on the preceding patch "f2fs: embed > > f2fs_gc_kthread in f2fs_sb_info", which gives the GC waitqueues and > > thread tunables superblock lifetime. With that container lifetime fixed, > > f2fs_gc_task remains the running-state marker and the task_struct pointer > > that needs separate lifetime protection. > > > > During shutdown, f2fs_stop_gc_thread() stops the GC task and wakes > > GC_MERGE foreground waiters while f2fs_balance_fs() can concurrently > > queue on gc_th->fggc_wq. The preceding embedded-gc_thread patch keeps > > that waitqueue storage alive for the superblock lifetime; this patch > > protects the remaining f2fs_gc_task pointer by publishing and detaching > > it under gc_task_lock, and by making sysfs users that dereference the > > task hold the same lock. > > > > The buggy scenario involves two paths, with each column showing the > > order within that path: > > > > foreground f2fs_balance_fs() caller: shutdown path: > > 1. observes no checkpoint error 1. sets CP_ERROR_FLAG > > 2. snapshots sbi->gc_thread 2. enters f2fs_stop_gc_thread() > > 3. queues on gc_th->fggc_wq 3. stops gc_th->f2fs_gc_task > > 4. wakes gc_wait_queue_head 4. wakes gc_th->fggc_wq > > 5. sleeps for foreground GC 5. frees gc_th in the old layout > > 6. finish_wait() touches fggc_wq > > > > GC_MERGE does not keep independent work_struct items that shutdown can > > cancel. Its pending foreground GC requests are waitqueue waiters. Drain > > them by withdrawing the GC task pointer, stopping the task, waking > > gc_th->fggc_wq, and leaving each waiter to remove its own wait entry > > with finish_wait(). > > > > Add gc_task_lock to struct f2fs_gc_kthread and use f2fs_update_gc_task() > > to publish the GC task only after the new kthread has been created and > > its nice value has been set. The start path uses kthread_create() so the > > task is not woken until after f2fs_gc_task is visible to waiters. The > > stop path updates f2fs_gc_task to NULL under the same lock before > > kthread_stop(), so later readers see that no new foreground GC work > > should be handed to the background thread. > > > > f2fs_balance_fs() also rechecks f2fs_gc_task after prepare_to_wait(). If > > the GC task has already been withdrawn, the caller removes its wait entry > > without waking the GC thread or sleeping for new foreground GC work. Thus > > shutdown drains already queued waiters and stops accepting new foreground > > GC work once the task pointer is withdrawn. > > > > Task pointer users are protected separately from the embedded container > > lifetime. A sysfs critical_task_priority store now checks f2fs_gc_task > > and calls set_user_nice() under gc_task_lock. Boolean running-state > > checks that do not dereference the task_struct use READ_ONCE(). > > > > One observed report was: > > > > BUG: KASAN: slab-use-after-free in finish_wait+0x276/0x290 > > Write of size 8 at addr ffff8881150819b8 by task dd/802 > > The buggy address belongs to the object at ffff888115081900 which > > belongs to the cache kmalloc-256 of size 256 > > The buggy address is located 184 bytes inside of freed 256-byte region > > Call trace: > > finish_wait() > > f2fs_balance_fs() > > f2fs_write_single_data_page() > > f2fs_write_cache_pages() > > __f2fs_write_data_pages() > > do_writepages() > > filemap_fdatawrite_wbc() > > __filemap_fdatawrite_range() > > file_write_and_wait_range() > > f2fs_do_sync_file() > > f2fs_sync_file() > > do_fsync() > > Freed by task stack: > > kfree() > > f2fs_stop_gc_thread() > > f2fs_do_shutdown() > > f2fs_shutdown() > > fs_bdev_mark_dead() > > > > Fixes: 5911d2d1d1a3 ("f2fs: introduce gc_merge mount option") > > Assisted-by: Codex:gpt-5.5 > > Signed-off-by: Zhang Cen > > --- > > Based on: > > - [PATCH] f2fs: embed f2fs_gc_kthread in f2fs_sb_info > > > > fs/f2fs/f2fs.h | 15 +++++++++++++++ > > fs/f2fs/gc.c | 22 +++++++++++++--------- > > fs/f2fs/segment.c | 16 ++++++++++------ > > fs/f2fs/super.c | 5 +++-- > > fs/f2fs/sysfs.c | 15 +++++++++------ > > 5 files changed, 50 insertions(+), 23 deletions(-) > > > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > > index 8011bbdf2c68..1aa8f8adddaa 100644 > > --- a/fs/f2fs/f2fs.h > > +++ b/fs/f2fs/f2fs.h > > @@ -19,6 +19,7 @@ > > #include > > #include > > #include > > +#include > > #include > > #include > > #include > > @@ -1750,6 +1751,7 @@ struct decompress_io_ctx { > > > > struct f2fs_gc_kthread { > > struct task_struct *f2fs_gc_task; > > + spinlock_t gc_task_lock; /* protects f2fs_gc_task */ > > wait_queue_head_t gc_wait_queue_head; > > > > /* for gc sleep time */ > > @@ -1775,6 +1777,19 @@ struct f2fs_gc_kthread { > > unsigned int boost_gc_greedy; > > }; > > > > +static inline struct task_struct * > > +f2fs_update_gc_task(struct f2fs_gc_kthread *gc_th, struct task_struct *task) > > +{ > > + struct task_struct *old_task; > > + > > + spin_lock(&gc_th->gc_task_lock); > > + old_task = READ_ONCE(gc_th->f2fs_gc_task); > > + WRITE_ONCE(gc_th->f2fs_gc_task, task); > > + spin_unlock(&gc_th->gc_task_lock); > > + > > + return old_task; > > +} > > + > > struct f2fs_sb_info { > > struct super_block *sb; /* pointer to VFS super block */ > > struct proc_dir_entry *s_proc; /* proc entry */ > > diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c > > index e8244b92d8ce..7253a920153b 100644 > > --- a/fs/f2fs/gc.c > > +++ b/fs/f2fs/gc.c > > @@ -194,6 +194,7 @@ static int gc_thread_func(void *data) > > int f2fs_start_gc_thread(struct f2fs_sb_info *sbi) > > { > > struct f2fs_gc_kthread *gc_th = &sbi->gc_thread; > > + struct task_struct *task; > > dev_t dev = sbi->sb->s_bdev->bd_dev; > > > > gc_th->urgent_sleep_time = DEF_GC_THREAD_URGENT_SLEEP_TIME; > > @@ -219,26 +220,29 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi) > > > > init_waitqueue_head(&gc_th->gc_wait_queue_head); > > init_waitqueue_head(&gc_th->fggc_wq); > > - gc_th->f2fs_gc_task = kthread_run(gc_thread_func, sbi, > > - "f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev)); > > - if (IS_ERR(gc_th->f2fs_gc_task)) { > > - int err = PTR_ERR(gc_th->f2fs_gc_task); > > + task = kthread_create(gc_thread_func, sbi, "f2fs_gc-%u:%u", > > + MAJOR(dev), MINOR(dev)); > > + if (IS_ERR(task)) { > > + int err = PTR_ERR(task); > > > > - gc_th->f2fs_gc_task = NULL; > > return err; > > } > > > > - set_user_nice(gc_th->f2fs_gc_task, > > - PRIO_TO_NICE(sbi->critical_task_priority)); > > + set_user_nice(task, PRIO_TO_NICE(sbi->critical_task_priority)); > > + f2fs_update_gc_task(gc_th, task); > > + wake_up_process(task); > > return 0; > > } > > > > void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi) > > { > > struct f2fs_gc_kthread *gc_th = &sbi->gc_thread; > > + struct task_struct *task; > > > > - kthread_stop(gc_th->f2fs_gc_task); > > - gc_th->f2fs_gc_task = NULL; > > + task = f2fs_update_gc_task(gc_th, NULL); > > + if (!task) > > + return; > > + kthread_stop(task); > > wake_up_all(&gc_th->fggc_wq); > > } > > > > diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c > > index 0b706568b034..e6e67c233e27 100644 > > --- a/fs/f2fs/segment.c > > +++ b/fs/f2fs/segment.c > > @@ -425,6 +425,8 @@ int f2fs_commit_atomic_write(struct inode *inode) > > */ > > void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need) > > { > > + struct f2fs_gc_kthread *gc_th = &sbi->gc_thread; > > + > > if (f2fs_cp_error(sbi)) > > return; > > > > @@ -452,14 +454,16 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need) > > f2fs_submit_merged_write(sbi, DATA); > > f2fs_submit_all_merged_ipu_writes(sbi); > > > > - if (test_opt(sbi, GC_MERGE) && sbi->gc_thread.f2fs_gc_task) { > > + if (test_opt(sbi, GC_MERGE) && READ_ONCE(gc_th->f2fs_gc_task)) { > > DEFINE_WAIT(wait); > > > > - prepare_to_wait(&sbi->gc_thread.fggc_wq, &wait, > > - TASK_UNINTERRUPTIBLE); > > - wake_up(&sbi->gc_thread.gc_wait_queue_head); > > - io_schedule(); > > - finish_wait(&sbi->gc_thread.fggc_wq, &wait); > > + prepare_to_wait(&gc_th->fggc_wq, &wait, > > + TASK_UNINTERRUPTIBLE); > > + if (READ_ONCE(gc_th->f2fs_gc_task)) { > > + wake_up(&gc_th->gc_wait_queue_head); > > + io_schedule(); > > + } > > + finish_wait(&gc_th->fggc_wq, &wait); > > } else { > > struct f2fs_gc_control gc_control = { > > .victim_segno = NULL_SEGNO, > > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c > > index e9ecd67a3f3b..140fffe93ea4 100644 > > --- a/fs/f2fs/super.c > > +++ b/fs/f2fs/super.c > > @@ -2943,11 +2943,11 @@ static int __f2fs_remount(struct fs_context *fc, struct super_block *sb) > > if ((flags & SB_RDONLY) || > > (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_OFF && > > !test_opt(sbi, GC_MERGE))) { > > - if (sbi->gc_thread.f2fs_gc_task) { > > + if (READ_ONCE(sbi->gc_thread.f2fs_gc_task)) { > > f2fs_stop_gc_thread(sbi); > > need_restart_gc = true; > > } > > - } else if (!sbi->gc_thread.f2fs_gc_task) { > > + } else if (!READ_ONCE(sbi->gc_thread.f2fs_gc_task)) { > > err = f2fs_start_gc_thread(sbi); > > if (err) > > goto restore_opts; > > @@ -5051,6 +5051,7 @@ static int f2fs_fill_super(struct super_block *sb, struct fs_context *fc) > > spin_lock_init(&sbi->inode_lock[i]); > > } > > mutex_init(&sbi->flush_lock); > > + spin_lock_init(&sbi->gc_thread.gc_task_lock); > > > > /* set a block size */ > > if (unlikely(!sb_set_blocksize(sb, F2FS_BLKSIZE))) { > > diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c > > index be92c05a5420..c83cd1d3ede2 100644 > > --- a/fs/f2fs/sysfs.c > > +++ b/fs/f2fs/sysfs.c > > @@ -664,7 +664,7 @@ static ssize_t __sbi_store(struct f2fs_attr *a, > > sbi->gc_mode = GC_NORMAL; > > } else if (t == 1) { > > sbi->gc_mode = GC_URGENT_HIGH; > > - if (sbi->gc_thread.f2fs_gc_task) { > > + if (READ_ONCE(sbi->gc_thread.f2fs_gc_task)) { > > sbi->gc_thread.gc_wake = true; > > wake_up_interruptible_all( > > &sbi->gc_thread.gc_wait_queue_head); > > @@ -674,7 +674,7 @@ static ssize_t __sbi_store(struct f2fs_attr *a, > > sbi->gc_mode = GC_URGENT_LOW; > > } else if (t == 3) { > > sbi->gc_mode = GC_URGENT_MID; > > - if (sbi->gc_thread.f2fs_gc_task) { > > + if (READ_ONCE(sbi->gc_thread.f2fs_gc_task)) { > > sbi->gc_thread.gc_wake = true; > > wake_up_interruptible_all( > > &sbi->gc_thread.gc_wait_queue_head); > > @@ -981,17 +981,20 @@ static ssize_t __sbi_store(struct f2fs_attr *a, > > } > > > > if (!strcmp(a->attr.name, "critical_task_priority")) { > > + int nice; > > + > > if (t < NICE_TO_PRIO(MIN_NICE) || t > NICE_TO_PRIO(MAX_NICE)) > > return -EINVAL; > > if (!capable(CAP_SYS_NICE)) > > return -EPERM; > > sbi->critical_task_priority = t; > > + nice = PRIO_TO_NICE(sbi->critical_task_priority); > > if (sbi->cprc_info.f2fs_issue_ckpt) > > - set_user_nice(sbi->cprc_info.f2fs_issue_ckpt, > > - PRIO_TO_NICE(sbi->critical_task_priority)); > > + set_user_nice(sbi->cprc_info.f2fs_issue_ckpt, nice); > > + spin_lock(&sbi->gc_thread.gc_task_lock); > > if (sbi->gc_thread.f2fs_gc_task) > > - set_user_nice(sbi->gc_thread.f2fs_gc_task, > > - PRIO_TO_NICE(sbi->critical_task_priority)); > > + set_user_nice(sbi->gc_thread.f2fs_gc_task, nice); > > + spin_unlock(&sbi->gc_thread.gc_task_lock); > > return count; > > } > > > > -- > > 2.43.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 097B0C43458 for ; Tue, 14 Jul 2026 02:38:46 +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:MIME-Version:References: Message-ID:To:Date:Sender:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=uGtClCG2XFeOp9yCCAFO8leMwPu8fe2Fk+F9OtoKUmc=; b=TnvF6XDdGEQO3aUyV2m9B6LdtQ +hENXDa51pmNqjtTwfWZWCCdwDE9UBgOzgZ9pn2QAw/9XxLp1ogbj9dgfpxfN3labFErxHRHXsLKu gqPFYCbxC88jVS79YVXmexVLGmmRJ7CvarqNkXR73PpwoQPaAcn2kzCu1igLCflVmYRQ=; Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1wjT2i-0005fp-Mv; Tue, 14 Jul 2026 02:38:44 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1wjT2g-0005ey-Dl for linux-f2fs-devel@lists.sourceforge.net; Tue, 14 Jul 2026 02:38:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=In-Reply-To:Content-Transfer-Encoding:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: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=Fw+xe3f7RClCVgszAuH9YldIuwV/gLDcxiThpIVhvBY=; b=MeTaWqAY3dQikeCQj4LBzsn4hi 6G4b37g2F1Pb5tE8lIOUF9EBk79sOEYzClvv8NwwveeWvG9Srjr+aoEAmI8C04bGO2HP01vtZZRFa 5n3gA62d4xjt4eUBldR1W/f0sDaEdTxrK4pD4uwfTyxWuHoH9/0Q52c/kRfkdZSwaum4=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=In-Reply-To:Content-Transfer-Encoding:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date: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=Fw+xe3f7RClCVgszAuH9YldIuwV/gLDcxiThpIVhvBY=; b=CTeNnS5LPoWyJoe8CH37H2rp99 f7lLXqGdhb5ZyKlKf4PgHdqDp6zpaJ4xK2eooNVuDwiMhEY+1XLkc5GT72Jy6WBUiIgCUtTEF/sYw cJkauo2Yk7HmtCM1BlzMq+VjDhqzrV3gi8xzkPwUCLA//1uvLT0iOFOiqQM6XXyZ/W8o=; 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 1wjT2f-0008Ul-Dz for linux-f2fs-devel@lists.sourceforge.net; Tue, 14 Jul 2026 02:38:42 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id A979360120; Tue, 14 Jul 2026 02:38:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A2741F000E9; Tue, 14 Jul 2026 02:38:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783996710; bh=Fw+xe3f7RClCVgszAuH9YldIuwV/gLDcxiThpIVhvBY=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=Uik5BOEzDVrmkBBI9MSzMtKsCAiklLh3MzH4A7U2PJVHHg1Rmmb8ieS4G7wC8Bxnz XyK8Ii8GQPjqGSghEFMcqNbE7mk5iu+Fwe88brq1tjNU8PGh+PcoBi1uJdWdm31F5M 08JcxMRzctSe9PZv4ueRhJMNW8s/C71t3etLR2/FwhnUlJHQVQNknfqB4rX5zau6X1 6f8ebMgCyqVbkhTQvQoUtkUf0uSVvJ1mZ5gwdJZsixgdyED34SJTWjkFQ7ZtCKGIaU qKYhfFyZszAoU+dS0n3o7HudbaQL31amyGQ7PCwmPqk6t6XLuLpKz7WIUzEYVc7/Tg nj7Wj9QnY6iOg== Date: Tue, 14 Jul 2026 02:38:28 +0000 To: Cen Zhang Message-ID: References: <20260630142046.3145107-1-rollkingzzc@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Headers-End: 1wjT2f-0008Ul-Dz Subject: Re: [f2fs-dev] [PATCH v7] f2fs: protect gc task pointer during teardown 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: Jaegeuk Kim via Linux-f2fs-devel Reply-To: Jaegeuk Kim Cc: 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 Q291bGQgeW91IHBsZWFzZSBwb3N0IHRoZSBvcmlnaW5hbCBwYXRjaCBhZ2Fpbj8gU29tZWhvdyBJ IGNhbid0IGZpbmQgaXQuCgpPbiAwNy8wOCwgQ2VuIFpoYW5nIHdyb3RlOgo+IEhpIGFsbCwKPiAK PiBUaGlzIGlzIGEgZ2VudGxlIHBpbmcgb24gdGhpcyBwYXRjaC4KPiAKPiBJIHdvdWxkIHJlYWxs eSBhcHByZWNpYXRlIGFueSBmZWVkYmFjayB3aGVuIHlvdSBoYXZlIGEgY2hhbmNlLgo+IAo+IEJl c3QgcmVnYXJkcywKPiBaaGFuZyBDZW4KPiAKPiBaaGFuZyBDZW4gPHJvbGxraW5nenpjQGdtYWls LmNvbT4g5LqOMjAyNuW5tDbmnIgzMOaXpeWRqOS6jCAyMjoyMOWGmemBk++8mgo+ID4KPiA+IFRo aXMgcGF0Y2ggaXMgYmFzZWQgb24gdGhlIHByZWNlZGluZyBwYXRjaCAiZjJmczogZW1iZWQKPiA+ IGYyZnNfZ2Nfa3RocmVhZCBpbiBmMmZzX3NiX2luZm8iLCB3aGljaCBnaXZlcyB0aGUgR0Mgd2Fp dHF1ZXVlcyBhbmQKPiA+IHRocmVhZCB0dW5hYmxlcyBzdXBlcmJsb2NrIGxpZmV0aW1lLiBXaXRo IHRoYXQgY29udGFpbmVyIGxpZmV0aW1lIGZpeGVkLAo+ID4gZjJmc19nY190YXNrIHJlbWFpbnMg dGhlIHJ1bm5pbmctc3RhdGUgbWFya2VyIGFuZCB0aGUgdGFza19zdHJ1Y3QgcG9pbnRlcgo+ID4g dGhhdCBuZWVkcyBzZXBhcmF0ZSBsaWZldGltZSBwcm90ZWN0aW9uLgo+ID4KPiA+IER1cmluZyBz aHV0ZG93biwgZjJmc19zdG9wX2djX3RocmVhZCgpIHN0b3BzIHRoZSBHQyB0YXNrIGFuZCB3YWtl cwo+ID4gR0NfTUVSR0UgZm9yZWdyb3VuZCB3YWl0ZXJzIHdoaWxlIGYyZnNfYmFsYW5jZV9mcygp IGNhbiBjb25jdXJyZW50bHkKPiA+IHF1ZXVlIG9uIGdjX3RoLT5mZ2djX3dxLiBUaGUgcHJlY2Vk aW5nIGVtYmVkZGVkLWdjX3RocmVhZCBwYXRjaCBrZWVwcwo+ID4gdGhhdCB3YWl0cXVldWUgc3Rv cmFnZSBhbGl2ZSBmb3IgdGhlIHN1cGVyYmxvY2sgbGlmZXRpbWU7IHRoaXMgcGF0Y2gKPiA+IHBy b3RlY3RzIHRoZSByZW1haW5pbmcgZjJmc19nY190YXNrIHBvaW50ZXIgYnkgcHVibGlzaGluZyBh bmQgZGV0YWNoaW5nCj4gPiBpdCB1bmRlciBnY190YXNrX2xvY2ssIGFuZCBieSBtYWtpbmcgc3lz ZnMgdXNlcnMgdGhhdCBkZXJlZmVyZW5jZSB0aGUKPiA+IHRhc2sgaG9sZCB0aGUgc2FtZSBsb2Nr Lgo+ID4KPiA+IFRoZSBidWdneSBzY2VuYXJpbyBpbnZvbHZlcyB0d28gcGF0aHMsIHdpdGggZWFj aCBjb2x1bW4gc2hvd2luZyB0aGUKPiA+IG9yZGVyIHdpdGhpbiB0aGF0IHBhdGg6Cj4gPgo+ID4g Zm9yZWdyb3VuZCBmMmZzX2JhbGFuY2VfZnMoKSBjYWxsZXI6ICAgc2h1dGRvd24gcGF0aDoKPiA+ ICAgMS4gb2JzZXJ2ZXMgbm8gY2hlY2twb2ludCBlcnJvciAgICAgICAgMS4gc2V0cyBDUF9FUlJP Ul9GTEFHCj4gPiAgIDIuIHNuYXBzaG90cyBzYmktPmdjX3RocmVhZCAgICAgICAgICAgMi4gZW50 ZXJzIGYyZnNfc3RvcF9nY190aHJlYWQoKQo+ID4gICAzLiBxdWV1ZXMgb24gZ2NfdGgtPmZnZ2Nf d3EgICAgICAgICAgIDMuIHN0b3BzIGdjX3RoLT5mMmZzX2djX3Rhc2sKPiA+ICAgNC4gd2FrZXMg Z2Nfd2FpdF9xdWV1ZV9oZWFkICAgICAgICAgICA0LiB3YWtlcyBnY190aC0+ZmdnY193cQo+ID4g ICA1LiBzbGVlcHMgZm9yIGZvcmVncm91bmQgR0MgICAgICAgICAgIDUuIGZyZWVzIGdjX3RoIGlu IHRoZSBvbGQgbGF5b3V0Cj4gPiAgIDYuIGZpbmlzaF93YWl0KCkgdG91Y2hlcyBmZ2djX3dxCj4g Pgo+ID4gR0NfTUVSR0UgZG9lcyBub3Qga2VlcCBpbmRlcGVuZGVudCB3b3JrX3N0cnVjdCBpdGVt cyB0aGF0IHNodXRkb3duIGNhbgo+ID4gY2FuY2VsLiBJdHMgcGVuZGluZyBmb3JlZ3JvdW5kIEdD IHJlcXVlc3RzIGFyZSB3YWl0cXVldWUgd2FpdGVycy4gRHJhaW4KPiA+IHRoZW0gYnkgd2l0aGRy YXdpbmcgdGhlIEdDIHRhc2sgcG9pbnRlciwgc3RvcHBpbmcgdGhlIHRhc2ssIHdha2luZwo+ID4g Z2NfdGgtPmZnZ2Nfd3EsIGFuZCBsZWF2aW5nIGVhY2ggd2FpdGVyIHRvIHJlbW92ZSBpdHMgb3du IHdhaXQgZW50cnkKPiA+IHdpdGggZmluaXNoX3dhaXQoKS4KPiA+Cj4gPiBBZGQgZ2NfdGFza19s b2NrIHRvIHN0cnVjdCBmMmZzX2djX2t0aHJlYWQgYW5kIHVzZSBmMmZzX3VwZGF0ZV9nY190YXNr KCkKPiA+IHRvIHB1Ymxpc2ggdGhlIEdDIHRhc2sgb25seSBhZnRlciB0aGUgbmV3IGt0aHJlYWQg aGFzIGJlZW4gY3JlYXRlZCBhbmQKPiA+IGl0cyBuaWNlIHZhbHVlIGhhcyBiZWVuIHNldC4gVGhl IHN0YXJ0IHBhdGggdXNlcyBrdGhyZWFkX2NyZWF0ZSgpIHNvIHRoZQo+ID4gdGFzayBpcyBub3Qg d29rZW4gdW50aWwgYWZ0ZXIgZjJmc19nY190YXNrIGlzIHZpc2libGUgdG8gd2FpdGVycy4gVGhl Cj4gPiBzdG9wIHBhdGggdXBkYXRlcyBmMmZzX2djX3Rhc2sgdG8gTlVMTCB1bmRlciB0aGUgc2Ft ZSBsb2NrIGJlZm9yZQo+ID4ga3RocmVhZF9zdG9wKCksIHNvIGxhdGVyIHJlYWRlcnMgc2VlIHRo YXQgbm8gbmV3IGZvcmVncm91bmQgR0Mgd29yawo+ID4gc2hvdWxkIGJlIGhhbmRlZCB0byB0aGUg YmFja2dyb3VuZCB0aHJlYWQuCj4gPgo+ID4gZjJmc19iYWxhbmNlX2ZzKCkgYWxzbyByZWNoZWNr cyBmMmZzX2djX3Rhc2sgYWZ0ZXIgcHJlcGFyZV90b193YWl0KCkuIElmCj4gPiB0aGUgR0MgdGFz ayBoYXMgYWxyZWFkeSBiZWVuIHdpdGhkcmF3biwgdGhlIGNhbGxlciByZW1vdmVzIGl0cyB3YWl0 IGVudHJ5Cj4gPiB3aXRob3V0IHdha2luZyB0aGUgR0MgdGhyZWFkIG9yIHNsZWVwaW5nIGZvciBu ZXcgZm9yZWdyb3VuZCBHQyB3b3JrLiBUaHVzCj4gPiBzaHV0ZG93biBkcmFpbnMgYWxyZWFkeSBx dWV1ZWQgd2FpdGVycyBhbmQgc3RvcHMgYWNjZXB0aW5nIG5ldyBmb3JlZ3JvdW5kCj4gPiBHQyB3 b3JrIG9uY2UgdGhlIHRhc2sgcG9pbnRlciBpcyB3aXRoZHJhd24uCj4gPgo+ID4gVGFzayBwb2lu dGVyIHVzZXJzIGFyZSBwcm90ZWN0ZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBlbWJlZGRlZCBjb250 YWluZXIKPiA+IGxpZmV0aW1lLiBBIHN5c2ZzIGNyaXRpY2FsX3Rhc2tfcHJpb3JpdHkgc3RvcmUg bm93IGNoZWNrcyBmMmZzX2djX3Rhc2sKPiA+IGFuZCBjYWxscyBzZXRfdXNlcl9uaWNlKCkgdW5k ZXIgZ2NfdGFza19sb2NrLiBCb29sZWFuIHJ1bm5pbmctc3RhdGUKPiA+IGNoZWNrcyB0aGF0IGRv IG5vdCBkZXJlZmVyZW5jZSB0aGUgdGFza19zdHJ1Y3QgdXNlIFJFQURfT05DRSgpLgo+ID4KPiA+ IE9uZSBvYnNlcnZlZCByZXBvcnQgd2FzOgo+ID4KPiA+IEJVRzogS0FTQU46IHNsYWItdXNlLWFm dGVyLWZyZWUgaW4gZmluaXNoX3dhaXQrMHgyNzYvMHgyOTAKPiA+IFdyaXRlIG9mIHNpemUgOCBh dCBhZGRyIGZmZmY4ODgxMTUwODE5YjggYnkgdGFzayBkZC84MDIKPiA+IFRoZSBidWdneSBhZGRy ZXNzIGJlbG9uZ3MgdG8gdGhlIG9iamVjdCBhdCBmZmZmODg4MTE1MDgxOTAwIHdoaWNoCj4gPiBi ZWxvbmdzIHRvIHRoZSBjYWNoZSBrbWFsbG9jLTI1NiBvZiBzaXplIDI1Ngo+ID4gVGhlIGJ1Z2d5 IGFkZHJlc3MgaXMgbG9jYXRlZCAxODQgYnl0ZXMgaW5zaWRlIG9mIGZyZWVkIDI1Ni1ieXRlIHJl Z2lvbgo+ID4gQ2FsbCB0cmFjZToKPiA+ICAgZmluaXNoX3dhaXQoKQo+ID4gICBmMmZzX2JhbGFu Y2VfZnMoKQo+ID4gICBmMmZzX3dyaXRlX3NpbmdsZV9kYXRhX3BhZ2UoKQo+ID4gICBmMmZzX3dy aXRlX2NhY2hlX3BhZ2VzKCkKPiA+ICAgX19mMmZzX3dyaXRlX2RhdGFfcGFnZXMoKQo+ID4gICBk b193cml0ZXBhZ2VzKCkKPiA+ICAgZmlsZW1hcF9mZGF0YXdyaXRlX3diYygpCj4gPiAgIF9fZmls ZW1hcF9mZGF0YXdyaXRlX3JhbmdlKCkKPiA+ICAgZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZSgp Cj4gPiAgIGYyZnNfZG9fc3luY19maWxlKCkKPiA+ICAgZjJmc19zeW5jX2ZpbGUoKQo+ID4gICBk b19mc3luYygpCj4gPiBGcmVlZCBieSB0YXNrIHN0YWNrOgo+ID4gICBrZnJlZSgpCj4gPiAgIGYy ZnNfc3RvcF9nY190aHJlYWQoKQo+ID4gICBmMmZzX2RvX3NodXRkb3duKCkKPiA+ICAgZjJmc19z aHV0ZG93bigpCj4gPiAgIGZzX2JkZXZfbWFya19kZWFkKCkKPiA+Cj4gPiBGaXhlczogNTkxMWQy ZDFkMWEzICgiZjJmczogaW50cm9kdWNlIGdjX21lcmdlIG1vdW50IG9wdGlvbiIpCj4gPiBBc3Np c3RlZC1ieTogQ29kZXg6Z3B0LTUuNQo+ID4gU2lnbmVkLW9mZi1ieTogWmhhbmcgQ2VuIDxyb2xs a2luZ3p6Y0BnbWFpbC5jb20+Cj4gPiAtLS0KPiA+IEJhc2VkIG9uOgo+ID4gLSBbUEFUQ0hdIGYy ZnM6IGVtYmVkIGYyZnNfZ2Nfa3RocmVhZCBpbiBmMmZzX3NiX2luZm8KPiA+Cj4gPiAgZnMvZjJm cy9mMmZzLmggICAgfCAxNSArKysrKysrKysrKysrKysKPiA+ICBmcy9mMmZzL2djLmMgICAgICB8 IDIyICsrKysrKysrKysrKystLS0tLS0tLS0KPiA+ICBmcy9mMmZzL3NlZ21lbnQuYyB8IDE2ICsr KysrKysrKystLS0tLS0KPiA+ICBmcy9mMmZzL3N1cGVyLmMgICB8ICA1ICsrKy0tCj4gPiAgZnMv ZjJmcy9zeXNmcy5jICAgfCAxNSArKysrKysrKystLS0tLS0KPiA+ICA1IGZpbGVzIGNoYW5nZWQs IDUwIGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9m cy9mMmZzL2YyZnMuaCBiL2ZzL2YyZnMvZjJmcy5oCj4gPiBpbmRleCA4MDExYmJkZjJjNjguLjFh YThmOGFkZGRhYSAxMDA2NDQKPiA+IC0tLSBhL2ZzL2YyZnMvZjJmcy5oCj4gPiArKysgYi9mcy9m MmZzL2YyZnMuaAo+ID4gQEAgLTE5LDYgKzE5LDcgQEAKPiA+ICAjaW5jbHVkZSA8bGludXgvc2No ZWQuaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvY3JlZC5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC9z Y2hlZC9tbS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+ID4gICNpbmNsdWRl IDxsaW51eC92bWFsbG9jLmg+Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgo+ID4gICNpbmNs dWRlIDxsaW51eC9ibGtkZXYuaD4KPiA+IEBAIC0xNzUwLDYgKzE3NTEsNyBAQCBzdHJ1Y3QgZGVj b21wcmVzc19pb19jdHggewo+ID4KPiA+ICBzdHJ1Y3QgZjJmc19nY19rdGhyZWFkIHsKPiA+ICAg ICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpmMmZzX2djX3Rhc2s7Cj4gPiArICAgICAgIHNwaW5s b2NrX3QgZ2NfdGFza19sb2NrOyAgICAgICAgICAgICAgICAvKiBwcm90ZWN0cyBmMmZzX2djX3Rh c2sgKi8KPiA+ICAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZ2Nfd2FpdF9xdWV1ZV9oZWFkOwo+ ID4KPiA+ICAgICAgICAgLyogZm9yIGdjIHNsZWVwIHRpbWUgKi8KPiA+IEBAIC0xNzc1LDYgKzE3 NzcsMTkgQEAgc3RydWN0IGYyZnNfZ2Nfa3RocmVhZCB7Cj4gPiAgICAgICAgIHVuc2lnbmVkIGlu dCBib29zdF9nY19ncmVlZHk7Cj4gPiAgfTsKPiA+Cj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKgo+ID4gK2YyZnNfdXBkYXRlX2djX3Rhc2soc3RydWN0IGYyZnNfZ2Nfa3Ro cmVhZCAqZ2NfdGgsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKPiA+ICt7Cj4gPiArICAgICAg IHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkX3Rhc2s7Cj4gPiArCj4gPiArICAgICAgIHNwaW5fbG9j aygmZ2NfdGgtPmdjX3Rhc2tfbG9jayk7Cj4gPiArICAgICAgIG9sZF90YXNrID0gUkVBRF9PTkNF KGdjX3RoLT5mMmZzX2djX3Rhc2spOwo+ID4gKyAgICAgICBXUklURV9PTkNFKGdjX3RoLT5mMmZz X2djX3Rhc2ssIHRhc2spOwo+ID4gKyAgICAgICBzcGluX3VubG9jaygmZ2NfdGgtPmdjX3Rhc2tf bG9jayk7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBvbGRfdGFzazsKPiA+ICt9Cj4gPiArCj4g PiAgc3RydWN0IGYyZnNfc2JfaW5mbyB7Cj4gPiAgICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAq c2I7ICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIFZGUyBzdXBlciBibG9jayAqLwo+ID4g ICAgICAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNfcHJvYzsgICAgICAgICAgLyogcHJvYyBl bnRyeSAqLwo+ID4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZ2MuYyBiL2ZzL2YyZnMvZ2MuYwo+ID4g aW5kZXggZTgyNDRiOTJkOGNlLi43MjUzYTkyMDE1M2IgMTAwNjQ0Cj4gPiAtLS0gYS9mcy9mMmZz L2djLmMKPiA+ICsrKyBiL2ZzL2YyZnMvZ2MuYwo+ID4gQEAgLTE5NCw2ICsxOTQsNyBAQCBzdGF0 aWMgaW50IGdjX3RocmVhZF9mdW5jKHZvaWQgKmRhdGEpCj4gPiAgaW50IGYyZnNfc3RhcnRfZ2Nf dGhyZWFkKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSkKPiA+ICB7Cj4gPiAgICAgICAgIHN0cnVj dCBmMmZzX2djX2t0aHJlYWQgKmdjX3RoID0gJnNiaS0+Z2NfdGhyZWFkOwo+ID4gKyAgICAgICBz dHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Cj4gPiAgICAgICAgIGRldl90IGRldiA9IHNiaS0+c2It PnNfYmRldi0+YmRfZGV2Owo+ID4KPiA+ICAgICAgICAgZ2NfdGgtPnVyZ2VudF9zbGVlcF90aW1l ID0gREVGX0dDX1RIUkVBRF9VUkdFTlRfU0xFRVBfVElNRTsKPiA+IEBAIC0yMTksMjYgKzIyMCwy OSBAQCBpbnQgZjJmc19zdGFydF9nY190aHJlYWQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKQo+ ID4KPiA+ICAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmZ2NfdGgtPmdjX3dhaXRfcXVldWVf aGVhZCk7Cj4gPiAgICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJmdjX3RoLT5mZ2djX3dxKTsK PiA+IC0gICAgICAgZ2NfdGgtPmYyZnNfZ2NfdGFzayA9IGt0aHJlYWRfcnVuKGdjX3RocmVhZF9m dW5jLCBzYmksCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAiZjJmc19nYy0ldToldSIsIE1B Sk9SKGRldiksIE1JTk9SKGRldikpOwo+ID4gLSAgICAgICBpZiAoSVNfRVJSKGdjX3RoLT5mMmZz X2djX3Rhc2spKSB7Cj4gPiAtICAgICAgICAgICAgICAgaW50IGVyciA9IFBUUl9FUlIoZ2NfdGgt PmYyZnNfZ2NfdGFzayk7Cj4gPiArICAgICAgIHRhc2sgPSBrdGhyZWFkX2NyZWF0ZShnY190aHJl YWRfZnVuYywgc2JpLCAiZjJmc19nYy0ldToldSIsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNQUpPUihkZXYpLCBNSU5PUihkZXYpKTsKPiA+ICsgICAgICAgaWYgKElTX0VSUih0 YXNrKSkgewo+ID4gKyAgICAgICAgICAgICAgIGludCBlcnIgPSBQVFJfRVJSKHRhc2spOwo+ID4K PiA+IC0gICAgICAgICAgICAgICBnY190aC0+ZjJmc19nY190YXNrID0gTlVMTDsKPiA+ICAgICAg ICAgICAgICAgICByZXR1cm4gZXJyOwo+ID4gICAgICAgICB9Cj4gPgo+ID4gLSAgICAgICBzZXRf dXNlcl9uaWNlKGdjX3RoLT5mMmZzX2djX3Rhc2ssCj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICBQUklPX1RPX05JQ0Uoc2JpLT5jcml0aWNhbF90YXNrX3ByaW9yaXR5KSk7Cj4gPiArICAgICAg IHNldF91c2VyX25pY2UodGFzaywgUFJJT19UT19OSUNFKHNiaS0+Y3JpdGljYWxfdGFza19wcmlv cml0eSkpOwo+ID4gKyAgICAgICBmMmZzX3VwZGF0ZV9nY190YXNrKGdjX3RoLCB0YXNrKTsKPiA+ ICsgICAgICAgd2FrZV91cF9wcm9jZXNzKHRhc2spOwo+ID4gICAgICAgICByZXR1cm4gMDsKPiA+ ICB9Cj4gPgo+ID4gIHZvaWQgZjJmc19zdG9wX2djX3RocmVhZChzdHJ1Y3QgZjJmc19zYl9pbmZv ICpzYmkpCj4gPiAgewo+ID4gICAgICAgICBzdHJ1Y3QgZjJmc19nY19rdGhyZWFkICpnY190aCA9 ICZzYmktPmdjX3RocmVhZDsKPiA+ICsgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwo+ ID4KPiA+IC0gICAgICAga3RocmVhZF9zdG9wKGdjX3RoLT5mMmZzX2djX3Rhc2spOwo+ID4gLSAg ICAgICBnY190aC0+ZjJmc19nY190YXNrID0gTlVMTDsKPiA+ICsgICAgICAgdGFzayA9IGYyZnNf dXBkYXRlX2djX3Rhc2soZ2NfdGgsIE5VTEwpOwo+ID4gKyAgICAgICBpZiAoIXRhc2spCj4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4gKyAgICAgICBrdGhyZWFkX3N0b3AodGFzayk7Cj4g PiAgICAgICAgIHdha2VfdXBfYWxsKCZnY190aC0+ZmdnY193cSk7Cj4gPiAgfQo+ID4KPiA+IGRp ZmYgLS1naXQgYS9mcy9mMmZzL3NlZ21lbnQuYyBiL2ZzL2YyZnMvc2VnbWVudC5jCj4gPiBpbmRl eCAwYjcwNjU2OGIwMzQuLmU2ZTY3YzIzM2UyNyAxMDA2NDQKPiA+IC0tLSBhL2ZzL2YyZnMvc2Vn bWVudC5jCj4gPiArKysgYi9mcy9mMmZzL3NlZ21lbnQuYwo+ID4gQEAgLTQyNSw2ICs0MjUsOCBA QCBpbnQgZjJmc19jb21taXRfYXRvbWljX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCj4gPiAg ICovCj4gPiAgdm9pZCBmMmZzX2JhbGFuY2VfZnMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBi b29sIG5lZWQpCj4gPiAgewo+ID4gKyAgICAgICBzdHJ1Y3QgZjJmc19nY19rdGhyZWFkICpnY190 aCA9ICZzYmktPmdjX3RocmVhZDsKPiA+ICsKPiA+ICAgICAgICAgaWYgKGYyZnNfY3BfZXJyb3Io c2JpKSkKPiA+ICAgICAgICAgICAgICAgICByZXR1cm47Cj4gPgo+ID4gQEAgLTQ1MiwxNCArNDU0 LDE2IEBAIHZvaWQgZjJmc19iYWxhbmNlX2ZzKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgYm9v bCBuZWVkKQo+ID4gICAgICAgICBmMmZzX3N1Ym1pdF9tZXJnZWRfd3JpdGUoc2JpLCBEQVRBKTsK PiA+ICAgICAgICAgZjJmc19zdWJtaXRfYWxsX21lcmdlZF9pcHVfd3JpdGVzKHNiaSk7Cj4gPgo+ ID4gLSAgICAgICBpZiAodGVzdF9vcHQoc2JpLCBHQ19NRVJHRSkgJiYgc2JpLT5nY190aHJlYWQu ZjJmc19nY190YXNrKSB7Cj4gPiArICAgICAgIGlmICh0ZXN0X29wdChzYmksIEdDX01FUkdFKSAm JiBSRUFEX09OQ0UoZ2NfdGgtPmYyZnNfZ2NfdGFzaykpIHsKPiA+ICAgICAgICAgICAgICAgICBE RUZJTkVfV0FJVCh3YWl0KTsKPiA+Cj4gPiAtICAgICAgICAgICAgICAgcHJlcGFyZV90b193YWl0 KCZzYmktPmdjX3RocmVhZC5mZ2djX3dxLCAmd2FpdCwKPiA+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cj4gPiAtICAgICAgICAg ICAgICAgd2FrZV91cCgmc2JpLT5nY190aHJlYWQuZ2Nfd2FpdF9xdWV1ZV9oZWFkKTsKPiA+IC0g ICAgICAgICAgICAgICBpb19zY2hlZHVsZSgpOwo+ID4gLSAgICAgICAgICAgICAgIGZpbmlzaF93 YWl0KCZzYmktPmdjX3RocmVhZC5mZ2djX3dxLCAmd2FpdCk7Cj4gPiArICAgICAgICAgICAgICAg cHJlcGFyZV90b193YWl0KCZnY190aC0+ZmdnY193cSwgJndhaXQsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKPiA+ICsgICAgICAgICAg ICAgICBpZiAoUkVBRF9PTkNFKGdjX3RoLT5mMmZzX2djX3Rhc2spKSB7Cj4gPiArICAgICAgICAg ICAgICAgICAgICAgICB3YWtlX3VwKCZnY190aC0+Z2Nfd2FpdF9xdWV1ZV9oZWFkKTsKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGlvX3NjaGVkdWxlKCk7Cj4gPiArICAgICAgICAgICAgICAg fQo+ID4gKyAgICAgICAgICAgICAgIGZpbmlzaF93YWl0KCZnY190aC0+ZmdnY193cSwgJndhaXQp Owo+ID4gICAgICAgICB9IGVsc2Ugewo+ID4gICAgICAgICAgICAgICAgIHN0cnVjdCBmMmZzX2dj X2NvbnRyb2wgZ2NfY29udHJvbCA9IHsKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIC52aWN0 aW1fc2Vnbm8gPSBOVUxMX1NFR05PLAo+ID4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMvc3VwZXIuYyBi L2ZzL2YyZnMvc3VwZXIuYwo+ID4gaW5kZXggZTllY2Q2N2EzZjNiLi4xNDBmZmZlOTNlYTQgMTAw NjQ0Cj4gPiAtLS0gYS9mcy9mMmZzL3N1cGVyLmMKPiA+ICsrKyBiL2ZzL2YyZnMvc3VwZXIuYwo+ ID4gQEAgLTI5NDMsMTEgKzI5NDMsMTEgQEAgc3RhdGljIGludCBfX2YyZnNfcmVtb3VudChzdHJ1 Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCj4gPiAgICAgICAgIGlm ICgoZmxhZ3MgJiBTQl9SRE9OTFkpIHx8Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAoRjJG U19PUFRJT04oc2JpKS5iZ2djX21vZGUgPT0gQkdHQ19NT0RFX09GRiAmJgo+ID4gICAgICAgICAg ICAgICAgICAgICAgICAgIXRlc3Rfb3B0KHNiaSwgR0NfTUVSR0UpKSkgewo+ID4gLSAgICAgICAg ICAgICAgIGlmIChzYmktPmdjX3RocmVhZC5mMmZzX2djX3Rhc2spIHsKPiA+ICsgICAgICAgICAg ICAgICBpZiAoUkVBRF9PTkNFKHNiaS0+Z2NfdGhyZWFkLmYyZnNfZ2NfdGFzaykpIHsKPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgIGYyZnNfc3RvcF9nY190aHJlYWQoc2JpKTsKPiA+ICAgICAg ICAgICAgICAgICAgICAgICAgIG5lZWRfcmVzdGFydF9nYyA9IHRydWU7Cj4gPiAgICAgICAgICAg ICAgICAgfQo+ID4gLSAgICAgICB9IGVsc2UgaWYgKCFzYmktPmdjX3RocmVhZC5mMmZzX2djX3Rh c2spIHsKPiA+ICsgICAgICAgfSBlbHNlIGlmICghUkVBRF9PTkNFKHNiaS0+Z2NfdGhyZWFkLmYy ZnNfZ2NfdGFzaykpIHsKPiA+ICAgICAgICAgICAgICAgICBlcnIgPSBmMmZzX3N0YXJ0X2djX3Ro cmVhZChzYmkpOwo+ID4gICAgICAgICAgICAgICAgIGlmIChlcnIpCj4gPiAgICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIHJlc3RvcmVfb3B0czsKPiA+IEBAIC01MDUxLDYgKzUwNTEsNyBAQCBz dGF0aWMgaW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qg ZnNfY29udGV4dCAqZmMpCj4gPiAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2luaXQoJnNiaS0+ aW5vZGVfbG9ja1tpXSk7Cj4gPiAgICAgICAgIH0KPiA+ICAgICAgICAgbXV0ZXhfaW5pdCgmc2Jp LT5mbHVzaF9sb2NrKTsKPiA+ICsgICAgICAgc3Bpbl9sb2NrX2luaXQoJnNiaS0+Z2NfdGhyZWFk LmdjX3Rhc2tfbG9jayk7Cj4gPgo+ID4gICAgICAgICAvKiBzZXQgYSBibG9jayBzaXplICovCj4g PiAgICAgICAgIGlmICh1bmxpa2VseSghc2Jfc2V0X2Jsb2Nrc2l6ZShzYiwgRjJGU19CTEtTSVpF KSkpIHsKPiA+IGRpZmYgLS1naXQgYS9mcy9mMmZzL3N5c2ZzLmMgYi9mcy9mMmZzL3N5c2ZzLmMK PiA+IGluZGV4IGJlOTJjMDVhNTQyMC4uYzgzY2QxZDNlZGUyIDEwMDY0NAo+ID4gLS0tIGEvZnMv ZjJmcy9zeXNmcy5jCj4gPiArKysgYi9mcy9mMmZzL3N5c2ZzLmMKPiA+IEBAIC02NjQsNyArNjY0 LDcgQEAgc3RhdGljIHNzaXplX3QgX19zYmlfc3RvcmUoc3RydWN0IGYyZnNfYXR0ciAqYSwKPiA+ ICAgICAgICAgICAgICAgICAgICAgICAgIHNiaS0+Z2NfbW9kZSA9IEdDX05PUk1BTDsKPiA+ICAg ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHQgPT0gMSkgewo+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgc2JpLT5nY19tb2RlID0gR0NfVVJHRU5UX0hJR0g7Cj4gPiAtICAgICAgICAgICAgICAg ICAgICAgICBpZiAoc2JpLT5nY190aHJlYWQuZjJmc19nY190YXNrKSB7Cj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBpZiAoUkVBRF9PTkNFKHNiaS0+Z2NfdGhyZWFkLmYyZnNfZ2NfdGFzaykp IHsKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JpLT5nY190aHJlYWQuZ2Nf d2FrZSA9IHRydWU7Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdha2VfdXBf aW50ZXJydXB0aWJsZV9hbGwoCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnNiaS0+Z2NfdGhyZWFkLmdjX3dhaXRfcXVldWVfaGVhZCk7Cj4gPiBAQCAtNjc0LDcg KzY3NCw3IEBAIHN0YXRpYyBzc2l6ZV90IF9fc2JpX3N0b3JlKHN0cnVjdCBmMmZzX2F0dHIgKmEs Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBzYmktPmdjX21vZGUgPSBHQ19VUkdFTlRfTE9X Owo+ID4gICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PSAzKSB7Cj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICBzYmktPmdjX21vZGUgPSBHQ19VUkdFTlRfTUlEOwo+ID4gLSAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHNiaS0+Z2NfdGhyZWFkLmYyZnNfZ2NfdGFzaykgewo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgaWYgKFJFQURfT05DRShzYmktPmdjX3RocmVhZC5mMmZzX2dj X3Rhc2spKSB7Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiaS0+Z2NfdGhy ZWFkLmdjX3dha2UgPSB0cnVlOwo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZzYmktPmdjX3RocmVhZC5nY193YWl0X3F1ZXVlX2hlYWQpOwo+ID4gQEAg LTk4MSwxNyArOTgxLDIwIEBAIHN0YXRpYyBzc2l6ZV90IF9fc2JpX3N0b3JlKHN0cnVjdCBmMmZz X2F0dHIgKmEsCj4gPiAgICAgICAgIH0KPiA+Cj4gPiAgICAgICAgIGlmICghc3RyY21wKGEtPmF0 dHIubmFtZSwgImNyaXRpY2FsX3Rhc2tfcHJpb3JpdHkiKSkgewo+ID4gKyAgICAgICAgICAgICAg IGludCBuaWNlOwo+ID4gKwo+ID4gICAgICAgICAgICAgICAgIGlmICh0IDwgTklDRV9UT19QUklP KE1JTl9OSUNFKSB8fCB0ID4gTklDRV9UT19QUklPKE1BWF9OSUNFKSkKPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gICAgICAgICAgICAgICAgIGlmICghY2Fw YWJsZShDQVBfU1lTX05JQ0UpKQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1F UEVSTTsKPiA+ICAgICAgICAgICAgICAgICBzYmktPmNyaXRpY2FsX3Rhc2tfcHJpb3JpdHkgPSB0 Owo+ID4gKyAgICAgICAgICAgICAgIG5pY2UgPSBQUklPX1RPX05JQ0Uoc2JpLT5jcml0aWNhbF90 YXNrX3ByaW9yaXR5KTsKPiA+ICAgICAgICAgICAgICAgICBpZiAoc2JpLT5jcHJjX2luZm8uZjJm c19pc3N1ZV9ja3B0KQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgc2V0X3VzZXJfbmljZShz YmktPmNwcmNfaW5mby5mMmZzX2lzc3VlX2NrcHQsCj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUFJJT19UT19OSUNFKHNiaS0+Y3JpdGljYWxfdGFza19wcmlvcml0 eSkpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0X3VzZXJfbmljZShzYmktPmNwcmNf aW5mby5mMmZzX2lzc3VlX2NrcHQsIG5pY2UpOwo+ID4gKyAgICAgICAgICAgICAgIHNwaW5fbG9j aygmc2JpLT5nY190aHJlYWQuZ2NfdGFza19sb2NrKTsKPiA+ICAgICAgICAgICAgICAgICBpZiAo c2JpLT5nY190aHJlYWQuZjJmc19nY190YXNrKQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAg c2V0X3VzZXJfbmljZShzYmktPmdjX3RocmVhZC5mMmZzX2djX3Rhc2ssCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJT19UT19OSUNFKHNiaS0+Y3JpdGljYWxf dGFza19wcmlvcml0eSkpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0X3VzZXJfbmlj ZShzYmktPmdjX3RocmVhZC5mMmZzX2djX3Rhc2ssIG5pY2UpOwo+ID4gKyAgICAgICAgICAgICAg IHNwaW5fdW5sb2NrKCZzYmktPmdjX3RocmVhZC5nY190YXNrX2xvY2spOwo+ID4gICAgICAgICAg ICAgICAgIHJldHVybiBjb3VudDsKPiA+ICAgICAgICAgfQo+ID4KPiA+IC0tCj4gPiAyLjQzLjAK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1m MmZzLWRldmVsIG1haWxpbmcgbGlzdApMaW51eC1mMmZzLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdl Lm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9saW51eC1m MmZzLWRldmVsCg==