X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Fglusterfs.c;h=2abc283fc048f1580271cb257e1831454e5a3f18;hp=52df9e8a0608f2d73b89a70c962a52cfe79abd63;hb=565e784df05c2529479eed8a38701a33b01894bd;hpb=e6590c12f4a8c3f6de2adc9e127b1d2a0585ffae diff --git a/engines/glusterfs.c b/engines/glusterfs.c index 52df9e8a..2abc283f 100644 --- a/engines/glusterfs.c +++ b/engines/glusterfs.c @@ -6,6 +6,7 @@ */ #include "gfapi.h" +#include "../optgroup.h" struct fio_option gfapi_options[] = { { @@ -40,7 +41,7 @@ int fio_gf_setup(struct thread_data *td) dprint(FD_IO, "fio setup\n"); - if (td->io_ops->data) + if (td->io_ops_data) return 0; g = malloc(sizeof(struct gf_data)); @@ -76,19 +77,19 @@ int fio_gf_setup(struct thread_data *td) goto cleanup; } dprint(FD_FILE, "fio setup %p\n", g->fs); - td->io_ops->data = g; + td->io_ops_data = g; return 0; cleanup: if (g->fs) glfs_fini(g->fs); free(g); - td->io_ops->data = NULL; + td->io_ops_data = NULL; return r; } void fio_gf_cleanup(struct thread_data *td) { - struct gf_data *g = td->io_ops->data; + struct gf_data *g = td->io_ops_data; if (g) { if (g->aio_events) @@ -98,7 +99,7 @@ void fio_gf_cleanup(struct thread_data *td) if (g->fs) glfs_fini(g->fs); free(g); - td->io_ops->data = NULL; + td->io_ops_data = NULL; } } @@ -106,7 +107,7 @@ int fio_gf_get_file_size(struct thread_data *td, struct fio_file *f) { struct stat buf; int ret; - struct gf_data *g = td->io_ops->data; + struct gf_data *g = td->io_ops_data; dprint(FD_FILE, "get file size %s\n", f->file_name); @@ -134,7 +135,7 @@ 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; + struct gf_data *g = td->io_ops_data; struct stat sb = { 0, }; if (td_write(td)) { @@ -223,10 +224,10 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f) free(b); glfs_lseek(g->fd, 0, SEEK_SET); - if (td->terminate) { + if (td->terminate && td->o.unlink) { dprint(FD_FILE, "terminate unlink %s\n", f->file_name); - unlink(f->file_name); + glfs_unlink(g->fs, f->file_name); } else if (td->o.create_fsync) { if (glfs_fsync(g->fd) < 0) { dprint(FD_FILE, @@ -267,13 +268,31 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f) int fio_gf_close_file(struct thread_data *td, struct fio_file *f) { int ret = 0; - struct gf_data *g = td->io_ops->data; + struct gf_data *g = td->io_ops_data; dprint(FD_FILE, "fd close %s\n", f->file_name); if (g) { if (g->fd && glfs_close(g->fd) < 0) ret = errno; + g->fd = NULL; + } + + return ret; +} + +int fio_gf_unlink_file(struct thread_data *td, struct fio_file *f) +{ + int ret = 0; + struct gf_data *g = td->io_ops_data; + + dprint(FD_FILE, "fd unlink %s\n", f->file_name); + + if (g) { + if (g->fd && glfs_close(g->fd) < 0) + ret = errno; + + glfs_unlink(g->fs, f->file_name); if (g->fs) glfs_fini(g->fs); @@ -281,8 +300,7 @@ int fio_gf_close_file(struct thread_data *td, struct fio_file *f) g->fd = NULL; free(g); } - td->io_ops->data = NULL; - f->engine_data = 0; + td->io_ops_data = NULL; return ret; }