[LTP] [PATCH v1] syscalls/ioctl08: add file deduplication testcases

Petr Vorel pvorel@suse.cz
Thu Mar 21 11:53:42 CET 2019


Hi Christian,

LGTM, nice, with some comments below.
Reviewed-by: Petr Vorel <pvorel@suse.cz>

> +#ifndef SUCCESS
I wonder if this needs to be checked for. Not sure, but maybe to get error for redefinition is better than having errors when SUCCESS is defined for something else than 0.
> +#define SUCCESS 0
> +#endif

...
> +static struct tcase {
> +	uint64_t	src_length;
> +	char		*src_fcontents;
> +	char		*dest_fcontents;
> +	int		exp_err;
> +	uint64_t	bytes_deduped;
> +	int		status;
> +} tcases[] = {
> +	{3, "AAA", "AAA", SUCCESS, 3, FILE_DEDUPE_RANGE_SAME},
> +	{3, "AAA", "AAB", SUCCESS, 0, FILE_DEDUPE_RANGE_DIFFERS},
> +	{-1, "AAA", "AAA", EINVAL, 0, 0},

Some old distros don't have FILE_DEDUPE_RANGE_SAME,
FILE_DEDUPE_RANGE_DIFFERS and required structs file_dedupe_range_info [1]
ioctl08.c:50:32: error: 'FILE_DEDUPE_RANGE_SAME' undeclared here (not in a function)
  {3, "AAA", "AAA", SUCCESS, 3, FILE_DEDUPE_RANGE_SAME},
                                ^
ioctl08.c:50:2: warning: missing initializer for field 'status' of 'struct tcase' [-Wmissing-field-initializers]
  {3, "AAA", "AAA", SUCCESS, 3, FILE_DEDUPE_RANGE_SAME},
  ^
ioctl08.c:48:7: note: 'status' declared here
  int  status;
       ^
ioctl08.c:51:32: error: 'FILE_DEDUPE_RANGE_DIFFERS' undeclared here (not in a function)
  {3, "AAA", "AAB", SUCCESS, 0, FILE_DEDUPE_RANGE_DIFFERS},
                                ^
ioctl08.c:51:2: warning: missing initializer for field 'status' of 'struct tcase' [-Wmissing-field-initializers]
  {3, "AAA", "AAB", SUCCESS, 0, FILE_DEDUPE_RANGE_DIFFERS},
  ^
ioctl08.c:48:7: note: 'status' declared here
  int  status;
       ^
ioctl08.c: In function 'verify_ioctl':
ioctl08.c:65:24: error: invalid application of 'sizeof' to incomplete type 'struct file_dedupe_range'
  memset(fdr, 0, sizeof(struct file_dedupe_range) +
                        ^
ioctl08.c:66:11: error: invalid application of 'sizeof' to incomplete type 'struct file_dedupe_range_info'
    sizeof(struct file_dedupe_range_info));
           ^
ioctl08.c:65:50: error: invalid operands to binary + (have 'struct tcase *' and 'struct tcase *')
  memset(fdr, 0, sizeof(struct file_dedupe_range) +
                                                  ^
ioctl08.c:65:17: warning: passing argument 3 of 'memset' makes integer from pointer without a cast
  memset(fdr, 0, sizeof(struct file_dedupe_range) +
                 ^
In file included from /usr/include/features.h:374:0,
                 from /usr/include/stdlib.h:24,
                 from ioctl08.c:22:
/usr/include/x86_64-linux-gnu/bits/string3.h:76:1: note: expected 'size_t' but argument is of type 'struct tcase *'
 __NTH (memset (void *__dest, int __ch, size_t __len))

[1] https://api.travis-ci.org/v3/job/509171728/log.txt

.min_kver is a runtime check, but we need a compile time check. I guess instead
of adding everything into include/lapi/fs.h and then checking for ENOSYS would
be better to do  some autotools checks for these structs (probably
AC_CHECK_TYPES) and failing with TST_TEST_TCONF (as you do, but only as else for
#ifdef HAVE_LINUX_FS_H, which is obviously not enough.

Kind regards,
Petr


More information about the ltp mailing list