[LTP] [PATCH 2/3] syscalls/statx10: Add basic test for STATX_DIOALIGN

xuyang2018.jy@fujitsu.com xuyang2018.jy@fujitsu.com
Fri Mar 31 14:56:47 CEST 2023


Hi Eric

> Hi Yang,
> 
> On Thu, Mar 30, 2023 at 04:22:48PM +0800, Yang Xu wrote:
>> diff --git a/testcases/kernel/syscalls/statx/statx10.c b/testcases/kernel/syscalls/statx/statx10.c
>> new file mode 100644
>> index 000000000..7a2c92ad2
>> --- /dev/null
>> +++ b/testcases/kernel/syscalls/statx/statx10.c
>> @@ -0,0 +1,81 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later
>> +/*
>> + * Copyright (c) 2023 FUJITSU LIMITED. All rights reserved.
>> + * Author: Yang Xu <xuyang2018.jy@fujitsu.com>
>> + */
>> +
>> +/*\
>> + * [Description]
>> + *
>> + * It is a basic test for STATX_DIOALIGN mask.
>> + *
>> + * - STATX_DIOALIGN   Want stx_dio_mem_align and stx_dio_offset_align value
>> + *
>> + * Minimum Linux version required is v6.1.
>> + */
>> +
>> +#define _GNU_SOURCE
>> +#include <sys/types.h>
>> +#include <unistd.h>
>> +#include <fcntl.h>
>> +#include <stdlib.h>
>> +#include <stdbool.h>
>> +#include "tst_test.h"
>> +#include "lapi/stat.h"
>> +
>> +#ifdef HAVE_STRUCT_STATX_STX_DIO_MEM_ALIGN
>> +#define MNTPOINT "mnt_point"
>> +#define TESTFILE "testfile"
>> +
>> +static int fd = -1;
>> +
>> +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");
>> +}
> 
> Thanks for writing a test for STATX_DIOALIGN!
> 
> However, the above code isn't actually a valid test, since stx_dio_mem_align and
> stx_dio_offset_align will be 0 if the file doesn't support DIO.  This is
> documented in the statx(2) manual page. 

  I have reported TCONF in setup when fail to open a file with O_DIRECT.

> Filesystems aren't guaranteed to
> support DIO, if they do, they aren't guaranteed to support it on all files.

In this case, I only test a regular file.

> 
> I think you might be assuming that STATX_DIOALIGN won't be set in stx_mask if
> DIO is unsupported on the file.  That's not quite correct.  If STATX_DIOALIGN is
> not set, that just means the filesystem doesn't support STATX_DIOALIGN.  In that
> case, DIO might or might not be supported on the file.  The filesystem just
> isn't making a statement one way or the other.

I just assume that for a filesystem that supported DIO. if I use statx 
with STATX_DIOALIGN mask, then I can get this mask for regular file  and 
also get dio related info on new kernel. For old kernel, it should not 
be get.

> 
> I gave some thoughts on possible tests for STATX_DIOALIGN here:
> https://lore.kernel.org/fstests/Y7fU4pRA+LHhsMKj@sol.localdomain/
> Can you take a look at that?

When I wrote this case, I have seen this email(I am also active in 
xfstests community). I got this idea that test nonzero fields for 
stx_dio_mem_align from your email with Boyang Xue.

Best Regards
Yang Xu
> 
> Thanks,
> 
> - Eric


More information about the ltp mailing list