Split mutex.c and .h each into three files
[fio.git] / engines / ftruncate.c
CommitLineData
a467027e
DM
1/*
2 * ftruncate: ioengine for git://git.kernel.dk/fio.git
3 *
4 * IO engine that does regular truncates to simulate data transfer
5 * as fio ioengine.
6 * DDIR_WRITE does ftruncate
7 *
8 */
9#include <stdio.h>
10#include <stdlib.h>
11#include <unistd.h>
12#include <sys/uio.h>
13#include <errno.h>
14#include <assert.h>
15#include <fcntl.h>
16
17#include "../fio.h"
18#include "../filehash.h"
19
20static int fio_ftruncate_queue(struct thread_data *td, struct io_u *io_u)
21{
22 struct fio_file *f = io_u->file;
23 int ret;
24 fio_ro_check(td, io_u);
25
26 if (io_u->ddir != DDIR_WRITE) {
27 io_u->error = EINVAL;
28 return FIO_Q_COMPLETED;
29 }
30 ret = ftruncate(f->fd, io_u->offset);
31
32 if (ret)
33 io_u->error = errno;
34
35 return FIO_Q_COMPLETED;
36}
37
38static struct ioengine_ops ioengine = {
39 .name = "ftruncate",
40 .version = FIO_IOOPS_VERSION,
41 .queue = fio_ftruncate_queue,
42 .open_file = generic_open_file,
43 .close_file = generic_close_file,
44 .get_file_size = generic_get_file_size,
45 .flags = FIO_SYNCIO | FIO_FAKEIO
46};
47
48static void fio_init fio_syncio_register(void)
49{
50 register_ioengine(&ioengine);
51}
52
53static void fio_exit fio_syncio_unregister(void)
54{
55 unregister_ioengine(&ioengine);
56}