return 0;
need_create = 0;
- if (td->filetype == FIO_TYPE_FILE)
- for_each_file(td, f, i)
- need_create += file_ok(td, f);
+ if (td->filetype == FIO_TYPE_FILE) {
+ for_each_file(td, f, i) {
+ int file_there = !file_ok(td, f);
+
+ if (file_there && td->ddir == DDIR_WRITE &&
+ !td->overwrite) {
+ unlink(f->file_name);
+ file_there = 0;
+ }
+
+ need_create += !file_there;
+ }
+ }
if (!need_create)
return 0;
}
temp_stall_ts = 1;
- fprintf(f_out, "%s: Laying out IO file(s) (%d x %LuMiB == %LuMiB)\n",
+ fprintf(f_out, "%s: Laying out IO file(s) (%u x %LuMiB == %LuMiB)\n",
td->name, td->nr_uniq_files,
(td->total_file_size >> 20) / td->nr_uniq_files,
td->total_file_size >> 20);
err = 0;
for_each_file(td, f, i) {
+ /*
+ * Only unlink files that we created.
+ */
+ f->unlink = 0;
if (file_ok(td, f)) {
+ f->unlink = td->unlink;
err = create_file(td, f);
if (err)
break;
if (!f->file_size || f->file_size > f->real_file_size)
f->file_size = f->real_file_size;
- }
+ } else
+ f->real_file_size = f->file_size;
- f->file_size -= f->file_offset;
return 0;
}
{
int flags = 0;
+ if (td->io_ops->flags & FIO_NETIO)
+ return 0;
if (td->odirect)
flags |= OS_O_DIRECT;
+ if (td->sync_io)
+ flags |= O_SYNC;
if (td_write(td) || td_rw(td)) {
+ flags |= O_RDWR;
+
if (td->filetype == FIO_TYPE_FILE) {
if (!td->overwrite)
flags |= O_TRUNC;
flags |= O_CREAT;
}
- if (td->sync_io)
- flags |= O_SYNC;
-
- flags |= O_RDWR;
f->fd = open(f->file_name, flags, 0600);
} else {
break;
}
+ if (!err)
+ return 0;
+
+ for_each_file(td, f, i) {
+ if (f->fd != -1) {
+ close(f->fd);
+ f->fd = -1;
+ }
+ }
+
return err;
}
int i;
for_each_file(td, f, i) {
- if (td->unlink && td->filetype == FIO_TYPE_FILE) {
+ if (!td->filename && f->unlink &&
+ td->filetype == FIO_TYPE_FILE) {
unlink(f->file_name);
free(f->file_name);
f->file_name = NULL;