axboe / fio

Flexible I/O Tester
GNU General Public License v2.0
5.25k stars 1.26k forks source link

fio fails to compile at Arch because of glusterfs API incompatibility #781

Closed anatol closed 5 years ago

anatol commented 5 years ago

Trying to compile the project at Arch Linux and it fails:

Operating system              Linux
CPU                           x86_64
Big endian                    no
Compiler                      gcc
Cross compile                 no

Static build                  no
Wordsize                      64
zlib                          yes
Linux AIO support             yes
POSIX AIO support             yes
POSIX AIO support needs -lrt  yes
POSIX AIO fsync               yes
POSIX pshared support         yes
Solaris AIO support           no
__sync_fetch_and_add          yes
__sync_synchronize            yes
__sync_val_compare_and_swap   yes
libverbs                      no
rdmacm                        no
asprintf()                    yes
vasprintf()                   yes
Linux fallocate               yes
POSIX fadvise                 yes
POSIX fallocate               yes
sched_setaffinity(3 arg)      yes
sched_setaffinity(2 arg)      no
clock_gettime                 yes
CLOCK_MONOTONIC               yes
CLOCK_MONOTONIC_RAW           yes
CLOCK_MONOTONIC_PRECISE       no
clockid_t                     yes
gettimeofday                  yes
fdatasync                     yes
sync_file_range               yes
EXT4 move extent              yes
Linux splice(2)               yes
GUASI                         no
libnuma                       yes
libnuma v2                    yes
strsep                        yes
strcasestr                    yes
strlcat                       no
getopt_long_only()            yes
inet_aton                     yes
socklen_t                     yes
__thread                      yes
gtk 2.18 or higher            yes
RUSAGE_THREAD                 yes
SCHED_IDLE                    yes
TCP_NODELAY                   yes
Net engine window_size        yes
TCP_MAXSEG                    yes
RLIMIT_MEMLOCK                yes
pwritev/preadv                yes
pwritev2/preadv2              yes
IPv6 helpers                  yes
http engine                   yes
Rados engine                  no
Rados Block Device engine     no
setvbuf                       yes
Gluster API engine            yes
Gluster API use fadvise       no
Gluster API trim support      no
s390_z196_facilities          no
HDFS engine                   no
MTD                           yes
libpmem                       no
libpmemblk                    no
PMDK pmemblk engine           no
PMDK dev-dax engine           no
PMDK libpmem engine           no
DDN's Infinite Memory Engine  no
iscsi engine                  no
lex/yacc for arithmetic       no
getmntent                     yes
getmntinfo                    no
Static Assert                 yes
bool                          yes
strndup                       yes
Valgrind headers              no
Zoned block device support    yes
march_armv8_a_crc_crypto      no
cuda                          no
mkdir(a, b)                   yes
Build march=native            no
CUnit                         no
__kernel_rwf_t                yes
-Wimplicit-fallthrough        yes
MADV_HUGEPAGE                 yes
FIO_VERSION = fio-3.14
    CC crc/crc16.o
    CC crc/crc32.o
    CC crc/crc32c-arm64.o
    CC crc/crc32c-intel.o
    CC crc/crc32c.o
    CC crc/crc64.o
    CC crc/crc7.o
    CC crc/fnv.o
    CC crc/md5.o
    CC crc/murmur3.o
    CC crc/sha1.o
    CC crc/sha256.o
    CC crc/sha3.o
    CC crc/sha512.o
    CC crc/test.o
    CC crc/xxhash.o
    CC lib/axmap.o
    CC lib/bloom.o
    CC lib/flist_sort.o
    CC lib/gauss.o
    CC lib/getrusage.o
    CC lib/hweight.o
    CC lib/ieee754.o
    CC lib/lfsr.o
    CC lib/memalign.o
    CC lib/memcpy.o
    CC lib/mountcheck.o
    CC lib/num2str.o
    CC lib/output_buffer.o
    CC lib/pattern.o
    CC lib/prio_tree.o
    CC lib/rand.o
    CC lib/rbtree.o
    CC lib/strntol.o
    CC lib/zipf.o
    CC gettime.o
    CC ioengines.o
    CC init.o
    CC stat.o
    CC log.o
    CC time.o
    CC filesetup.o
    CC eta.o
    CC verify.o
    CC memory.o
    CC io_u.o
    CC parse.o
    CC fio_sem.o
    CC rwlock.o
    CC pshared.o
    CC options.o
    CC smalloc.o
    CC filehash.o
    CC profile.o
    CC debug.o
    CC engines/cpu.o
    CC engines/mmap.o
    CC engines/sync.o
    CC engines/null.o
    CC engines/net.o
    CC engines/ftruncate.o
    CC engines/filecreate.o
    CC server.o
    CC client.o
    CC iolog.o
    CC backend.o
    CC libfio.o
    CC flow.o
    CC cconv.o
    CC gettime-thread.o
    CC helpers.o
    CC json.o
    CC idletime.o
    CC td_error.o
    CC profiles/tiobench.o
    CC profiles/act.o
    CC io_u_queue.o
    CC filelock.o
    CC workqueue.o
    CC rate-submit.o
    CC optgroup.o
    CC helper_thread.o
    CC steadystate.o
    CC zone-dist.o
    CC engines/libaio.o
    CC engines/posixaio.o
    CC engines/falloc.o
    CC engines/e4defrag.o
    CC engines/splice.o
    CC engines/http.o
    CC oslib/asprintf.o
    CC oslib/strlcat.o
    CC engines/glusterfs.o
    CC engines/glusterfs_sync.o
