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 525911FC7FB for ; Tue, 16 Jun 2026 06:56:38 +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=1781592999; cv=none; b=Md+Mek0NNS6SZx2L0peU+Kj/dOr32RKMm8moRfbRdHswrhR1Di9ArHICPI1t8OzoOTWSVFnoHhBDroTWpAJ0meuzzAtU4lYwNhw6shuu4LE7LL2u+S+E6IXfwSByNdR+jCcP12eGmqk0ShumbmpklNllNWcu/glrbxF+7bx+LsM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781592999; c=relaxed/simple; bh=oVXlLKEVSLP46nC/ngiTOEW4LRIZTqHsqTtmmu1fTRc=; h=Message-ID:Date:MIME-Version:Cc:Subject:To:References:From: In-Reply-To:Content-Type; b=rWH6uI7ryLB3Ewq3q8uCMJZeGhTaqvSW+1cNnRT7WIFFimUQC9lByYhub83J6RjKZ+ECIkklclAnacOdCaaRFMaazYH7QJyoITAH0oSwFhMoKKGquB98OdJ4lXzqiFBtgRIkNHA5OApfHuNMYkUHpNRdjJ/HPM/hpIvAAyth1Js= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=T0/NEQpo; 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="T0/NEQpo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1F9C31F000E9; Tue, 16 Jun 2026 06:56:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781592997; bh=GrSmd1lbBq9cbAevJlQdzffNBQ1YuG1P0l1g/pdj2Fw=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=T0/NEQpoAHl0mIb8yOYvCcp/cXuL2sc/lmDp++IHSwEKUfbhZIrGmxRwEUbfxjKzq k2DQdBD1MzoVNqxrzu43zmbOkPAWmRCLFWK+fL58G+h9l48KZtOQ4RSKUVId64DFGB +lLF3MMCh80NQ5kfXhHMdc44Ih+m49dsXwMMVPBm8BXsunRJEmTzui7IufCQ7HVcgW Bqs+OapMwoAnZ7ZUdIMLsNXlUK47Zkj/Nda/r1SWbyJley/m6Ock51eiVXab0qyDRF YmzMIvhNAfKRzsN/zW/lODZYIwjE7dsCqowiQ2OetrLIdSDlYxxATiOXU1IiJFrpT5 H7ni5n88PIUYQ== Message-ID: <45da686f-64f6-4597-ae9e-c6600b4bdb19@kernel.org> Date: Tue, 16 Jun 2026 14:56:35 +0800 Precedence: bulk X-Mailing-List: fstests@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Cc: chao@kernel.org Subject: Re: [PATCH] f2fs/025: test to do sanity check section type correctly in f2fs GC To: fstests@vger.kernel.org, jaegeuk@kernel.org, linux-f2fs-devel@lists.sourceforge.net References: <20260612005802.3017709-1-chao@kernel.org> Content-Language: en-US From: Chao Yu In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 6/16/26 13:47, Zorro Lang wrote: > On Tue, Jun 16, 2026 at 11:33:20AM +0800, Chao Yu wrote: >> On 6/16/26 04:05, Zorro Lang wrote: >>> On Mon, Jun 15, 2026 at 04:22:34PM +0800, Chao Yu wrote: >>>> On 6/15/26 01:16, Zorro Lang wrote: >>>>> On Fri, Jun 12, 2026 at 12:58:02AM +0000, Chao Yu wrote: >>>>>> Without commit 520760b9f915 ("f2fs: optimize representative type determination >>>>>> in GC"), f2fs GC will report inconsistent segment type in large section issue, >>>>>> and then it will force to shutdown filesystem. >>>>>> >>>>>> [ 768.190903] F2FS-fs (loop51): Inconsistent segment (3) type [1, 0] in SIT and SSA >>>>>> >>>>>> The reason is f2fs kernel will assume all segment type inside large section is >>>>>> the same, during GC it loads type from one segment and compare it to other >>>>>> segments' type, however due to recovery flow, the chosen segment may has zero >>>>>> valid blocks w/ different segment type, since the segment is invalid(free) one, >>>>>> it will never be migrated, so that we should not treat such state as abnormal >>>>>> condition. >>>>>> >>>>>> This testcase is created to simulate above condition to see whether f2fs kernel >>>>>> module can handle it correctly >>>>>> >>>>>> Signed-off-by: Chao Yu >>>>>> --- >>>>>> v2: >>>>>> - clear MKFS_OPTIONS and MOUNT_OPTIONS to guarantee block allocation is as expected. >>>>> >>>>> Hi Chao, >>>>> >>>>> Sorry, I just noticed your reply to my review on the previous patch version. >>>>> Due to some unexpected shake-ups recently, I’ve been bogged down with setting >>>>> up and modifying various new system environments, and I accidentally marked >>>>> some unread emails as read. >>>> >>>> No worries. :) >>>> >>>>> >>>>> The patch looks good to me, with just a few picky review points below: >>>> >>>> Thanks Zorro for taking a look. >>>> >>>>> >>>>>> tests/f2fs/025 | 92 ++++++++++++++++++++++++++++++++++++++++++++++ >>>>>> tests/f2fs/025.out | 2 + >>>>>> 2 files changed, 94 insertions(+) >>>>>> create mode 100644 tests/f2fs/025 >>>>>> create mode 100644 tests/f2fs/025.out >>>>>> >>>>>> diff --git a/tests/f2fs/025 b/tests/f2fs/025 >>>>>> new file mode 100644 >>>>>> index 000000000..397e5439a >>>>>> --- /dev/null >>>>>> +++ b/tests/f2fs/025 >>>>>> @@ -0,0 +1,92 @@ >>>>>> +#! /bin/bash >>>>>> +# SPDX-License-Identifier: GPL-2.0 >>>>>> +# Copyright (c) 2026 Chao Yu >>>>>> +# >>>>>> +# FS QA Test No. f2fs/025 >>>>>> +# >>>>>> +# Check whether f2fs will encounter cp_error (Inconsistent segment type) >>>>>> +# when doing sanity check on type of segments inside large section during >>>>>> +# garbage collection. >>>>>> +# >>>>>> +. ./common/preamble >>>>>> +_begin_fstest auto quick >>>>>> + >>>>>> +_fixed_by_kernel_commit 520760b9f915 \ >>>>>> + "f2fs: optimize representative type determination in GC" >>>>>> + >>>>>> +. ./common/filter >>>>>> + >>>>>> +_cleanup() >>>>>> +{ >>>>>> + cd / >>>>>> + rm -r -f $tmp.* >>>>>> +} >>>>> >>>>> This _cleanup() function is same as default. It can be removed. >>>> >>>> Will remove. >>>> >>>>> >>>>>> + >>>>>> +_require_scratch >>>>>> +_require_xfs_io_command "pwrite" >>>>>> +_require_xfs_io_command "truncate" >>>>>> +_require_command "$F2FS_IO_PROG" f2fs_io >>>>>> +_require_check_dmesg >>>>>> + >>>>>> +# Clear options to avoid interference from external configurations >>>>>> +export MKFS_OPTIONS="" >>>>>> +export MOUNT_OPTIONS="" >>>>>> + >>>>>> +# Format with 96MB size and 2 segments per section >>>>>> +_scratch_mkfs_sized $((96 * 1024 * 1024)) "" "-s 2" >> $seqres.full 2>&1 >>>>>> + >>>>>> +# Mount with mode=lfs >>>>>> +_scratch_mount -o mode=lfs >> $seqres.full 2>&1 >>>>> ^^^^^^^^^^^^^^^^^^^^ >>>>> It's helpless, due to if _scratch_mount fails, it exit() directly. >>>> >>>> Right, will fix. >>>> >>>>> >>>>>> + >>>>>> +# Create files to fill whole filesystem, then segment type will be changed to node type >>>>>> +for ((i=0;i<5120;i++)) do >>>>>> + touch $SCRATCH_MNT/$i >> $seqres.full 2>&1 >>>>>> +done >>>>>> +sync >>>>>> + >>>>>> +# Remove all files to create free(empty) node segments >>>>>> +rm -f $SCRATCH_MNT/* >>>>>> +sync >>>>>> + >>>>>> +# Allocate free space so that we have chance to reuse free(empty) node segments >>>>>> +$XFS_IO_PROG -f -c "pwrite -b 4k 0 1928k" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +sync >>>>>> + >>>>>> +$XFS_IO_PROG -c "truncate 0" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +$XFS_IO_PROG -d -c "pwrite -b 4k 0 16M" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +$XFS_IO_PROG -c "truncate 0" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +$XFS_IO_PROG -d -c "pwrite -b 4k 0 16M" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +$XFS_IO_PROG -c "truncate 0" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +sync >>>>>> + >>>>>> +$XFS_IO_PROG -d -c "pwrite -b 4k 0 8M" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +$XFS_IO_PROG -c "truncate 0" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +$XFS_IO_PROG -d -c "pwrite -b 4k 0 32K" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +$XFS_IO_PROG -c "truncate 0" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> +$XFS_IO_PROG -d -c "pwrite -b 4k 0 2M" -c "fsync" $SCRATCH_MNT/file >> $seqres.full 2>&1 >>>>>> + >>>>>> +# Shutdown the filesystem without checkpoint >>>>>> +$F2FS_IO_PROG shutdown 2 $SCRATCH_MNT >> $seqres.full 2>&1 >>>>> >>>>> I'm wondering if we can have f2fs supporting in common _scratch_shutdown >>>>> helper :) >>>> >>>> I think we can change f2fs testcase to use _scratch_shutdown because the definition of >>>> nologflush shutdown interface is the same as xfs': >>>> >>>> /* >>>> * should be same as XFS_IOC_GOINGDOWN. >>>> * Flags for going down operation used by FS_IOC_GOINGDOWN >>>> */ >>>> #define F2FS_IOC_SHUTDOWN _IOR('X', 125, __u32) /* Shutdown */ >>>> #define F2FS_GOING_DOWN_NOSYNC 0x2 /* going down */ >>>> >>>> #define XFS_IOC_GOINGDOWN _IOR ('X', 125, uint32_t) >>>> #define XFS_FSOP_GOING_FLAGS_NOLOGFLUSH 0x2 /* don't flush log nor data */ >>>> >>>>> >>>>>> + >>>>>> +_scratch_unmount >> $seqres.full 2>&1 >>>>> ^^^^^^^^^^^^^^^^^^^^ >>>>> >>>>> If unmount fails, how about let it output the errors, to break the golden image? >>>> >>>> Yes, it's better. >>>> >>>>> >>>>>> + >>>>>> +_scratch_mount -o mode=lfs >> $seqres.full 2>&1 >>>>> ^^^^^^^^^^^^^^^^^^^^ >>>>> helpless >>>> >>>> Will fix. >>>> >>>>> >>>>>> + >>>>>> +# Run urgent_gc mode to trigger garbage collection >>>>>> +dev_name=$(_short_dev $SCRATCH_DEV) >>>>>> +if [ -f /sys/fs/f2fs/$dev_name/gc_urgent ]; then >>>>>> + echo 1 > /sys/fs/f2fs/$dev_name/gc_urgent >>>>>> +fi >>>>> >>>>> Hmm... what if there's not /sys/fs/f2fs/$dev_name/gc_urgent? Does it >>>>> affect the test result? >>>>> >>>>> If it does, this's a necessary requirement for this test, we shouldn't >>>>> ignore it and keep running. Does $F2FS_IO_PROG provide a command to >>>>> make a force GC? Or we need to check this file and _notrun if it's >>>>> not existed. >>>> >>>> Ah, right, that's good point! >>>> >>>> We can use "$F2FS_IO_PROG gc_urgent run 5" instead, it will do below commands: >>> >>> Great, I just hope the *gc_urgent* isn't a new feature which needs something likes: >> >> I guess it's not a new subcommand for f2fs_io, >> >> commit 22d758e2e6af210dc9e6cdf99438f063383ba72f >> Author: Jaegeuk Kim >> Date: Tue Feb 19 19:07:21 2019 -0800 >> >> f2fs_io: add gc_urgent >> >> e.g., >> f2fs_io gc_urgent dm-4 [start/end/run] [time in sec] >> >> This controls sysfs/gc_urgent to run f2fs_gc urgently. >> >> Signed-off-by: Jaegeuk Kim >> >>> `_require_f2fs_io gc_urgent` (there's not _require_f2fs_io:) >> >> Agreed, we need to introduce _require_f2fs_io(), let me work on this. > > Oh, 2019 was 7 years ago. No one should be complaining about this unless > they're on a super old downstream f2fs-tools. But anyway, having > _require_f2fs_io is definitely good for future f2fs testing :) Yeah, agreed. > > Therefore, _require_f2fs_io is not strictly urgent for this patch. It's up to > you whether to include it now or handle it in a later update. Let me update a bit later. > >> >>> >>>> 1. echo 1 > /sys/fs/f2fs/$dev_name/gc_urgent >>>> 2. sleep 5 seconds >>>> 3. echo 0 > /sys/fs/f2fs/$dev_name/gc_urgent >>> >>> It also depends on the /sys/fs/f2fs/$dev_name/gc_urgent too. So we have to face >>> the same question: >>> If this file doesn't exist, should this test case _notrun? >> >> Oh, right, maybe we can introduce _require_f2fs_sysfs() to check whether f2fs kernel >> module has supported target sysfs node? > > There's a _require_fs_sysfs_attr, so... > > if you don't care about $SCRATCH_DEV is mounted or not, you can: > _require_fs_sysfs_attr $TEST_DEV gc_urgent gc_urgent is not a per-image feature, so above version looks fine. > > or after _scratch_mount: > _require_fs_sysfs_attr $SCRATCH_DEV gc_urgent > > Then I think you can either use `$F2FS_IO_PROG gc_urgent`, or if you're worried > about its compatibility, you can: I'm not worried about the compatibility. > _set_fs_sysfs_attr $SCRATCH_DEV gc_urgent 1 > sleep 5 Thanks for the suggestion. :) Let me update w/: _require_fs_sysfs_attr $TEST_DEV gc_urgent ... $F2FS_IO_PROG gc_urgent Thanks, > > Thanks, > Zorro > >> >> Thanks, >> >>> >>> Thanks, >>> Zorro >>> >>>> >>>>> >>>>>> + >>>>>> +# Wait background GC thread to wake up to run and potentially encounter the inconsistency >>>>>> +sleep 5 >>>>> >>>>> Does this sleep try to wait above "echo 1 > /sys/fs/f2fs/$dev_name/gc_urgent"? >>>>> If so, it makes more sense to move it into the "if-then" logic. >>>>> >>>>>> + >>>>>> +_scratch_unmount >> $seqres.full 2>&1 >>>>> ^^^^^^^^^^^^^^^^^^^^ >>>>> Same as above. >>>> >>>> Will fix. >>>> >>>>> >>>>>> + >>>>>> +# Check whether the dmesg has the warning indicating the bug >>>>>> +_check_dmesg_for "F2FS-fs \($dev_name\): Inconsistent segment" && \ >>>>>> + _fail "F2FS-fs ($dev_name): Inconsistent segment type detected in dmesg!" >>>>>> + >>>>>> +echo "Silence is golden" >>>>>> +status=0 >>>>>> +exit >>>>> >>>>> We've replaced "status=0;exit;" with "_exit 0". >>>> >>>> Will fix. >>>> >>>> Thanks, >>>> >>>>> >>>>> Thanks, >>>>> Zorro >>>>> >>>>>> diff --git a/tests/f2fs/025.out b/tests/f2fs/025.out >>>>>> new file mode 100644 >>>>>> index 000000000..3d70951ef >>>>>> --- /dev/null >>>>>> +++ b/tests/f2fs/025.out >>>>>> @@ -0,0 +1,2 @@ >>>>>> +QA output created by 025 >>>>>> +Silence is golden >>>>>> -- >>>>>> 2.49.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 C46EACD8CA8 for ; Tue, 16 Jun 2026 06:56:51 +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: 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:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=HAiQSE4alGnJvlXUIoF2BhgfXp6nHwwjWpmcBYQahfg=; b=lIBMbkJ35nw9eXBDkyg8qXw74p qr3s2nh5DPDg9X5Fk7bgB/0hnjJJm1rCexrcnpp27YhdGEWEQHIQD7G11vIlDd0C8/IDWVHA1gdLO E26QlOw8YS0QdtOU2wqbeTEN3mssIOLkbTG/ModAMNl1v1B7emtzw/L9LIki51ct20u8=; 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 1wZNj7-0002qy-Jl; Tue, 16 Jun 2026 06:56:50 +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 1wZNj6-0002ql-K1 for linux-f2fs-devel@lists.sourceforge.net; Tue, 16 Jun 2026 06:56:49 +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=GrSmd1lbBq9cbAevJlQdzffNBQ1YuG1P0l1g/pdj2Fw=; b=Ho873KsU+PmmFyr8mYkZi2e8wt uz42TzKGNG+14L8pgolYYpgaPOjkBXvA7hC6qGHGYIexnbCm4vmXFuUJzhl/45+nE4MVITxHp3Zup lFnFN1qbGknB/5Dvbr+HghH2NgyvWISevoaVgQeUsArqWrhPPst6kvVQ7YvYB6JVQtR8=; 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=GrSmd1lbBq9cbAevJlQdzffNBQ1YuG1P0l1g/pdj2Fw=; b=mnGw6+LZfWlzfsB7THg2z5FJzX AUC6g+s9tOSC0AoPDo2DEoU0Ly8Z2LIJKExYNrcFFKJAvErrgOpORWALFf0efrAoJfzvojb03ADwx s0TPOooEPhqOJzk1OljM/7frYJybu0huZe2gIJyUyEgnNkXx1nzuVukMDEO2LsVuwlNo=; Received: from sea.source.kernel.org ([172.234.252.31]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1wZNj5-0003o2-Uj for linux-f2fs-devel@lists.sourceforge.net; Tue, 16 Jun 2026 06:56:49 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 12F0741788 for ; Tue, 16 Jun 2026 06:56:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1F9C31F000E9; Tue, 16 Jun 2026 06:56:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781592997; bh=GrSmd1lbBq9cbAevJlQdzffNBQ1YuG1P0l1g/pdj2Fw=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=T0/NEQpoAHl0mIb8yOYvCcp/cXuL2sc/lmDp++IHSwEKUfbhZIrGmxRwEUbfxjKzq k2DQdBD1MzoVNqxrzu43zmbOkPAWmRCLFWK+fL58G+h9l48KZtOQ4RSKUVId64DFGB +lLF3MMCh80NQ5kfXhHMdc44Ih+m49dsXwMMVPBm8BXsunRJEmTzui7IufCQ7HVcgW Bqs+OapMwoAnZ7ZUdIMLsNXlUK47Zkj/Nda/r1SWbyJley/m6Ock51eiVXab0qyDRF YmzMIvhNAfKRzsN/zW/lODZYIwjE7dsCqowiQ2OetrLIdSDlYxxATiOXU1IiJFrpT5 H7ni5n88PIUYQ== Message-ID: <45da686f-64f6-4597-ae9e-c6600b4bdb19@kernel.org> Date: Tue, 16 Jun 2026 14:56:35 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: fstests@vger.kernel.org, jaegeuk@kernel.org, linux-f2fs-devel@lists.sourceforge.net References: <20260612005802.3017709-1-chao@kernel.org> Content-Language: en-US In-Reply-To: X-Headers-End: 1wZNj5-0003o2-Uj Subject: Re: [f2fs-dev] [PATCH] f2fs/025: test to do sanity check section type correctly in f2fs GC 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 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net T24gNi8xNi8yNiAxMzo0NywgWm9ycm8gTGFuZyB3cm90ZToKPiBPbiBUdWUsIEp1biAxNiwgMjAy NiBhdCAxMTozMzoyMEFNICswODAwLCBDaGFvIFl1IHdyb3RlOgo+PiBPbiA2LzE2LzI2IDA0OjA1 LCBab3JybyBMYW5nIHdyb3RlOgo+Pj4gT24gTW9uLCBKdW4gMTUsIDIwMjYgYXQgMDQ6MjI6MzRQ TSArMDgwMCwgQ2hhbyBZdSB3cm90ZToKPj4+PiBPbiA2LzE1LzI2IDAxOjE2LCBab3JybyBMYW5n IHdyb3RlOgo+Pj4+PiBPbiBGcmksIEp1biAxMiwgMjAyNiBhdCAxMjo1ODowMkFNICswMDAwLCBD aGFvIFl1IHdyb3RlOgo+Pj4+Pj4gV2l0aG91dCBjb21taXQgNTIwNzYwYjlmOTE1ICgiZjJmczog b3B0aW1pemUgcmVwcmVzZW50YXRpdmUgdHlwZSBkZXRlcm1pbmF0aW9uCj4+Pj4+PiBpbiBHQyIp LCBmMmZzIEdDIHdpbGwgcmVwb3J0IGluY29uc2lzdGVudCBzZWdtZW50IHR5cGUgaW4gbGFyZ2Ug c2VjdGlvbiBpc3N1ZSwKPj4+Pj4+IGFuZCB0aGVuIGl0IHdpbGwgZm9yY2UgdG8gc2h1dGRvd24g ZmlsZXN5c3RlbS4KPj4+Pj4+Cj4+Pj4+PiBbICA3NjguMTkwOTAzXSBGMkZTLWZzIChsb29wNTEp OiBJbmNvbnNpc3RlbnQgc2VnbWVudCAoMykgdHlwZSBbMSwgMF0gaW4gU0lUIGFuZCBTU0EKPj4+ Pj4+Cj4+Pj4+PiBUaGUgcmVhc29uIGlzIGYyZnMga2VybmVsIHdpbGwgYXNzdW1lIGFsbCBzZWdt ZW50IHR5cGUgaW5zaWRlIGxhcmdlIHNlY3Rpb24gaXMKPj4+Pj4+IHRoZSBzYW1lLCBkdXJpbmcg R0MgaXQgbG9hZHMgdHlwZSBmcm9tIG9uZSBzZWdtZW50IGFuZCBjb21wYXJlIGl0IHRvIG90aGVy Cj4+Pj4+PiBzZWdtZW50cycgdHlwZSwgaG93ZXZlciBkdWUgdG8gcmVjb3ZlcnkgZmxvdywgdGhl IGNob3NlbiBzZWdtZW50IG1heSBoYXMgemVybwo+Pj4+Pj4gdmFsaWQgYmxvY2tzIHcvIGRpZmZl cmVudCBzZWdtZW50IHR5cGUsIHNpbmNlIHRoZSBzZWdtZW50IGlzIGludmFsaWQoZnJlZSkgb25l LAo+Pj4+Pj4gaXQgd2lsbCBuZXZlciBiZSBtaWdyYXRlZCwgc28gdGhhdCB3ZSBzaG91bGQgbm90 IHRyZWF0IHN1Y2ggc3RhdGUgYXMgYWJub3JtYWwKPj4+Pj4+IGNvbmRpdGlvbi4KPj4+Pj4+Cj4+ Pj4+PiBUaGlzIHRlc3RjYXNlIGlzIGNyZWF0ZWQgdG8gc2ltdWxhdGUgYWJvdmUgY29uZGl0aW9u IHRvIHNlZSB3aGV0aGVyIGYyZnMga2VybmVsCj4+Pj4+PiBtb2R1bGUgY2FuIGhhbmRsZSBpdCBj b3JyZWN0bHkKPj4+Pj4+Cj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBDaGFvIFl1IDxjaGFvQGtlcm5l bC5vcmc+Cj4+Pj4+PiAtLS0KPj4+Pj4+IHYyOgo+Pj4+Pj4gLSBjbGVhciBNS0ZTX09QVElPTlMg YW5kIE1PVU5UX09QVElPTlMgdG8gZ3VhcmFudGVlIGJsb2NrIGFsbG9jYXRpb24gaXMgYXMgZXhw ZWN0ZWQuCj4+Pj4+Cj4+Pj4+IEhpIENoYW8sCj4+Pj4+Cj4+Pj4+IFNvcnJ5LCBJIGp1c3Qgbm90 aWNlZCB5b3VyIHJlcGx5IHRvIG15IHJldmlldyBvbiB0aGUgcHJldmlvdXMgcGF0Y2ggdmVyc2lv bi4KPj4+Pj4gRHVlIHRvIHNvbWUgdW5leHBlY3RlZCBzaGFrZS11cHMgcmVjZW50bHksIEnigJl2 ZSBiZWVuIGJvZ2dlZCBkb3duIHdpdGggc2V0dGluZwo+Pj4+PiB1cCBhbmQgbW9kaWZ5aW5nIHZh cmlvdXMgbmV3IHN5c3RlbSBlbnZpcm9ubWVudHMsIGFuZCBJIGFjY2lkZW50YWxseSBtYXJrZWQK Pj4+Pj4gc29tZSB1bnJlYWQgZW1haWxzIGFzIHJlYWQuCj4+Pj4KPj4+PiBObyB3b3JyaWVzLiA6 KQo+Pj4+Cj4+Pj4+Cj4+Pj4+IFRoZSBwYXRjaCBsb29rcyBnb29kIHRvIG1lLCB3aXRoIGp1c3Qg YSBmZXcgcGlja3kgcmV2aWV3IHBvaW50cyBiZWxvdzoKPj4+Pgo+Pj4+IFRoYW5rcyBab3JybyBm b3IgdGFraW5nIGEgbG9vay4KPj4+Pgo+Pj4+Pgo+Pj4+Pj4gIHRlc3RzL2YyZnMvMDI1ICAgICB8 IDkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4+ ICB0ZXN0cy9mMmZzLzAyNS5vdXQgfCAgMiArCj4+Pj4+PiAgMiBmaWxlcyBjaGFuZ2VkLCA5NCBp bnNlcnRpb25zKCspCj4+Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2YyZnMvMDI1Cj4+ Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2YyZnMvMDI1Lm91dAo+Pj4+Pj4KPj4+Pj4+ IGRpZmYgLS1naXQgYS90ZXN0cy9mMmZzLzAyNSBiL3Rlc3RzL2YyZnMvMDI1Cj4+Pj4+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+Pj4+Pj4gaW5kZXggMDAwMDAwMDAwLi4zOTdlNTQzOWEKPj4+Pj4+ IC0tLSAvZGV2L251bGwKPj4+Pj4+ICsrKyBiL3Rlc3RzL2YyZnMvMDI1Cj4+Pj4+PiBAQCAtMCww ICsxLDkyIEBACj4+Pj4+PiArIyEgL2Jpbi9iYXNoCj4+Pj4+PiArIyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMAo+Pj4+Pj4gKyMgQ29weXJpZ2h0IChjKSAyMDI2IENoYW8gWXUgPGNo YW9Aa2VybmVsLm9yZz4KPj4+Pj4+ICsjCj4+Pj4+PiArIyBGUyBRQSBUZXN0IE5vLiBmMmZzLzAy NQo+Pj4+Pj4gKyMKPj4+Pj4+ICsjIENoZWNrIHdoZXRoZXIgZjJmcyB3aWxsIGVuY291bnRlciBj cF9lcnJvciAoSW5jb25zaXN0ZW50IHNlZ21lbnQgdHlwZSkKPj4+Pj4+ICsjIHdoZW4gZG9pbmcg c2FuaXR5IGNoZWNrIG9uIHR5cGUgb2Ygc2VnbWVudHMgaW5zaWRlIGxhcmdlIHNlY3Rpb24gZHVy aW5nCj4+Pj4+PiArIyBnYXJiYWdlIGNvbGxlY3Rpb24uCj4+Pj4+PiArIwo+Pj4+Pj4gKy4gLi9j b21tb24vcHJlYW1ibGUKPj4+Pj4+ICtfYmVnaW5fZnN0ZXN0IGF1dG8gcXVpY2sKPj4+Pj4+ICsK Pj4+Pj4+ICtfZml4ZWRfYnlfa2VybmVsX2NvbW1pdCA1MjA3NjBiOWY5MTUgXAo+Pj4+Pj4gKwki ZjJmczogb3B0aW1pemUgcmVwcmVzZW50YXRpdmUgdHlwZSBkZXRlcm1pbmF0aW9uIGluIEdDIgo+ Pj4+Pj4gKwo+Pj4+Pj4gKy4gLi9jb21tb24vZmlsdGVyCj4+Pj4+PiArCj4+Pj4+PiArX2NsZWFu dXAoKQo+Pj4+Pj4gK3sKPj4+Pj4+ICsJY2QgLwo+Pj4+Pj4gKwlybSAtciAtZiAkdG1wLioKPj4+ Pj4+ICt9Cj4+Pj4+Cj4+Pj4+IFRoaXMgX2NsZWFudXAoKSBmdW5jdGlvbiBpcyBzYW1lIGFzIGRl ZmF1bHQuIEl0IGNhbiBiZSByZW1vdmVkLgo+Pj4+Cj4+Pj4gV2lsbCByZW1vdmUuCj4+Pj4KPj4+ Pj4KPj4+Pj4+ICsKPj4+Pj4+ICtfcmVxdWlyZV9zY3JhdGNoCj4+Pj4+PiArX3JlcXVpcmVfeGZz X2lvX2NvbW1hbmQgInB3cml0ZSIKPj4+Pj4+ICtfcmVxdWlyZV94ZnNfaW9fY29tbWFuZCAidHJ1 bmNhdGUiCj4+Pj4+PiArX3JlcXVpcmVfY29tbWFuZCAiJEYyRlNfSU9fUFJPRyIgZjJmc19pbwo+ Pj4+Pj4gK19yZXF1aXJlX2NoZWNrX2RtZXNnCj4+Pj4+PiArCj4+Pj4+PiArIyBDbGVhciBvcHRp b25zIHRvIGF2b2lkIGludGVyZmVyZW5jZSBmcm9tIGV4dGVybmFsIGNvbmZpZ3VyYXRpb25zCj4+ Pj4+PiArZXhwb3J0IE1LRlNfT1BUSU9OUz0iIgo+Pj4+Pj4gK2V4cG9ydCBNT1VOVF9PUFRJT05T PSIiCj4+Pj4+PiArCj4+Pj4+PiArIyBGb3JtYXQgd2l0aCA5Nk1CIHNpemUgYW5kIDIgc2VnbWVu dHMgcGVyIHNlY3Rpb24KPj4+Pj4+ICtfc2NyYXRjaF9ta2ZzX3NpemVkICQoKDk2ICogMTAyNCAq IDEwMjQpKSAiIiAiLXMgMiIgPj4gJHNlcXJlcy5mdWxsIDI+JjEKPj4+Pj4+ICsKPj4+Pj4+ICsj IE1vdW50IHdpdGggbW9kZT1sZnMKPj4+Pj4+ICtfc2NyYXRjaF9tb3VudCAtbyBtb2RlPWxmcyA+ PiAkc2VxcmVzLmZ1bGwgMj4mMQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe Xl5eXl5eXl5eXl5eXl5eXl5eXgo+Pj4+PiBJdCdzIGhlbHBsZXNzLCBkdWUgdG8gaWYgX3NjcmF0 Y2hfbW91bnQgZmFpbHMsIGl0IGV4aXQoKSBkaXJlY3RseS4KPj4+Pgo+Pj4+IFJpZ2h0LCB3aWxs IGZpeC4KPj4+Pgo+Pj4+Pgo+Pj4+Pj4gKwo+Pj4+Pj4gKyMgQ3JlYXRlIGZpbGVzIHRvIGZpbGwg d2hvbGUgZmlsZXN5c3RlbSwgdGhlbiBzZWdtZW50IHR5cGUgd2lsbCBiZSBjaGFuZ2VkIHRvIG5v ZGUgdHlwZQo+Pj4+Pj4gK2ZvciAoKGk9MDtpPDUxMjA7aSsrKSkgZG8KPj4+Pj4+ICsJdG91Y2gg JFNDUkFUQ0hfTU5ULyRpID4+ICRzZXFyZXMuZnVsbCAyPiYxCj4+Pj4+PiArZG9uZQo+Pj4+Pj4g K3N5bmMKPj4+Pj4+ICsKPj4+Pj4+ICsjIFJlbW92ZSBhbGwgZmlsZXMgdG8gY3JlYXRlIGZyZWUo ZW1wdHkpIG5vZGUgc2VnbWVudHMKPj4+Pj4+ICtybSAtZiAkU0NSQVRDSF9NTlQvKgo+Pj4+Pj4g K3N5bmMKPj4+Pj4+ICsKPj4+Pj4+ICsjIEFsbG9jYXRlIGZyZWUgc3BhY2Ugc28gdGhhdCB3ZSBo YXZlIGNoYW5jZSB0byByZXVzZSBmcmVlKGVtcHR5KSBub2RlIHNlZ21lbnRzCj4+Pj4+PiArJFhG U19JT19QUk9HIC1mIC1jICJwd3JpdGUgLWIgNGsgMCAxOTI4ayIgJFNDUkFUQ0hfTU5UL2ZpbGUg Pj4gJHNlcXJlcy5mdWxsIDI+JjEKPj4+Pj4+ICtzeW5jCj4+Pj4+PiArCj4+Pj4+PiArJFhGU19J T19QUk9HIC1jICJ0cnVuY2F0ZSAwIiAkU0NSQVRDSF9NTlQvZmlsZSA+PiAkc2VxcmVzLmZ1bGwg Mj4mMQo+Pj4+Pj4gKyRYRlNfSU9fUFJPRyAtZCAtYyAicHdyaXRlIC1iIDRrIDAgMTZNIiAkU0NS QVRDSF9NTlQvZmlsZSA+PiAkc2VxcmVzLmZ1bGwgMj4mMQo+Pj4+Pj4gKyRYRlNfSU9fUFJPRyAt YyAidHJ1bmNhdGUgMCIgJFNDUkFUQ0hfTU5UL2ZpbGUgPj4gJHNlcXJlcy5mdWxsIDI+JjEKPj4+ Pj4+ICskWEZTX0lPX1BST0cgLWQgLWMgInB3cml0ZSAtYiA0ayAwIDE2TSIgJFNDUkFUQ0hfTU5U L2ZpbGUgPj4gJHNlcXJlcy5mdWxsIDI+JjEKPj4+Pj4+ICskWEZTX0lPX1BST0cgLWMgInRydW5j YXRlIDAiICRTQ1JBVENIX01OVC9maWxlID4+ICRzZXFyZXMuZnVsbCAyPiYxCj4+Pj4+PiArc3lu Ywo+Pj4+Pj4gKwo+Pj4+Pj4gKyRYRlNfSU9fUFJPRyAtZCAtYyAicHdyaXRlIC1iIDRrIDAgOE0i ICRTQ1JBVENIX01OVC9maWxlID4+ICRzZXFyZXMuZnVsbCAyPiYxCj4+Pj4+PiArJFhGU19JT19Q Uk9HIC1jICJ0cnVuY2F0ZSAwIiAkU0NSQVRDSF9NTlQvZmlsZSA+PiAkc2VxcmVzLmZ1bGwgMj4m MQo+Pj4+Pj4gKyRYRlNfSU9fUFJPRyAtZCAtYyAicHdyaXRlIC1iIDRrIDAgMzJLIiAkU0NSQVRD SF9NTlQvZmlsZSA+PiAkc2VxcmVzLmZ1bGwgMj4mMQo+Pj4+Pj4gKyRYRlNfSU9fUFJPRyAtYyAi dHJ1bmNhdGUgMCIgJFNDUkFUQ0hfTU5UL2ZpbGUgPj4gJHNlcXJlcy5mdWxsIDI+JjEKPj4+Pj4+ ICskWEZTX0lPX1BST0cgLWQgLWMgInB3cml0ZSAtYiA0ayAwIDJNIiAtYyAiZnN5bmMiICRTQ1JB VENIX01OVC9maWxlID4+ICRzZXFyZXMuZnVsbCAyPiYxCj4+Pj4+PiArCj4+Pj4+PiArIyBTaHV0 ZG93biB0aGUgZmlsZXN5c3RlbSB3aXRob3V0IGNoZWNrcG9pbnQKPj4+Pj4+ICskRjJGU19JT19Q Uk9HIHNodXRkb3duIDIgJFNDUkFUQ0hfTU5UID4+ICRzZXFyZXMuZnVsbCAyPiYxCj4+Pj4+Cj4+ Pj4+IEknbSB3b25kZXJpbmcgaWYgd2UgY2FuIGhhdmUgZjJmcyBzdXBwb3J0aW5nIGluIGNvbW1v biBfc2NyYXRjaF9zaHV0ZG93bgo+Pj4+PiBoZWxwZXIgOikKPj4+Pgo+Pj4+IEkgdGhpbmsgd2Ug Y2FuIGNoYW5nZSBmMmZzIHRlc3RjYXNlIHRvIHVzZSBfc2NyYXRjaF9zaHV0ZG93biBiZWNhdXNl IHRoZSBkZWZpbml0aW9uIG9mCj4+Pj4gbm9sb2dmbHVzaCBzaHV0ZG93biBpbnRlcmZhY2UgaXMg dGhlIHNhbWUgYXMgeGZzJzoKPj4+Pgo+Pj4+IC8qCj4+Pj4gICogc2hvdWxkIGJlIHNhbWUgYXMg WEZTX0lPQ19HT0lOR0RPV04uCj4+Pj4gICogRmxhZ3MgZm9yIGdvaW5nIGRvd24gb3BlcmF0aW9u IHVzZWQgYnkgRlNfSU9DX0dPSU5HRE9XTgo+Pj4+ICAqLwo+Pj4+ICNkZWZpbmUgRjJGU19JT0Nf U0hVVERPV04JX0lPUignWCcsIDEyNSwgX191MzIpCS8qIFNodXRkb3duICovCj4+Pj4gI2RlZmlu ZSBGMkZTX0dPSU5HX0RPV05fTk9TWU5DCQkweDIJLyogZ29pbmcgZG93biAqLwo+Pj4+Cj4+Pj4g I2RlZmluZSBYRlNfSU9DX0dPSU5HRE9XTgkgICAgIF9JT1IgKCdYJywgMTI1LCB1aW50MzJfdCkK Pj4+PiAjZGVmaW5lIFhGU19GU09QX0dPSU5HX0ZMQUdTX05PTE9HRkxVU0gJCTB4MgkvKiBkb24n dCBmbHVzaCBsb2cgbm9yIGRhdGEgKi8KPj4+Pgo+Pj4+Pgo+Pj4+Pj4gKwo+Pj4+Pj4gK19zY3Jh dGNoX3VubW91bnQgPj4gJHNlcXJlcy5mdWxsIDI+JjEKPj4+Pj4gICAgICAgICAgICAgICAgICAg ICBeXl5eXl5eXl5eXl5eXl5eXl5eXgo+Pj4+Pgo+Pj4+PiBJZiB1bm1vdW50IGZhaWxzLCBob3cg YWJvdXQgbGV0IGl0IG91dHB1dCB0aGUgZXJyb3JzLCB0byBicmVhayB0aGUgZ29sZGVuIGltYWdl Pwo+Pj4+Cj4+Pj4gWWVzLCBpdCdzIGJldHRlci4KPj4+Pgo+Pj4+Pgo+Pj4+Pj4gKwo+Pj4+Pj4g K19zY3JhdGNoX21vdW50IC1vIG1vZGU9bGZzID4+ICRzZXFyZXMuZnVsbCAyPiYxCj4+Pj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eCj4+Pj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBsZXNzCj4+Pj4KPj4+PiBXaWxsIGZpeC4K Pj4+Pgo+Pj4+Pgo+Pj4+Pj4gKwo+Pj4+Pj4gKyMgUnVuIHVyZ2VudF9nYyBtb2RlIHRvIHRyaWdn ZXIgZ2FyYmFnZSBjb2xsZWN0aW9uCj4+Pj4+PiArZGV2X25hbWU9JChfc2hvcnRfZGV2ICRTQ1JB VENIX0RFVikKPj4+Pj4+ICtpZiBbIC1mIC9zeXMvZnMvZjJmcy8kZGV2X25hbWUvZ2NfdXJnZW50 IF07IHRoZW4KPj4+Pj4+ICsJZWNobyAxID4gL3N5cy9mcy9mMmZzLyRkZXZfbmFtZS9nY191cmdl bnQKPj4+Pj4+ICtmaQo+Pj4+Pgo+Pj4+PiBIbW0uLi4gd2hhdCBpZiB0aGVyZSdzIG5vdCAvc3lz L2ZzL2YyZnMvJGRldl9uYW1lL2djX3VyZ2VudD8gRG9lcyBpdAo+Pj4+PiBhZmZlY3QgdGhlIHRl c3QgcmVzdWx0Pwo+Pj4+Pgo+Pj4+PiBJZiBpdCBkb2VzLCB0aGlzJ3MgYSBuZWNlc3NhcnkgcmVx dWlyZW1lbnQgZm9yIHRoaXMgdGVzdCwgd2Ugc2hvdWxkbid0Cj4+Pj4+IGlnbm9yZSBpdCBhbmQg a2VlcCBydW5uaW5nLiBEb2VzICRGMkZTX0lPX1BST0cgcHJvdmlkZSBhIGNvbW1hbmQgdG8KPj4+ Pj4gbWFrZSBhIGZvcmNlIEdDPyBPciB3ZSBuZWVkIHRvIGNoZWNrIHRoaXMgZmlsZSBhbmQgX25v dHJ1biBpZiBpdCdzCj4+Pj4+IG5vdCBleGlzdGVkLgo+Pj4+Cj4+Pj4gQWgsIHJpZ2h0LCB0aGF0 J3MgZ29vZCBwb2ludCEKPj4+Pgo+Pj4+IFdlIGNhbiB1c2UgIiRGMkZTX0lPX1BST0cgZ2NfdXJn ZW50IDxkZXZfbmFtZT4gcnVuIDUiIGluc3RlYWQsIGl0IHdpbGwgZG8gYmVsb3cgY29tbWFuZHM6 Cj4+Pgo+Pj4gR3JlYXQsIEkganVzdCBob3BlIHRoZSAqZ2NfdXJnZW50KiBpc24ndCBhIG5ldyBm ZWF0dXJlIHdoaWNoIG5lZWRzIHNvbWV0aGluZyBsaWtlczoKPj4KPj4gSSBndWVzcyBpdCdzIG5v dCBhIG5ldyBzdWJjb21tYW5kIGZvciBmMmZzX2lvLAo+Pgo+PiBjb21taXQgMjJkNzU4ZTJlNmFm MjEwZGM5ZTZjZGY5OTQzOGYwNjMzODNiYTcyZgo+PiBBdXRob3I6IEphZWdldWsgS2ltIDxqYWVn ZXVrQGtlcm5lbC5vcmc+Cj4+IERhdGU6ICAgVHVlIEZlYiAxOSAxOTowNzoyMSAyMDE5IC0wODAw Cj4+Cj4+ICAgICBmMmZzX2lvOiBhZGQgZ2NfdXJnZW50Cj4+Cj4+ICAgICBlLmcuLAo+PiAgICAg ZjJmc19pbyBnY191cmdlbnQgZG0tNCBbc3RhcnQvZW5kL3J1bl0gW3RpbWUgaW4gc2VjXQo+Pgo+ PiAgICAgVGhpcyBjb250cm9scyBzeXNmcy9nY191cmdlbnQgdG8gcnVuIGYyZnNfZ2MgdXJnZW50 bHkuCj4+Cj4+ICAgICBTaWduZWQtb2ZmLWJ5OiBKYWVnZXVrIEtpbSA8amFlZ2V1a0BrZXJuZWwu b3JnPgo+Pgo+Pj4gYF9yZXF1aXJlX2YyZnNfaW8gZ2NfdXJnZW50YCAodGhlcmUncyBub3QgX3Jl cXVpcmVfZjJmc19pbzopCj4+Cj4+IEFncmVlZCwgd2UgbmVlZCB0byBpbnRyb2R1Y2UgX3JlcXVp cmVfZjJmc19pbygpLCBsZXQgbWUgd29yayBvbiB0aGlzLgo+IAo+IE9oLCAyMDE5IHdhcyA3IHll YXJzIGFnby4gTm8gb25lIHNob3VsZCBiZSBjb21wbGFpbmluZyBhYm91dCB0aGlzIHVubGVzcwo+ IHRoZXkncmUgb24gYSBzdXBlciBvbGQgZG93bnN0cmVhbSBmMmZzLXRvb2xzLiBCdXQgYW55d2F5 LCBoYXZpbmcKPiBfcmVxdWlyZV9mMmZzX2lvIGlzIGRlZmluaXRlbHkgZ29vZCBmb3IgZnV0dXJl IGYyZnMgdGVzdGluZyA6KQoKWWVhaCwgYWdyZWVkLgoKPiAKPiBUaGVyZWZvcmUsIF9yZXF1aXJl X2YyZnNfaW8gaXMgbm90IHN0cmljdGx5IHVyZ2VudCBmb3IgdGhpcyBwYXRjaC4gSXQncyB1cCB0 bwo+IHlvdSB3aGV0aGVyIHRvIGluY2x1ZGUgaXQgbm93IG9yIGhhbmRsZSBpdCBpbiBhIGxhdGVy IHVwZGF0ZS4KCkxldCBtZSB1cGRhdGUgYSBiaXQgbGF0ZXIuCgo+IAo+Pgo+Pj4KPj4+PiAxLiBl Y2hvIDEgPiAvc3lzL2ZzL2YyZnMvJGRldl9uYW1lL2djX3VyZ2VudAo+Pj4+IDIuIHNsZWVwIDUg c2Vjb25kcwo+Pj4+IDMuIGVjaG8gMCA+IC9zeXMvZnMvZjJmcy8kZGV2X25hbWUvZ2NfdXJnZW50 Cj4+Pgo+Pj4gSXQgYWxzbyBkZXBlbmRzIG9uIHRoZSAvc3lzL2ZzL2YyZnMvJGRldl9uYW1lL2dj X3VyZ2VudCB0b28uIFNvIHdlIGhhdmUgdG8gZmFjZQo+Pj4gdGhlIHNhbWUgcXVlc3Rpb246Cj4+ PiAgIElmIHRoaXMgZmlsZSBkb2Vzbid0IGV4aXN0LCBzaG91bGQgdGhpcyB0ZXN0IGNhc2UgX25v dHJ1bj8KPj4KPj4gT2gsIHJpZ2h0LCBtYXliZSB3ZSBjYW4gaW50cm9kdWNlIF9yZXF1aXJlX2Yy ZnNfc3lzZnMoKSB0byBjaGVjayB3aGV0aGVyIGYyZnMga2VybmVsCj4+IG1vZHVsZSBoYXMgc3Vw cG9ydGVkIHRhcmdldCBzeXNmcyBub2RlPwo+IAo+IFRoZXJlJ3MgYSBfcmVxdWlyZV9mc19zeXNm c19hdHRyLCBzby4uLgo+IAo+IGlmIHlvdSBkb24ndCBjYXJlIGFib3V0ICRTQ1JBVENIX0RFViBp cyBtb3VudGVkIG9yIG5vdCwgeW91IGNhbjoKPiAgIF9yZXF1aXJlX2ZzX3N5c2ZzX2F0dHIgJFRF U1RfREVWIGdjX3VyZ2VudAoKZ2NfdXJnZW50IGlzIG5vdCBhIHBlci1pbWFnZSBmZWF0dXJlLCBz byBhYm92ZSB2ZXJzaW9uIGxvb2tzIGZpbmUuCgo+IAo+IG9yIGFmdGVyIF9zY3JhdGNoX21vdW50 Ogo+ICAgX3JlcXVpcmVfZnNfc3lzZnNfYXR0ciAkU0NSQVRDSF9ERVYgZ2NfdXJnZW50Cj4gCj4g VGhlbiBJIHRoaW5rIHlvdSBjYW4gZWl0aGVyIHVzZSBgJEYyRlNfSU9fUFJPRyBnY191cmdlbnRg LCBvciBpZiB5b3UncmUgd29ycmllZAo+IGFib3V0IGl0cyBjb21wYXRpYmlsaXR5LCB5b3UgY2Fu OgoKSSdtIG5vdCB3b3JyaWVkIGFib3V0IHRoZSBjb21wYXRpYmlsaXR5LgoKPiAgIF9zZXRfZnNf c3lzZnNfYXR0ciAkU0NSQVRDSF9ERVYgZ2NfdXJnZW50IDEKPiAgIHNsZWVwIDUKClRoYW5rcyBm b3IgdGhlIHN1Z2dlc3Rpb24uIDopCgpMZXQgbWUgdXBkYXRlIHcvOgoKX3JlcXVpcmVfZnNfc3lz ZnNfYXR0ciAkVEVTVF9ERVYgZ2NfdXJnZW50Ci4uLgokRjJGU19JT19QUk9HIGdjX3VyZ2VudAoK VGhhbmtzLAoKPiAKPiBUaGFua3MsCj4gWm9ycm8KPiAKPj4KPj4gVGhhbmtzLAo+Pgo+Pj4KPj4+ IFRoYW5rcywKPj4+IFpvcnJvCj4+Pgo+Pj4+Cj4+Pj4+Cj4+Pj4+PiArCj4+Pj4+PiArIyBXYWl0 IGJhY2tncm91bmQgR0MgdGhyZWFkIHRvIHdha2UgdXAgdG8gcnVuIGFuZCBwb3RlbnRpYWxseSBl bmNvdW50ZXIgdGhlIGluY29uc2lzdGVuY3kKPj4+Pj4+ICtzbGVlcCA1Cj4+Pj4+Cj4+Pj4+IERv ZXMgdGhpcyBzbGVlcCB0cnkgdG8gd2FpdCBhYm92ZSAiZWNobyAxID4gL3N5cy9mcy9mMmZzLyRk ZXZfbmFtZS9nY191cmdlbnQiPwo+Pj4+PiBJZiBzbywgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBt b3ZlIGl0IGludG8gdGhlICJpZi10aGVuIiBsb2dpYy4KPj4+Pj4KPj4+Pj4+ICsKPj4+Pj4+ICtf c2NyYXRjaF91bm1vdW50ID4+ICRzZXFyZXMuZnVsbCAyPiYxCj4+Pj4+ICAgICAgICAgICAgICAg ICAgICAgXl5eXl5eXl5eXl5eXl5eXl5eXl4KPj4+Pj4gU2FtZSBhcyBhYm92ZS4KPj4+Pgo+Pj4+ IFdpbGwgZml4Lgo+Pj4+Cj4+Pj4+Cj4+Pj4+PiArCj4+Pj4+PiArIyBDaGVjayB3aGV0aGVyIHRo ZSBkbWVzZyBoYXMgdGhlIHdhcm5pbmcgaW5kaWNhdGluZyB0aGUgYnVnCj4+Pj4+PiArX2NoZWNr X2RtZXNnX2ZvciAiRjJGUy1mcyBcKCRkZXZfbmFtZVwpOiBJbmNvbnNpc3RlbnQgc2VnbWVudCIg JiYgXAo+Pj4+Pj4gKwlfZmFpbCAiRjJGUy1mcyAoJGRldl9uYW1lKTogSW5jb25zaXN0ZW50IHNl Z21lbnQgdHlwZSBkZXRlY3RlZCBpbiBkbWVzZyEiCj4+Pj4+PiArCj4+Pj4+PiArZWNobyAiU2ls ZW5jZSBpcyBnb2xkZW4iCj4+Pj4+PiArc3RhdHVzPTAKPj4+Pj4+ICtleGl0Cj4+Pj4+Cj4+Pj4+ IFdlJ3ZlIHJlcGxhY2VkICJzdGF0dXM9MDtleGl0OyIgd2l0aCAiX2V4aXQgMCIuCj4+Pj4KPj4+ PiBXaWxsIGZpeC4KPj4+Pgo+Pj4+IFRoYW5rcywKPj4+Pgo+Pj4+Pgo+Pj4+PiBUaGFua3MsCj4+ Pj4+IFpvcnJvCj4+Pj4+Cj4+Pj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvZjJmcy8wMjUub3V0IGIv dGVzdHMvZjJmcy8wMjUub3V0Cj4+Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4+Pj4gaW5k ZXggMDAwMDAwMDAwLi4zZDcwOTUxZWYKPj4+Pj4+IC0tLSAvZGV2L251bGwKPj4+Pj4+ICsrKyBi L3Rlc3RzL2YyZnMvMDI1Lm91dAo+Pj4+Pj4gQEAgLTAsMCArMSwyIEBACj4+Pj4+PiArUUEgb3V0 cHV0IGNyZWF0ZWQgYnkgMDI1Cj4+Pj4+PiArU2lsZW5jZSBpcyBnb2xkZW4KPj4+Pj4+IC0tIAo+ Pj4+Pj4gMi40OS4wCj4+Pj4+Pgo+Pj4+Cj4+Pj4KPj4KPj4KCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5nIGxp c3QKTGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5z b3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbGludXgtZjJmcy1kZXZlbAo=