7f45bd97ea4988ac84ce307d82715dfcf73e4d70
[fio.git] / engines / null.c
1 /*
2  * null engine - doesn't do any transfers. Used to test fio.
3  *
4  */
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 #include <errno.h>
9 #include <assert.h>
10
11 #include "../fio.h"
12 #include "../os.h"
13
14 static int fio_null_queue(struct thread_data fio_unused *td, struct io_u *io_u)
15 {
16         io_u->resid = 0;
17         io_u->error = 0;
18         return FIO_Q_COMPLETED;
19 }
20
21 static int fio_null_setup(struct thread_data *td)
22 {
23         struct fio_file *f;
24         int i;
25
26         if (!td->total_file_size) {
27                 log_err("fio: need size= set\n");
28                 return 1;
29         }
30
31         td->io_size = td->total_file_size;
32         td->total_io_size = td->io_size;
33
34         for_each_file(td, f, i) {
35                 f->fd = dup(STDOUT_FILENO);
36                 f->real_file_size = td->total_io_size / td->nr_files;
37                 f->file_size = f->real_file_size;
38         }
39
40         td->nr_open_files = td->nr_files;
41         return 0;
42 }
43
44 static int fio_null_open(struct thread_data fio_unused *td,
45                          struct fio_file fio_unused *f)
46 {
47         return 0;
48 }
49
50 static struct ioengine_ops ioengine = {
51         .name           = "null",
52         .version        = FIO_IOOPS_VERSION,
53         .setup          = fio_null_setup,
54         .queue          = fio_null_queue,
55         .open_file      = fio_null_open,
56         .flags          = FIO_SYNCIO | FIO_DISKLESSIO,
57 };
58
59 static void fio_init fio_null_register(void)
60 {
61         register_ioengine(&ioengine);
62 }
63
64 static void fio_exit fio_null_unregister(void)
65 {
66         unregister_ioengine(&ioengine);
67 }