From: Jens Axboe Date: Thu, 23 May 2019 20:57:03 +0000 (-0600) Subject: glusterfs: update for new API X-Git-Tag: fio-3.15~10 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=ce4d13ca162df4127ec3b5911553802c53396705;hp=de5ed0e4d398bc9d4576f9b2b82d7686989c27e1 glusterfs: update for new API Apparently glusterfs just changes their API as they see fit. Add a configure check for the newer version, which adds pre/post stat variables in a few random spots. This should fix compilation with v6.0 of the API. Fixes: https://github.com/axboe/fio/issues/781 Signed-off-by: Jens Axboe --- diff --git a/configure b/configure index ee421663..b0052dc1 100755 --- a/configure +++ b/configure @@ -1789,6 +1789,24 @@ fi print_config "Gluster API use fadvise" "$gf_fadvise" fi +########################################## +# check for newer gfapi +if test "$gfapi" = "yes" ; then +gf_new="no" +cat > $TMPC << EOF +#include + +int main(int argc, char **argv) +{ + return glfs_fsync(NULL, NULL, NULL) && glfs_ftruncate(NULL, 0, NULL, NULL); +} +EOF +if compile_prog "" "-lgfapi -lglusterfs" "gf new api"; then + gf_new="yes" +fi +print_config "Gluster new API" "$gf_new" +fi + ########################################## # check for gfapi trim support if test "$gf_trim" != "yes" ; then @@ -2576,6 +2594,9 @@ fi if test "$gf_trim" = "yes" ; then output_sym "CONFIG_GF_TRIM" fi +if test "$gf_new" = "yes" ; then + output_sym "CONFIG_GF_NEW_API" +fi if test "$libhdfs" = "yes" ; then output_sym "CONFIG_LIBHDFS" echo "FIO_HDFS_CPU=$FIO_HDFS_CPU" >> $config_host_mak diff --git a/engines/glusterfs.c b/engines/glusterfs.c index d0250b70..f2b84a2a 100644 --- a/engines/glusterfs.c +++ b/engines/glusterfs.c @@ -288,7 +288,11 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f) || sb.st_size < f->real_file_size) { dprint(FD_FILE, "fio extend file %s from %jd to %" PRIu64 "\n", f->file_name, (intmax_t) sb.st_size, f->real_file_size); +#if defined(CONFIG_GF_NEW_API) + ret = glfs_ftruncate(g->fd, f->real_file_size, NULL, NULL); +#else ret = glfs_ftruncate(g->fd, f->real_file_size); +#endif if (ret) { log_err("failed fio extend file %s to %" PRIu64 "\n", f->file_name, f->real_file_size); @@ -350,7 +354,11 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f) f->file_name); glfs_unlink(g->fs, f->file_name); } else if (td->o.create_fsync) { +#if defined(CONFIG_GF_NEW_API) + if (glfs_fsync(g->fd, NULL, NULL) < 0) { +#else if (glfs_fsync(g->fd) < 0) { +#endif dprint(FD_FILE, "failed to sync, close %s\n", f->file_name); diff --git a/engines/glusterfs_async.c b/engines/glusterfs_async.c index 9e1c4bf0..0392ad6e 100644 --- a/engines/glusterfs_async.c +++ b/engines/glusterfs_async.c @@ -84,7 +84,12 @@ static int fio_gf_io_u_init(struct thread_data *td, struct io_u *io_u) return 0; } +#if defined(CONFIG_GF_NEW_API) +static void gf_async_cb(glfs_fd_t * fd, ssize_t ret, struct glfs_stat *prestat, + struct glfs_stat *poststat, void *data) +#else static void gf_async_cb(glfs_fd_t * fd, ssize_t ret, void *data) +#endif { struct io_u *io_u = data; struct fio_gf_iou *iou = io_u->engine_data; diff --git a/engines/glusterfs_sync.c b/engines/glusterfs_sync.c index 099a5af1..de73261f 100644 --- a/engines/glusterfs_sync.c +++ b/engines/glusterfs_sync.c @@ -42,9 +42,17 @@ static enum fio_q_status fio_gf_queue(struct thread_data *td, struct io_u *io_u) else if (io_u->ddir == DDIR_WRITE) ret = glfs_write(g->fd, io_u->xfer_buf, io_u->xfer_buflen, 0); else if (io_u->ddir == DDIR_SYNC) +#if defined(CONFIG_GF_NEW_API) + ret = glfs_fsync(g->fd, NULL, NULL); +#else ret = glfs_fsync(g->fd); +#endif else if (io_u->ddir == DDIR_DATASYNC) +#if defined(CONFIG_GF_NEW_API) + ret = glfs_fdatasync(g->fd, NULL, NULL); +#else ret = glfs_fdatasync(g->fd); +#endif else { log_err("unsupported operation.\n"); io_u->error = EINVAL;