projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] Support for multiple queued commands with read/write SG v3 io
[fio.git]
/
fio.c
diff --git
a/fio.c
b/fio.c
index 2fb7da9b76c22190e09e39efacd266572b29f63a..43942ddbdacb71114437988f5a6716800c86161c 100644
(file)
--- a/
fio.c
+++ b/
fio.c
@@
-579,7
+579,7
@@
static int td_io_prep(struct thread_data *td, struct io_u *io_u, int read)
return 0;
}
return 0;
}
-
static
void put_io_u(struct thread_data *td, struct io_u *io_u)
+void put_io_u(struct thread_data *td, struct io_u *io_u)
{
list_del(&io_u->list);
list_add(&io_u->list, &td->io_u_freelist);
{
list_del(&io_u->list);
list_add(&io_u->list, &td->io_u_freelist);
@@
-588,7
+588,7
@@
static void put_io_u(struct thread_data *td, struct io_u *io_u)
#define queue_full(td) (list_empty(&(td)->io_u_freelist))
#define queue_full(td) (list_empty(&(td)->io_u_freelist))
-st
atic st
ruct io_u *__get_io_u(struct thread_data *td)
+struct io_u *__get_io_u(struct thread_data *td)
{
struct io_u *io_u;
{
struct io_u *io_u;
@@
-1113,6
+1113,7
@@
static int init_io_u(struct thread_data *td)
INIT_LIST_HEAD(&io_u->list);
io_u->buf = p + td->max_bs * i;
INIT_LIST_HEAD(&io_u->list);
io_u->buf = p + td->max_bs * i;
+ io_u->index = i;
list_add(&io_u->list, &td->io_u_freelist);
}
list_add(&io_u->list, &td->io_u_freelist);
}
@@
-1235,12
+1236,14
@@
static int bdev_size(struct thread_data *td)
static int get_file_size(struct thread_data *td)
{
static int get_file_size(struct thread_data *td)
{
- int ret;
+ int ret
= 0
;
if (td->filetype == FIO_TYPE_FILE)
ret = file_size(td);
if (td->filetype == FIO_TYPE_FILE)
ret = file_size(td);
- else
+ else
if (td->filetype == FIO_TYPE_BD)
ret = bdev_size(td);
ret = bdev_size(td);
+ else
+ td->real_file_size = -1;
if (ret)
return ret;
if (ret)
return ret;
@@
-1356,9
+1359,14
@@
static int setup_file(struct thread_data *td)
if (td->odirect)
flags |= O_DIRECT;
if (td->odirect)
flags |= O_DIRECT;
- if (td_read(td))
- td->fd = open(td->file_name, flags | O_RDONLY);
- else {
+ if (td_read(td)) {
+ if (td->filetype == FIO_TYPE_CHAR)
+ flags |= O_RDWR;
+ else
+ flags |= O_RDONLY;
+
+ td->fd = open(td->file_name, flags);
+ } else {
if (td->filetype == FIO_TYPE_FILE) {
if (!td->overwrite)
flags |= O_TRUNC;
if (td->filetype == FIO_TYPE_FILE) {
if (!td->overwrite)
flags |= O_TRUNC;
@@
-1599,17
+1607,23
@@
static void init_disk_util(struct thread_data *td)
return;
/*
return;
/*
- *
if this is inside a partition dir, jump back to parent
+ *
for md/dm, there's no queue dir. we already have the right place
*/
*/
- sprintf(tmp, "%s/
queue
", foo);
+ sprintf(tmp, "%s/
stat
", foo);
if (stat(tmp, &st)) {
if (stat(tmp, &st)) {
- p = dirname(foo);
- sprintf(tmp, "%s/queue", p);
+ /*
+ * if this is inside a partition dir, jump back to parent
+ */
+ sprintf(tmp, "%s/queue", foo);
if (stat(tmp, &st)) {
if (stat(tmp, &st)) {
- fprintf(stderr, "unknown sysfs layout\n");
- return;
+ p = dirname(foo);
+ sprintf(tmp, "%s/queue", p);
+ if (stat(tmp, &st)) {
+ fprintf(stderr, "unknown sysfs layout\n");
+ return;
+ }
+ sprintf(foo, "%s", p);
}
}
- sprintf(foo, "%s", p);
}
disk_util_add(dev, foo);
}
disk_util_add(dev, foo);