X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=engines%2Fglusterfs.c;h=981dfa35e03783b6a4c06b4441da9297f21186ea;hb=f6149216df3abecf49e730646f1e71fad20bfd61;hp=52006b04075ab26f46bae54973d34e29dd92d096;hpb=93782cbbd8c8ab46bdc1f18b8a99c740ae6954e5;p=fio.git diff --git a/engines/glusterfs.c b/engines/glusterfs.c index 52006b04..981dfa35 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)) { @@ -164,11 +165,11 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f) if (td_read(td)) { if (glfs_lstat(g->fs, f->file_name, &sb) || sb.st_size < f->real_file_size) { - dprint(FD_FILE, "fio extend file %s from %ld to %ld\n", - f->file_name, 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); ret = glfs_ftruncate(g->fd, f->real_file_size); if (ret) { - log_err("failed fio extend file %s to %ld\n", + log_err("failed fio extend file %s to %" PRIu64 "\n", f->file_name, f->real_file_size); } else { unsigned long long left; @@ -189,7 +190,7 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f) r = glfs_write(g->fd, b, bs, 0); dprint(FD_IO, - "fio write %d of %ld file %s\n", + "fio write %d of %" PRIu64 " file %s\n", r, f->real_file_size, f->file_name); @@ -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, @@ -260,20 +261,38 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f) dprint(FD_FILE, "fio %p created %s\n", g->fs, f->file_name); f->fd = -1; f->shadow_fd = -1; - + td->o.open_files ++; return ret; } 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; }