projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
iolog: fix bug with ret != Z_STREAM_END
[fio.git]
/
filesetup.c
diff --git
a/filesetup.c
b/filesetup.c
index b5628ce65bdb7d52d59e0da46a87439bacbdca50..f721c36abbb045ca7b4e4a618c64b0199d5148e3 100644
(file)
--- a/
filesetup.c
+++ b/
filesetup.c
@@
-264,7
+264,7
@@
error:
return ret;
}
return ret;
}
-
static
unsigned long long get_rand_file_size(struct thread_data *td)
+unsigned long long get_rand_file_size(struct thread_data *td)
{
unsigned long long ret, sized;
uint64_t frand_max;
{
unsigned long long ret, sized;
uint64_t frand_max;
@@
-391,7
+391,7
@@
static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
unsigned long long off,
unsigned long long len)
{
unsigned long long off,
unsigned long long len)
{
- int ret = 0;
+ int
errval = 0,
ret = 0;
#ifdef CONFIG_ESX
return 0;
#ifdef CONFIG_ESX
return 0;
@@
-408,11
+408,15
@@
static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
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);
- if (td->io_ops->invalidate)
+ if (td->io_ops->invalidate)
{
ret = td->io_ops->invalidate(td, f);
ret = td->io_ops->invalidate(td, f);
- else if (f->filetype == FIO_TYPE_FILE)
+ if (ret < 0)
+ errval = ret;
+ } else if (f->filetype == FIO_TYPE_FILE) {
ret = posix_fadvise(f->fd, off, len, POSIX_FADV_DONTNEED);
ret = posix_fadvise(f->fd, off, len, POSIX_FADV_DONTNEED);
- else if (f->filetype == FIO_TYPE_BD) {
+ if (ret)
+ errval = ret;
+ } else if (f->filetype == FIO_TYPE_BD) {
int retry_count = 0;
ret = blockdev_invalidate_cache(f);
int retry_count = 0;
ret = blockdev_invalidate_cache(f);
@@
-434,6
+438,8
@@
static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
}
ret = 0;
}
}
ret = 0;
}
+ if (ret < 0)
+ errval = errno;
} else if (f->filetype == FIO_TYPE_CHAR || f->filetype == FIO_TYPE_PIPE)
ret = 0;
} else if (f->filetype == FIO_TYPE_CHAR || f->filetype == FIO_TYPE_PIPE)
ret = 0;
@@
-443,10
+449,8
@@
static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
* function to flush eg block device caches. So just warn and
* continue on our way.
*/
* function to flush eg block device caches. So just warn and
* continue on our way.
*/
- if (ret) {
- log_info("fio: cache invalidation of %s failed: %s\n", f->file_name, strerror(errno));
- ret = 0;
- }
+ if (errval)
+ log_info("fio: cache invalidation of %s failed: %s\n", f->file_name, strerror(errval));
return 0;
return 0;
@@
-757,12
+761,16
@@
static unsigned long long get_fs_free_counts(struct thread_data *td)
uint64_t get_start_offset(struct thread_data *td, struct fio_file *f)
{
struct thread_options *o = &td->o;
uint64_t get_start_offset(struct thread_data *td, struct fio_file *f)
{
struct thread_options *o = &td->o;
+ uint64_t offset;
if (o->file_append && f->filetype == FIO_TYPE_FILE)
return f->real_file_size;
if (o->file_append && f->filetype == FIO_TYPE_FILE)
return f->real_file_size;
- return td->o.start_offset +
- td->subjob_number * td->o.offset_increment;
+ offset = td->o.start_offset + td->subjob_number * td->o.offset_increment;
+ if (offset % td_max_bs(td))
+ offset -= (offset % td_max_bs(td));
+
+ return offset;
}
/*
}
/*
@@
-805,6
+813,7
@@
int setup_files(struct thread_data *td)
*/
total_size = 0;
for_each_file(td, f, i) {
*/
total_size = 0;
for_each_file(td, f, i) {
+ f->fileno = i;
if (f->real_file_size == -1ULL)
total_size = -1ULL;
else
if (f->real_file_size == -1ULL)
total_size = -1ULL;
else
@@
-885,8
+894,10
@@
int setup_files(struct thread_data *td)
if (f->io_size == -1ULL)
total_size = -1ULL;
else {
if (f->io_size == -1ULL)
total_size = -1ULL;
else {
- if (o->size_percent)
- f->io_size = (f->io_size * o->size_percent) / 100;
+ if (o->size_percent) {
+ f->io_size = (f->io_size * o->size_percent) / 100;
+ f->io_size -= (f->io_size % td_min_bs(td));
+ }
total_size += f->io_size;
}
total_size += f->io_size;
}