On 3/25/25 09:18, Zorro Lang wrote:
> On Mon, Mar 24, 2025 at 08:38:36PM +0800, Chao Yu wrote:
>> This is a regression testcase to check whether we will handle database
>> inode dirty status correctly:
>> 1. create a regular file, and write data into the file
>> 2. start transaction on the file (via F2FS_IOC_START_ATOMIC_WRITE)
>> 3. write transaction data to the file
>> 4. rename the file
>> 5. commit and end the transaction (via F2FS_IOC_COMMIT_ATOMIC_WRITE)
>> 6. drop caches in order to call f2fs_evict_inode()
>> It expects kernel panic will gone after we apply commit 03511e936916
>> ("f2fs: fix inconsistent dirty state of atomic file").
>>
>> Cc: Jaegeuk Kim <jaeg...@kernel.org>
>> Cc: Daeho Jeong <daehoje...@google.com>
>> Cc: Jianan Huang <huangjia...@xiaomi.com>
>> Signed-off-by: Chao Yu <c...@kernel.org>
>> ---
>>  tests/f2fs/010     | 68 ++++++++++++++++++++++++++++++++++++++++++++++
>>  tests/f2fs/010.out |  2 ++
>>  2 files changed, 70 insertions(+)
>>  create mode 100755 tests/f2fs/010
>>  create mode 100644 tests/f2fs/010.out
>>
>> diff --git a/tests/f2fs/010 b/tests/f2fs/010
>> new file mode 100755
>> index 00000000..360c09b9
>> --- /dev/null
>> +++ b/tests/f2fs/010
>> @@ -0,0 +1,68 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2025 Chao Yu.  All Rights Reserved.
>> +#
>> +# FS QA Test No. f2fs/010
>> +#
>> +# This is a regression testcase to check whether we will handle database
>> +# inode dirty status correctly:
>> +# 1. create a regular file, and write data into the file
>> +# 2. start transaction on the file (via F2FS_IOC_START_ATOMIC_WRITE)
>> +# 3. write transaction data to the file
>> +# 4. rename the file
>> +# 5. commit and end the transaction (via F2FS_IOC_COMMIT_ATOMIC_WRITE)
>> +# 6. drop caches in order to call f2fs_evict_inode()
>> +# It expects kernel panic will gone after we apply commit 03511e936916
>> +# ("f2fs: fix inconsistent dirty state of atomic file").
>> +#
>> +. ./common/preamble
>> +_begin_fstest auto quick
>> +
>> +_cleanup()
>> +{
>> +    kill -9 $atomic_write_pid > /dev/null 2>&1
> 
> [ -n "$atomic_write_pid" ] && kill -9 $atomic_write_pid
> 
>> +    wait
>> +    cd /
>> +    rm -r -f $tmp.*
>> +}
>> +
>> +_fixed_by_kernel_commit 03511e936916 \
>> +    "f2fs: fix inconsistent dirty state of atomic file"
>> +
>> +_require_scratch
>> +_require_command "$F2FS_IO_PROG" f2fs_io
>> +
>> +_scratch_mkfs >> $seqres.full
>> +_scratch_mount >> $seqres.full
>> +
>> +src_db=$SCRATCH_MNT/src.db
>> +dst_db=$SCRATCH_MNT/dst.db
>> +
>> +# initialize database file
>> +$XFS_IO_PROG -c "pwrite 0 4k" -c "fsync" -f $src_db >> $seqres.full
>> +
>> +# sync filesystem to clear dirty inode
>> +sync
>> +
>> +# start atomic_write on src.db database file and commit transaction after 
>> 3000ms
>> +$F2FS_IO_PROG write 1 0 0 zero atomic_commit $src_db 3000 >> $seqres.full &
>> +atomic_write_pid=$!
>> +
>> +# wait a moment to let atomic write starts
>> +sleep 1
>> +
>> +# it will dirty inode when updating i_pino
>> +mv $src_db $dst_db
>> +
>> +# wait for atomic_write commit completion
>> +sleep 4
>> +
>> +# drop caches in order to call f2fs_evict_inode()
>> +echo 3 > /proc/sys/vm/drop_caches
>> +
>> +wait $atomic_write_pid
> 
> So after this line, the $atomic_write_pid has been released. If so, how about:
> 
> unset atomic_write_pid
> 
> And then in _cleanup function .... (see above)
> 
> Others look good to me,

Oh, correct, will fix this. Thank you!

Thanks,

> 
> Thanks,
> Zorro
> 
>> +
>> +echo "Silence is golden"
>> +
>> +status=0
>> +exit
>> diff --git a/tests/f2fs/010.out b/tests/f2fs/010.out
>> new file mode 100644
>> index 00000000..1d83a8d6
>> --- /dev/null
>> +++ b/tests/f2fs/010.out
>> @@ -0,0 +1,2 @@
>> +QA output created by 010
>> +Silence is golden
>> -- 
>> 2.48.1
>>
> 



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to