-int init_iolog(struct thread_data *td)
-{
- int ret = 0;
-
- if (td->io_ops->flags & FIO_CPUIO)
- return 0;
-
- if (td->read_iolog_file)
- ret = init_iolog_read(td);
- else if (td->write_iolog_file)
- ret = init_iolog_write(td);
-
- return ret;
-}
-
-int setup_rate(struct thread_data *td)
-{
- unsigned long long rate;
- int nr_reads_per_msec;
-
- if (!td->rate)
- return 0;
-
- if (td->rate < td->ratemin) {
- log_err("min rate larger than nominal rate\n");
- return -1;
- }
-
- rate = td->rate;
- nr_reads_per_msec = (rate * 1024 * 1000) / td->min_bs[DDIR_READ];
- if (!nr_reads_per_msec) {
- log_err("rate lower than supported\n");
- return -1;
- }
-
- td->rate_usec_cycle = 1000000000ULL / nr_reads_per_msec;
- td->rate_pending_usleep = 0;
- return 0;
-}
-
-void setup_log(struct io_log **log)
-{
- struct io_log *l = malloc(sizeof(*l));
-
- l->nr_samples = 0;
- l->max_samples = 1024;
- l->log = malloc(l->max_samples * sizeof(struct io_sample));
- *log = l;
-}
-
-void __finish_log(struct io_log *log, const char *name)
-{
- unsigned int i;
- FILE *f;
-
- f = fopen(name, "w");
- if (!f) {
- perror("fopen log");
- return;
+ return fwrite(buffer, len, 1, f_err);