projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use __e for errno
[fio.git]
/
filesetup.c
diff --git
a/filesetup.c
b/filesetup.c
index 81c7683bc4a27cf430c4b821817545901daf1988..17bdd2639f6ce3cc75e192063c1c5276ba6076e0 100644
(file)
--- a/
filesetup.c
+++ b/
filesetup.c
@@
-13,6
+13,12
@@
static int root_warn;
static int root_warn;
+static inline void clear_error(struct thread_data *td)
+{
+ td->error = 0;
+ td->verror[0] = '\0';
+}
+
/*
* Leaves f->fd open on success, caller must close
*/
/*
* Leaves f->fd open on success, caller must close
*/
@@
-126,8
+132,8
@@
static int extend_file(struct thread_data *td, struct fio_file *f)
goto err;
}
}
goto err;
}
}
- if (td->o.fill_device) {
- f
->flags &= ~FIO_SIZE_KNOWN
;
+ if (td->o.fill_device
&& !td_write(td)
) {
+ f
io_file_clear_size_known(f)
;
if (td_io_get_file_size(td, f))
goto err;
if (f->io_size > f->real_file_size)
if (td_io_get_file_size(td, f))
goto err;
if (f->io_size > f->real_file_size)
@@
-150,7
+156,7
@@
static int pre_read_file(struct thread_data *td, struct fio_file *f)
unsigned int bs;
char *b;
unsigned int bs;
char *b;
- if (!
(f->flags & FIO_FILE_OPEN
)) {
+ if (!
fio_file_open(f
)) {
if (td->io_ops->open_file(td, f)) {
log_err("fio: cannot pre-read, failed to open file\n");
return 1;
if (td->io_ops->open_file(td, f)) {
log_err("fio: cannot pre-read, failed to open file\n");
return 1;
@@
-240,6
+246,7
@@
static int bdev_size(struct thread_data *td, struct fio_file *f)
}
f->real_file_size = bytes;
}
f->real_file_size = bytes;
+ td->io_ops->close_file(td, f);
return 0;
err:
td->io_ops->close_file(td, f);
return 0;
err:
td->io_ops->close_file(td, f);
@@
-250,7
+257,7
@@
static int get_file_size(struct thread_data *td, struct fio_file *f)
{
int ret = 0;
{
int ret = 0;
- if (f
->flags & FIO_SIZE_KNOWN
)
+ if (f
io_file_size_known(f)
)
return 0;
if (f->filetype == FIO_TYPE_FILE)
return 0;
if (f->filetype == FIO_TYPE_FILE)
@@
-269,7
+276,7
@@
static int get_file_size(struct thread_data *td, struct fio_file *f)
return 1;
}
return 1;
}
- f
->flags |= FIO_SIZE_KNOWN
;
+ f
io_file_set_size_known(f)
;
return 0;
}
return 0;
}
@@
-284,6
+291,9
@@
static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
if (off == -1ULL)
off = f->file_offset;
if (off == -1ULL)
off = f->file_offset;
+ if (len == -1ULL || off == -1ULL)
+ return 0;
+
dprint(FD_IO, "invalidate cache %s: %llu/%llu\n", f->file_name, off,
len);
dprint(FD_IO, "invalidate cache %s: %llu/%llu\n", f->file_name, off,
len);
@@
-321,7
+331,7
@@
static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
int file_invalidate_cache(struct thread_data *td, struct fio_file *f)
{
int file_invalidate_cache(struct thread_data *td, struct fio_file *f)
{
- if (!
(f->flags & FIO_FILE_OPEN
))
+ if (!
fio_file_open(f
))
return 0;
return __file_invalidate_cache(td, f, -1ULL, -1ULL);
return 0;
return __file_invalidate_cache(td, f, -1ULL, -1ULL);
@@
-426,7
+436,7
@@
open_again:
char buf[FIO_VERROR_SIZE];
int __e = errno;
char buf[FIO_VERROR_SIZE];
int __e = errno;
- if (
errno
== EPERM && (flags & FIO_O_NOATIME)) {
+ if (
__e
== EPERM && (flags & FIO_O_NOATIME)) {
flags &= ~FIO_O_NOATIME;
goto open_again;
}
flags &= ~FIO_O_NOATIME;
goto open_again;
}
@@
-584,7
+594,7
@@
int setup_files(struct thread_data *td)
extend_size += (f->io_size + f->file_offset);
} else
f->real_file_size = f->io_size + f->file_offset;
extend_size += (f->io_size + f->file_offset);
} else
f->real_file_size = f->io_size + f->file_offset;
- f
->flags |= FIO_FILE_EXTEND
;
+ f
io_file_set_extend(f)
;
}
}
}
}
@@
-604,11
+614,11
@@
int setup_files(struct thread_data *td)
for_each_file(td, f, i) {
unsigned long long old_len = -1ULL, extend_len = -1ULL;
for_each_file(td, f, i) {
unsigned long long old_len = -1ULL, extend_len = -1ULL;
- if (!
(f->flags & FIO_FILE_EXTEND
))
+ if (!
fio_file_extend(f
))
continue;
assert(f->filetype == FIO_TYPE_FILE);
continue;
assert(f->filetype == FIO_TYPE_FILE);
- f
->flags &= ~FIO_FILE_EXTEND
;
+ f
io_file_clear_extend(f)
;
if (!td->o.fill_device) {
old_len = f->real_file_size;
extend_len = f->io_size + f->file_offset - old_len;
if (!td->o.fill_device) {
old_len = f->real_file_size;
extend_len = f->io_size + f->file_offset - old_len;
@@
-717,7
+727,9
@@
void close_and_free_files(struct thread_data *td)
unlink(f->file_name);
}
unlink(f->file_name);
}
- td_io_close_file(td, f);
+ if (fio_file_open(f))
+ td_io_close_file(td, f);
+
remove_file_hash(f);
sfree(f->file_name);
remove_file_hash(f);
sfree(f->file_name);
@@
-828,7
+840,7
@@
int add_file(struct thread_data *td, const char *fname)
void get_file(struct fio_file *f)
{
dprint(FD_FILE, "get file %s, ref=%d\n", f->file_name, f->references);
void get_file(struct fio_file *f)
{
dprint(FD_FILE, "get file %s, ref=%d\n", f->file_name, f->references);
- assert(f
->flags & FIO_FILE_OPEN
);
+ assert(f
io_file_open(f)
);
f->references++;
}
f->references++;
}
@@
-838,8
+850,10
@@
int put_file(struct thread_data *td, struct fio_file *f)
dprint(FD_FILE, "put file %s, ref=%d\n", f->file_name, f->references);
dprint(FD_FILE, "put file %s, ref=%d\n", f->file_name, f->references);
- if (!(f->flags & FIO_FILE_OPEN))
+ if (!fio_file_open(f)) {
+ assert(f->fd == -1);
return 0;
return 0;
+ }
assert(f->references);
if (--f->references)
assert(f->references);
if (--f->references)
@@
-855,7
+869,8
@@
int put_file(struct thread_data *td, struct fio_file *f)
ret = f_ret;
td->nr_open_files--;
ret = f_ret;
td->nr_open_files--;
- f->flags &= ~FIO_FILE_OPEN;
+ fio_file_clear_open(f);
+ assert(f->fd == -1);
return ret;
}
return ret;
}
@@
-995,6
+1010,7
@@
void dup_files(struct thread_data *td, struct thread_data *org)
log_err("fio: smalloc OOM\n");
assert(0);
}
log_err("fio: smalloc OOM\n");
assert(0);
}
+ __f->fd = -1;
if (f->file_name) {
__f->file_name = smalloc_strdup(f->file_name);
if (f->file_name) {
__f->file_name = smalloc_strdup(f->file_name);