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 <axboe@kernel.dk>
print_config "Gluster API use fadvise" "$gf_fadvise"
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 <glusterfs/api/glfs.h>
+
+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
##########################################
# check for gfapi trim support
if test "$gf_trim" != "yes" ; then
if test "$gf_trim" = "yes" ; then
output_sym "CONFIG_GF_TRIM"
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
if test "$libhdfs" = "yes" ; then
output_sym "CONFIG_LIBHDFS"
echo "FIO_HDFS_CPU=$FIO_HDFS_CPU" >> $config_host_mak
|| 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);
|| 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);
ret = glfs_ftruncate(g->fd, f->real_file_size);
if (ret) {
log_err("failed fio extend file %s to %" PRIu64 "\n",
f->file_name, f->real_file_size);
if (ret) {
log_err("failed fio extend file %s to %" PRIu64 "\n",
f->file_name, f->real_file_size);
f->file_name);
glfs_unlink(g->fs, f->file_name);
} else if (td->o.create_fsync) {
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) {
if (glfs_fsync(g->fd) < 0) {
dprint(FD_FILE,
"failed to sync, close %s\n",
f->file_name);
dprint(FD_FILE,
"failed to sync, close %s\n",
f->file_name);
+#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)
static void gf_async_cb(glfs_fd_t * fd, ssize_t ret, void *data)
{
struct io_u *io_u = data;
struct fio_gf_iou *iou = io_u->engine_data;
{
struct io_u *io_u = data;
struct fio_gf_iou *iou = io_u->engine_data;
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)
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
else if (io_u->ddir == DDIR_DATASYNC)
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);
ret = glfs_fdatasync(g->fd);
else {
log_err("unsupported operation.\n");
io_u->error = EINVAL;
else {
log_err("unsupported operation.\n");
io_u->error = EINVAL;