[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