engines/glusterfs.c: In function ‘fio_gf_open_file’:
engines/glusterfs.c:291:10: error: too few arguments to function ‘glfs_ftruncate’
    ret = glfs_ftruncate(g->fd, f->real_file_size);
          ^~~~~~~~~~~~~~
In file included from engines/gfapi.h:1,
                 from engines/glusterfs.c:8:
/usr/include/glusterfs/api/glfs.h:768:1: note: declared here
 glfs_ftruncate(glfs_fd_t *fd, off_t length, struct glfs_stat *prestat,
 ^~~~~~~~~~~~~~
engines/glusterfs.c:353:10: error: too few arguments to function ‘glfs_fsync’
      if (glfs_fsync(g->fd) < 0) {
          ^~~~~~~~~~
In file included from engines/gfapi.h:1,
                 from engines/glusterfs.c:8:
/usr/include/glusterfs/api/glfs.h:790:1: note: declared here
 glfs_fsync(glfs_fd_t *fd, struct glfs_stat *prestat,
 ^~~~~~~~~~
make: *** [Makefile:370: engines/glusterfs.o] Error 1
make: *** Waiting for unfinished jobs....
engines/glusterfs_sync.c: In function ‘fio_gf_queue’:
engines/glusterfs_sync.c:45:9: error: too few arguments to function ‘glfs_fsync’
   ret = glfs_fsync(g->fd);
         ^~~~~~~~~~
In file included from engines/gfapi.h:1,
                 from engines/glusterfs_sync.c:8:
/usr/include/glusterfs/api/glfs.h:790:1: note: declared here
 glfs_fsync(glfs_fd_t *fd, struct glfs_stat *prestat,
 ^~~~~~~~~~
engines/glusterfs_sync.c:47:9: error: too few arguments to function ‘glfs_fdatasync’
   ret = glfs_fdatasync(g->fd);
         ^~~~~~~~~~~~~~
In file included from engines/gfapi.h:1,
                 from engines/glusterfs_sync.c:8:
/usr/include/glusterfs/api/glfs.h:798:1: note: declared here
 glfs_fdatasync(glfs_fd_t *fd, struct glfs_stat *prestat,
 ^~~~~~~~~~~~~~
make: *** [Makefile:373: engines/glusterfs_sync.o] Error 1

It looks like glusterfs changes their API.

axboe commented 5 years ago

OK, that's pretty random, thanks gluster guys for breaking the API instead of adding new functions that take the stat arguments. I've pushed a fix for this, can you check that current master works?

anatol commented 5 years ago

Thank you for the quick turnaround. Yes it works and a new version of fio just pushed to Arch Linux repository.