[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 07:46:35 CEST 2023
on 2023/04/04 11:10, xuyang2018.jy@fujitsu.com wrote:
>
> 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
Sorry, I did a mistake, I just test regular file on /tmp instead of on
real ext4 or xfs filesystem because testfile does't under mntpoint.
-#define TESTFILE "testfile"
+#define TESTFILE MNTPOINT"/testfile"
Best Regards
Yang Xu
> 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