[LTP] [PATCH v2 2/4] syscalls/statx10: Add basic test for STATX_DIOALIGN on regular file
xuyang2018.jy@fujitsu.com
xuyang2018.jy@fujitsu.com
Tue Apr 4 05:10:19 CEST 2023
on 2023/04/04 1:01, Eric Biggers wrote:
> On Mon, Apr 03, 2023 at 06:44:34PM +0800, Yang Xu wrote:
>> +static void verify_statx(void)
>> +{
>> + struct statx buf;
>> +
>> + memset(&buf, 0, sizeof(buf));
>> + TST_EXP_PASS(statx(AT_FDCWD, TESTFILE, 0, STATX_DIOALIGN, &buf),
>> + "statx(AT_FDCWD, %s, 0, STATX_DIOALIGN, &buf)", TESTFILE);
>> +
>> + if (!(buf.stx_mask & STATX_DIOALIGN)) {
>> + tst_res(TCONF, "STATX_DIOALIGN is not supported until linux 6.1");
>> + return;
>> + }
>> +
>> + if (buf.stx_dio_mem_align != 0)
>> + tst_res(TPASS, "stx_dio_mem_align:%u", buf.stx_dio_mem_align);
>> + else
>> + tst_res(TFAIL, "don't get stx_dio_mem_align on supported dio fs");
>> +
>> + if (buf.stx_dio_offset_align != 0)
>> + tst_res(TPASS, "stx_dio_offset_align:%u", buf.stx_dio_offset_align);
>> + else
>> + tst_res(TFAIL, "don't get stx_dio_offset_align on supported dio fs");
>> +}
>> +
>> +static void setup(void)
>> +{
>> + if (strcmp(tst_device->fs_type, "xfs") && strcmp(tst_device->fs_type, "ext4"))
>> + tst_brk(TCONF, "This test only supports ext4 and xfs");
>> +
>> + SAFE_FILE_PRINTF(TESTFILE, "AAAA");
>> + fd = open(TESTFILE, O_RDWR | O_DIRECT);
>> + if (fd == -1 && errno == EINVAL)
>> + tst_brk(TCONF, "The regular file is not on a filesystem that support DIO");
>> +}
>
> On ext4, files that use certain filesystem features (data journalling,
> encryption, and verity) fall back to buffered I/O. This test will fail when
> passed such a file, as it assumes that DIO doesn't fall back to buffered I/O.
Yes, I also reproduce it when I mount a partion with data=journal on
/tmp directory.
mount -o data=journal /dev/vdb /tmp
[root@localhost statx]# ./statx10
......
tst_test.c:1634: TINFO: === Testing on ext2 ===
tst_test.c:1093: TINFO: Formatting /dev/loop0 with ext2 opts='' extra
opts=''
mke2fs 1.46.5 (30-Dec-2021)
statx10.c:59: TCONF: This test only supports ext4 and xfs
tst_test.c:1634: TINFO: === Testing on ext3 ===
tst_test.c:1093: TINFO: Formatting /dev/loop0 with ext3 opts='' extra
opts=''
mke2fs 1.46.5 (30-Dec-2021)
statx10.c:59: TCONF: This test only supports ext4 and xfs
tst_test.c:1634: TINFO: === Testing on ext4 ===
tst_test.c:1093: TINFO: Formatting /dev/loop0 with ext4 opts='' extra
opts=''
mke2fs 1.46.5 (30-Dec-2021)
statx10.c:37: TPASS: statx(AT_FDCWD, testfile, 0, STATX_DIOALIGN, &buf)
passed
statx10.c:48: TFAIL: don't get stx_dio_mem_align on supported dio fs
statx10.c:53: TFAIL: don't get stx_dio_offset_align on supported dio fs
tst_test.c:1634: TINFO: === Testing on xfs ===
tst_test.c:1093: TINFO: Formatting /dev/loop0 with xfs opts='' extra opts=''
statx10.c:37: TPASS: statx(AT_FDCWD, testfile, 0, STATX_DIOALIGN, &buf)
passed
statx10.c:48: TFAIL: don't get stx_dio_mem_align on supported dio fs
statx10.c:53: TFAIL: don't get stx_dio_offset_align on supported dio fs
tst_test.c:1634: TINFO: === Testing on tmpfs ===
tst_test.c:1093: TINFO: Skipping mkfs for TMPFS filesystem
tst_test.c:1074: TINFO: Limiting tmpfs size to 32MB
statx10.c:59: TCONF: This test only supports ext4 and xfs
IMO, If we use a actual block device to test instead of use a loop
device on /tmp directory, it should be ok.
export LTP_DEV=/dev/vdb
tst_test.c:1634: TINFO: === Testing on ext2 ===
tst_test.c:1093: TINFO: Formatting /dev/vdb with ext2 opts='' extra opts=''
mke2fs 1.46.5 (30-Dec-2021)
statx10.c:59: TCONF: This test only supports ext4 and xfs
tst_test.c:1634: TINFO: === Testing on ext3 ===
tst_test.c:1093: TINFO: Formatting /dev/vdb with ext3 opts='' extra opts=''
mke2fs 1.46.5 (30-Dec-2021)
statx10.c:59: TCONF: This test only supports ext4 and xfs
tst_test.c:1634: TINFO: === Testing on ext4 ===
tst_test.c:1093: TINFO: Formatting /dev/vdb with ext4 opts='' extra opts=''
mke2fs 1.46.5 (30-Dec-2021)
statx10.c:37: TPASS: statx(AT_FDCWD, testfile, 0, STATX_DIOALIGN, &buf)
passed
statx10.c:46: TPASS: stx_dio_mem_align:512
statx10.c:51: TPASS: stx_dio_offset_align:512
tst_test.c:1634: TINFO: === Testing on xfs ===
tst_test.c:1093: TINFO: Formatting /dev/vdb with xfs opts='' extra opts=''
statx10.c:37: TPASS: statx(AT_FDCWD, testfile, 0, STATX_DIOALIGN, &buf)
passed
statx10.c:46: TPASS: stx_dio_mem_align:512
statx10.c:51: TPASS: stx_dio_offset_align:512
tst_test.c:1634: TINFO: === Testing on tmpfs ===
tst_test.c:1093: TINFO: Skipping mkfs for TMPFS filesystem
tst_test.c:1074: TINFO: Limiting tmpfs size to 32MB
statx10.c:59: TCONF: This test only supports ext4 and xfs
>
> How is it guaranteed that such a file is not passed to this test?
Since /etc/mk2fs.conf doesn't enable data=journal, encrypt, verity
feature by default and ltp use default mkfs configure , mount option.
I think we can detect dio io support before mount.
Best Regards
Yang Xu
>
> - Eric
More information about the ltp
mailing list