projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] Warn on writable strings
[fio.git]
/
fio.c
diff --git
a/fio.c
b/fio.c
index 0dbce58835ad83e76e6855f7d4f100c9509decaa..8c059df627294f3607e2e1bae00a6f2c571451fb 100644
(file)
--- a/
fio.c
+++ b/
fio.c
@@
-4,10
+4,12
@@
* Copyright (C) 2005 Jens Axboe <axboe@suse.de>
* Copyright (C) 2006 Jens Axboe <axboe@kernel.dk>
*
* Copyright (C) 2005 Jens Axboe <axboe@suse.de>
* Copyright (C) 2006 Jens Axboe <axboe@kernel.dk>
*
+ * The license below covers all files distributed with fio unless otherwise
+ * noted in the file itself.
+ *
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@
-43,7
+45,7
@@
int groupid = 0;
int thread_number = 0;
int shm_id = 0;
int temp_stall_ts;
int thread_number = 0;
int shm_id = 0;
int temp_stall_ts;
-char *fio_inst_prefix = _INST_PREFIX;
+c
onst c
har *fio_inst_prefix = _INST_PREFIX;
static volatile int startup_sem;
static volatile int startup_sem;
@@
-216,14
+218,14
@@
static int fio_io_sync(struct thread_data *td, struct fio_file *f)
ret = td_io_queue(td, io_u);
if (ret) {
ret = td_io_queue(td, io_u);
if (ret) {
+ td_verror(td, io_u->error);
put_io_u(td, io_u);
put_io_u(td, io_u);
- td_verror(td, ret);
return 1;
}
ret = td_io_getevents(td, 1, td->cur_depth, NULL);
if (ret < 0) {
return 1;
}
ret = td_io_getevents(td, 1, td->cur_depth, NULL);
if (ret < 0) {
- td_verror(td,
-
ret);
+ td_verror(td, ret);
return 1;
}
return 1;
}
@@
-290,8
+292,8
@@
void do_verify(struct thread_data *td)
ret = td_io_queue(td, io_u);
if (ret) {
ret = td_io_queue(td, io_u);
if (ret) {
+ td_verror(td, io_u->error);
put_io_u(td, io_u);
put_io_u(td, io_u);
- td_verror(td, ret);
break;
}
break;
}
@@
-397,8
+399,8
@@
static void do_io(struct thread_data *td)
ret = td_io_queue(td, io_u);
if (ret) {
ret = td_io_queue(td, io_u);
if (ret) {
+ td_verror(td, io_u->error);
put_io_u(td, io_u);
put_io_u(td, io_u);
- td_verror(td, ret);
break;
}
break;
}
@@
-434,7
+436,7
@@
static void do_io(struct thread_data *td)
gettimeofday(&e, NULL);
usec = utime_since(&s, &e);
gettimeofday(&e, NULL);
usec = utime_since(&s, &e);
- rate_throttle(td, usec, icd.bytes_done[td->ddir]);
+ rate_throttle(td, usec, icd.bytes_done[td->ddir]
, td->ddir
);
if (check_min_rate(td, &e)) {
if (rate_quit)
if (check_min_rate(td, &e)) {
if (rate_quit)
@@
-477,9
+479,23
@@
static void cleanup_io_u(struct thread_data *td)
free_io_mem(td);
}
free_io_mem(td);
}
+/*
+ * "randomly" fill the buffer contents
+ */
+static void fill_rand_buf(struct io_u *io_u, int max_bs)
+{
+ int *ptr = io_u->buf;
+
+ while ((void *) ptr - io_u->buf < max_bs) {
+ *ptr = rand() * 0x9e370001;
+ ptr++;
+ }
+}
+
static int init_io_u(struct thread_data *td)
{
struct io_u *io_u;
static int init_io_u(struct thread_data *td)
{
struct io_u *io_u;
+ unsigned int max_bs;
int i, max_units;
char *p;
int i, max_units;
char *p;
@@
-491,7
+507,8
@@
static int init_io_u(struct thread_data *td)
else
max_units = td->iodepth;
else
max_units = td->iodepth;
- td->orig_buffer_size = td->max_bs * max_units + MASK;
+ max_bs = max(td->max_bs[DDIR_READ], td->max_bs[DDIR_WRITE]);
+ td->orig_buffer_size = max_bs * max_units + MASK;
if (allocate_io_mem(td))
return 1;
if (allocate_io_mem(td))
return 1;
@@
-502,7
+519,10
@@
static int init_io_u(struct thread_data *td)
memset(io_u, 0, sizeof(*io_u));
INIT_LIST_HEAD(&io_u->list);
memset(io_u, 0, sizeof(*io_u));
INIT_LIST_HEAD(&io_u->list);
- io_u->buf = p + td->max_bs * i;
+ io_u->buf = p + max_bs * i;
+ if (td_write(td) || td_rw(td))
+ fill_rand_buf(io_u, max_bs);
+
io_u->index = i;
list_add(&io_u->list, &td->io_u_freelist);
}
io_u->index = i;
list_add(&io_u->list, &td->io_u_freelist);
}
@@
-516,6
+536,9
@@
static int switch_ioscheduler(struct thread_data *td)
FILE *f;
int ret;
FILE *f;
int ret;
+ if (td->io_ops->flags & FIO_CPUIO)
+ return 0;
+
sprintf(tmp, "%s/queue/scheduler", td->sysfs_root);
f = fopen(tmp, "r+");
sprintf(tmp, "%s/queue/scheduler", td->sysfs_root);
f = fopen(tmp, "r+");
@@
-684,7
+707,7
@@
static void *thread_main(void *data)
finish_log(td, td->slat_log, "slat");
if (td->clat_log)
finish_log(td, td->clat_log, "clat");
finish_log(td, td->slat_log, "slat");
if (td->clat_log)
finish_log(td, td->clat_log, "clat");
- if (td->write_iolog)
+ if (td->write_iolog
_file
)
write_iolog_close(td);
if (td->exec_postrun)
system(td->exec_postrun);
write_iolog_close(td);
if (td->exec_postrun)
system(td->exec_postrun);