X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Fglusterfs_sync.c;h=5a145bd8633f2a6d3e041c9b2e9fce3fef871c47;hp=cff642774f12d5bb454b8b0ce679e30dd8d31572;hb=d9bac1c6a8ca176fe8c1f342109e092f2de79419;hpb=25f488581e510c1b440f2e76842ec23f3dad7b57 diff --git a/engines/glusterfs_sync.c b/engines/glusterfs_sync.c index cff64277..5a145bd8 100644 --- a/engines/glusterfs_sync.c +++ b/engines/glusterfs_sync.c @@ -7,11 +7,11 @@ #include "gfapi.h" -#define LAST_POS(f) ((f)->engine_data) +#define LAST_POS(f) ((f)->engine_pos) 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; + struct gf_data *g = td->io_ops_data; dprint(FD_FILE, "fio prep\n"); @@ -31,63 +31,69 @@ static int fio_gf_prep(struct thread_data *td, struct io_u *io_u) 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) - ret = glfs_read(g->fd, io_u->xfer_buf, io_u->xfer_buflen, 0); - else if (io_u->ddir == DDIR_WRITE) - ret = glfs_write(g->fd, io_u->xfer_buf, io_u->xfer_buflen, 0); - else { - log_err("unsupported operation.\n"); - return -EINVAL; - } - dprint(FD_FILE, "fio len %lu ret %d\n", io_u->xfer_buflen, ret); - if (io_u->file && ret >= 0 && ddir_rw(io_u->ddir)) - LAST_POS(io_u->file) = io_u->offset + ret; - - if (ret != (int) io_u->xfer_buflen) { - if (ret >= 0) { - io_u->resid = io_u->xfer_buflen - ret; - io_u->error = 0; - return FIO_Q_COMPLETED; - } else - io_u->error = errno; - } - - if (io_u->error){ - log_err("IO failed.\n"); - td_verror(td, io_u->error, "xfer"); - } - - return FIO_Q_COMPLETED; + 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) + ret = glfs_read(g->fd, io_u->xfer_buf, io_u->xfer_buflen, 0); + 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) + ret = glfs_fsync(g->fd); + else if (io_u->ddir == DDIR_DATASYNC) + ret = glfs_fdatasync(g->fd); + else { + log_err("unsupported operation.\n"); + io_u->error = EINVAL; + return FIO_Q_COMPLETED; + } + dprint(FD_FILE, "fio len %lu ret %d\n", io_u->xfer_buflen, ret); + if (io_u->file && ret >= 0 && ddir_rw(io_u->ddir)) + LAST_POS(io_u->file) = io_u->offset + ret; + + if (ret != (int)io_u->xfer_buflen) { + if (ret >= 0) { + io_u->resid = io_u->xfer_buflen - ret; + io_u->error = 0; + return FIO_Q_COMPLETED; + } else + io_u->error = errno; + } + + if (io_u->error) { + log_err("IO failed.\n"); + td_verror(td, io_u->error, "xfer"); + } + + return FIO_Q_COMPLETED; } static struct ioengine_ops ioengine = { - .name = "gfapi", - .version = FIO_IOOPS_VERSION, - .init = fio_gf_setup, - .cleanup = fio_gf_cleanup, - .prep = fio_gf_prep, - .queue = fio_gf_queue, - .open_file = fio_gf_open_file, - .close_file = fio_gf_close_file, - .get_file_size = fio_gf_get_file_size, - .options = gfapi_options, + .name = "gfapi", + .version = FIO_IOOPS_VERSION, + .init = fio_gf_setup, + .cleanup = fio_gf_cleanup, + .prep = fio_gf_prep, + .queue = fio_gf_queue, + .open_file = fio_gf_open_file, + .close_file = fio_gf_close_file, + .unlink_file = fio_gf_unlink_file, + .get_file_size = fio_gf_get_file_size, + .options = gfapi_options, .option_struct_size = sizeof(struct gf_options), - .flags = FIO_SYNCIO | FIO_DISKLESSIO, + .flags = FIO_SYNCIO | FIO_DISKLESSIO, }; static void fio_init fio_gf_register(void) { - register_ioengine(&ioengine); + register_ioengine(&ioengine); } static void fio_exit fio_gf_unregister(void) { - unregister_ioengine(&ioengine); + unregister_ioengine(&ioengine); }