projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add LICENSE file specyfing what I expect from people using fio
[fio.git]
/
filesetup.c
diff --git
a/filesetup.c
b/filesetup.c
index a1ad02633f10d2871adc8d93dc83e833f3afa340..9679c88d28245f287d64f13092a72631f7121fca 100644
(file)
--- a/
filesetup.c
+++ b/
filesetup.c
@@
-435,7
+435,7
@@
int generic_close_file(struct thread_data fio_unused *td, struct fio_file *f)
return ret;
}
return ret;
}
-
static
int file_lookup_open(struct fio_file *f, int flags)
+int file_lookup_open(struct fio_file *f, int flags)
{
struct fio_file *__f;
int from_hash;
{
struct fio_file *__f;
int from_hash;
@@
-468,6
+468,11
@@
int generic_open_file(struct thread_data *td, struct fio_file *f)
dprint(FD_FILE, "fd open %s\n", f->file_name);
dprint(FD_FILE, "fd open %s\n", f->file_name);
+ if (td_trim(td) && f->filetype != FIO_TYPE_BD) {
+ log_err("fio: trim only applies to block device\n");
+ return 1;
+ }
+
if (!strcmp(f->file_name, "-")) {
if (td_rw(td)) {
log_err("fio: can't read/write to stdin/out\n");
if (!strcmp(f->file_name, "-")) {
if (td_rw(td)) {
log_err("fio: can't read/write to stdin/out\n");
@@
-482,14
+487,17
@@
int generic_open_file(struct thread_data *td, struct fio_file *f)
f_out = stderr;
}
f_out = stderr;
}
+ if (td_trim(td))
+ goto skip_flags;
if (td->o.odirect)
flags |= OS_O_DIRECT;
if (td->o.sync_io)
flags |= O_SYNC;
if (td->o.odirect)
flags |= OS_O_DIRECT;
if (td->o.sync_io)
flags |= O_SYNC;
- if (f->filetype != FIO_TYPE_FILE)
- flags |= FIO_O_NOATIME;
if (td->o.create_on_open)
flags |= O_CREAT;
if (td->o.create_on_open)
flags |= O_CREAT;
+skip_flags:
+ if (f->filetype != FIO_TYPE_FILE)
+ flags |= FIO_O_NOATIME;
open_again:
if (td_write(td)) {
open_again:
if (td_write(td)) {
@@
-503,7
+511,7
@@
open_again:
f->fd = dup(STDOUT_FILENO);
else
from_hash = file_lookup_open(f, flags);
f->fd = dup(STDOUT_FILENO);
else
from_hash = file_lookup_open(f, flags);
- } else {
+ } else
if (td_read(td))
{
if (f->filetype == FIO_TYPE_CHAR && !read_only)
flags |= O_RDWR;
else
if (f->filetype == FIO_TYPE_CHAR && !read_only)
flags |= O_RDWR;
else
@@
-513,6
+521,9
@@
open_again:
f->fd = dup(STDIN_FILENO);
else
from_hash = file_lookup_open(f, flags);
f->fd = dup(STDIN_FILENO);
else
from_hash = file_lookup_open(f, flags);
+ } else { //td trim
+ flags |= O_RDWR;
+ from_hash = file_lookup_open(f, flags);
}
if (f->fd == -1) {
}
if (f->fd == -1) {
@@
-526,6
+537,11
@@
open_again:
snprintf(buf, sizeof(buf) - 1, "open(%s)", f->file_name);
snprintf(buf, sizeof(buf) - 1, "open(%s)", f->file_name);
+ if (__e == EINVAL && (flags & OS_O_DIRECT)) {
+ log_err("fio: looks like your file system does not " \
+ "support direct=1/buffered=0\n");
+ }
+
td_verror(td, __e, buf);
}
td_verror(td, __e, buf);
}
@@
-652,6
+668,12
@@
static unsigned long long get_fs_free_counts(struct thread_data *td)
return ret;
}
return ret;
}
+unsigned long long get_start_offset(struct thread_data *td)
+{
+ return td->o.start_offset +
+ (td->thread_number - 1) * td->o.offset_increment;
+}
+
/*
* Open the files and setup files sizes, creating files if necessary.
*/
/*
* Open the files and setup files sizes, creating files if necessary.
*/
@@
-713,8
+735,7
@@
int setup_files(struct thread_data *td)
extend_size = total_size = 0;
need_extend = 0;
for_each_file(td, f, i) {
extend_size = total_size = 0;
need_extend = 0;
for_each_file(td, f, i) {
- f->file_offset = td->o.start_offset +
- (td->thread_number - 1) * td->o.offset_increment;
+ f->file_offset = get_start_offset(td);
if (!td->o.file_size_low) {
/*
if (!td->o.file_size_low) {
/*
@@
-745,8
+766,11
@@
int setup_files(struct thread_data *td)
if (f->io_size == -1ULL)
total_size = -1ULL;
if (f->io_size == -1ULL)
total_size = -1ULL;
- else
+ else {
+ if (td->o.size_percent)
+ f->io_size = (f->io_size * td->o.size_percent) / 100;
total_size += f->io_size;
total_size += f->io_size;
+ }
if (f->filetype == FIO_TYPE_FILE &&
(f->io_size + f->file_offset) > f->real_file_size &&
if (f->filetype == FIO_TYPE_FILE &&
(f->io_size + f->file_offset) > f->real_file_size &&
@@
-760,9
+784,6
@@
int setup_files(struct thread_data *td)
}
}
}
}
- if (td->o.size_percent)
- total_size = (total_size * td->o.size_percent) / 100;
-
if (!td->o.size || td->o.size > total_size)
td->o.size = total_size;
if (!td->o.size || td->o.size > total_size)
td->o.size = total_size;
@@
-771,7
+792,7
@@
int setup_files(struct thread_data *td)
*/
if (need_extend) {
temp_stall_ts = 1;
*/
if (need_extend) {
temp_stall_ts = 1;
- if (
!terse_output
)
+ if (
output_format == FIO_OUTPUT_NORMAL
)
log_info("%s: Laying out IO file(s) (%u file(s) /"
" %lluMB)\n", td->o.name, need_extend,
extend_size >> 20);
log_info("%s: Laying out IO file(s) (%u file(s) /"
" %lluMB)\n", td->o.name, need_extend,
extend_size >> 20);
@@
-974,6
+995,7
@@
int add_file(struct thread_data *td, const char *fname)
td->files_size = new_size;
}
td->files[cur_files] = f;
td->files_size = new_size;
}
td->files[cur_files] = f;
+ f->fileno = cur_files;
/*
* init function, io engine may not be loaded yet
/*
* init function, io engine may not be loaded yet
@@
-1000,7
+1022,7
@@
int add_file(struct thread_data *td, const char *fname)
f->lock = fio_mutex_rw_init();
break;
case FILE_LOCK_EXCLUSIVE:
f->lock = fio_mutex_rw_init();
break;
case FILE_LOCK_EXCLUSIVE:
- f->lock = fio_mutex_init(
1
);
+ f->lock = fio_mutex_init(
FIO_MUTEX_UNLOCKED
);
break;
default:
log_err("fio: unknown lock mode: %d\n", td->o.file_lock_mode);
break;
default:
log_err("fio: unknown lock mode: %d\n", td->o.file_lock_mode);