Fix Linux fallocate tests for EOPNOTSUPP

The fallocate syscall might fail on Linux due missing support from
underlying filesystem (for instance some NFS versions).  This patch
adds this check for fallocate tests.  It also moves tst-fallocate{64}
to 'io' folder (since it is on fallocate{64} is built).

Checked on x86_64.

	* sysdeps/unix/sysv/linux/Makefile [$(subdir) = math] (tests): Move
	tst-fallocate{64}.
	* sysdeps/unix/sysv/linux/tst-fallocate-common.c: Check for EOPNOTSUPP
	on syscall return.
This commit is contained in:
Adhemerval Zanella 2016-10-17 16:59:17 -02:00
parent b3d17c1cf2
commit a9bfffe593
3 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2016-10-18 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* sysdeps/unix/sysv/linux/Makefile [$(subdir) = math] (tests): Move
tst-fallocate{64}.
* sysdeps/unix/sysv/linux/tst-fallocate-common.c: Check for EOPNOTSUPP
on syscall return.
2016-10-17 Carlos O'Donell <carlos@redhat.com> 2016-10-17 Carlos O'Donell <carlos@redhat.com>
[BZ #20689] [BZ #20689]

View File

@ -43,7 +43,7 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
bits/mman-linux.h bits/mman-linux.h
tests += tst-clone tst-clone2 tst-fanotify tst-personality tst-quota \ tests += tst-clone tst-clone2 tst-fanotify tst-personality tst-quota \
tst-fallocate tst-fallocate64 tst-sync_file_range tst-sync_file_range
# Generate the list of SYS_* macros for the system calls (__NR_* macros). # Generate the list of SYS_* macros for the system calls (__NR_* macros).
@ -173,6 +173,8 @@ ifeq ($(subdir),io)
sysdep_routines += xstatconv internal_statvfs internal_statvfs64 \ sysdep_routines += xstatconv internal_statvfs internal_statvfs64 \
sync_file_range fallocate fallocate64 sync_file_range fallocate fallocate64
sysdep_headers += bits/fcntl-linux.h sysdep_headers += bits/fcntl-linux.h
tests += tst-fallocate tst-fallocate64
endif endif
ifeq ($(subdir),elf) ifeq ($(subdir),elf)

View File

@ -58,7 +58,13 @@ do_test_with_offset (off_t offset)
and check if both buffer have the same contents. */ and check if both buffer have the same contents. */
ret = fallocate (temp_fd, 0, offset, BLK_SIZE); ret = fallocate (temp_fd, 0, offset, BLK_SIZE);
if (ret == -1) if (ret == -1)
FAIL_EXIT1 ("fallocate failed"); {
/* fallocate might not be fully supported by underlying filesystem (for
instance some NFS versions). */
if (errno == EOPNOTSUPP)
FAIL_EXIT (77, "fallocate not supported");
FAIL_EXIT1 ("fallocate failed");
}
ret = fstat (temp_fd, &finfo); ret = fstat (temp_fd, &finfo);
if (ret == -1) if (ret == -1)