X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Fglusterfs.c;h=6aed265a36ddc344f5172f40263fe3b6abde314f;hp=b5c2d690d2a7b72f2098318bb400c9a672c29ea6;hb=334d5177e087b9864540691f3a34d4ceacc55416;hpb=6aa56500061cdb130705640d5c1cce9c9f26c7ff diff --git a/engines/glusterfs.c b/engines/glusterfs.c index b5c2d690..6aed265a 100644 --- a/engines/glusterfs.c +++ b/engines/glusterfs.c @@ -6,7 +6,7 @@ */ #include -#include + #include "../fio.h" struct gf_options { @@ -19,7 +19,6 @@ struct gf_data { glfs_t *fs; glfs_fd_t *fd; }; - static struct fio_option options[] = { { .name = "volume", @@ -49,9 +48,6 @@ static int fio_gf_setup(struct thread_data *td) int r = 0; struct gf_data *g = NULL; struct gf_options *opt = td->eo; - struct stat sb = {0, }; - - dprint(FD_IO, "fio setup\n"); if (td->io_ops->data) return 0; @@ -68,40 +64,41 @@ static int fio_gf_setup(struct thread_data *td) log_err("glfs_new failed.\n"); goto cleanup; } - glfs_set_logging (g->fs, "/tmp/fio_gfapi.log", 7); + /* default to tcp */ - r = glfs_set_volfile_server(g->fs, "tcp", opt->gf_brick, 0); + r = glfs_set_volfile_server(g->fs, "tcp", opt->gf_brick, 24007); if (r){ log_err("glfs_set_volfile_server failed.\n"); goto cleanup; } r = glfs_init(g->fs); if (r){ - log_err("glfs_init failed. Is glusterd running on brick?\n"); - goto cleanup; - } - sleep(2); - r = glfs_lstat (g->fs, ".", &sb); - if (r){ - log_err("glfs_lstat failed.\n"); + log_err("glfs_init failed.\n"); goto cleanup; } - dprint(FD_FILE, "fio setup %p\n", g->fs); + glfs_set_logging (g->fs, "/dev/stderr", 7); + td->io_ops->data = g; cleanup: - if (r){ - if (g){ - if (g->fs){ - glfs_fini(g->fs); - } - free(g); + if (g){ + if (g->fs){ + glfs_fini(g->fs); } + free(g); } return r; } static void fio_gf_cleanup(struct thread_data *td) { + struct gf_data *g = td->io_ops->data; + + if (g){ + if (g->fs){ + glfs_fini(g->fs); + } + free(g); + } } static int fio_gf_get_file_size(struct thread_data *td, struct fio_file *f) @@ -114,17 +111,15 @@ static int fio_gf_get_file_size(struct thread_data *td, struct fio_file *f) if (!g || !g->fs) { - f->real_file_size = 0; - fio_file_set_size_known(f); + return 0; } + if (fio_file_size_known(f)) return 0; ret = glfs_lstat (g->fs, f->file_name, &buf); - if (ret < 0){ - log_err("glfs_lstat failed.\n"); + if (ret < 0) return ret; - } f->real_file_size = buf.st_size; fio_file_set_size_known(f); @@ -135,12 +130,11 @@ static int fio_gf_get_file_size(struct thread_data *td, struct fio_file *f) static int fio_gf_open_file(struct thread_data *td, struct fio_file *f) { - - int flags = 0; - int ret = 0; struct gf_data *g = td->io_ops->data; + int flags = 0; + + dprint(FD_FILE, "fd open %s\n", f->file_name); - dprint(FD_FILE, "fio open %s\n", f->file_name); if (td_write(td)) { if (!read_only) flags = O_RDWR; @@ -150,16 +144,12 @@ static int fio_gf_open_file(struct thread_data *td, struct fio_file *f) else flags = O_RDONLY; } - g->fd = glfs_creat(g->fs, f->file_name, flags, 0644); - if (!g->fd){ - log_err("glfs_creat failed.\n"); - ret = errno; - } - dprint(FD_FILE, "fio %p created %s\n", g->fs, f->file_name); - f->fd = -1; - f->shadow_fd = -1; + if (td->o.create_on_open) + flags |= O_CREAT; - return ret; + g->fd = glfs_open(g->fs, f->file_name, flags); + f->fd = -1; + return 0; } static int fio_gf_close_file(struct thread_data *td, struct fio_file *f) @@ -169,15 +159,10 @@ static int fio_gf_close_file(struct thread_data *td, struct fio_file *f) dprint(FD_FILE, "fd close %s\n", f->file_name); - if (g->fd && glfs_close(g->fd) < 0) - ret = errno; - - if (g->fs) - glfs_fini(g->fs); + if (!g->fd && glfs_close(g->fd) < 0) + ret = errno; g->fd = NULL; - free(g); - td->io_ops->data = NULL; f->engine_data = 0; return ret; @@ -189,8 +174,6 @@ static int fio_gf_prep(struct thread_data *td, struct io_u *io_u) struct fio_file *f = io_u->file; struct gf_data *g = td->io_ops->data; - dprint(FD_FILE, "fio prep\n"); - if (!ddir_rw(io_u->ddir)) return 0; @@ -210,7 +193,6 @@ static int fio_gf_queue(struct thread_data *td, struct io_u *io_u) struct gf_data *g = td->io_ops->data; int ret = 0; - dprint(FD_FILE, "fio queue len %lu\n", io_u->xfer_buflen); fio_ro_check(td, io_u); if (io_u->ddir == DDIR_READ) @@ -221,7 +203,6 @@ static int fio_gf_queue(struct thread_data *td, struct io_u *io_u) log_err("unsupported operation.\n"); return -EINVAL; } - if (io_u->file && ret >= 0 && ddir_rw(io_u->ddir)) LAST_POS(io_u->file) = io_u->offset + ret; @@ -234,10 +215,8 @@ static int fio_gf_queue(struct thread_data *td, struct io_u *io_u) io_u->error = errno; } - if (io_u->error){ - log_err("IO failed.\n"); + if (io_u->error) td_verror(td, io_u->error, "xfer"); - } return FIO_Q_COMPLETED; @@ -246,7 +225,7 @@ static int fio_gf_queue(struct thread_data *td, struct io_u *io_u) static struct ioengine_ops ioengine = { .name = "gfapi", .version = FIO_IOOPS_VERSION, - .init = fio_gf_setup, + .setup = fio_gf_setup, .cleanup = fio_gf_cleanup, .prep = fio_gf_prep, .queue = fio_gf_queue, @@ -255,7 +234,7 @@ static struct ioengine_ops ioengine = { .get_file_size = fio_gf_get_file_size, .options = options, .option_struct_size = sizeof(struct gf_options), - .flags = FIO_SYNCIO | FIO_DISKLESSIO, + .flags = FIO_SYNCIO, }; static void fio_init fio_gf_register(void)