if (td->io_ops->invalidate)
ret = td->io_ops->invalidate(td, f);
- else if (f->mmap_ptr) {
- ret = posix_madvise(f->mmap_ptr, f->mmap_sz, POSIX_MADV_DONTNEED);
-#ifdef FIO_MADV_FREE
- if (f->filetype == FIO_TYPE_BD)
- (void) posix_madvise(f->mmap_ptr, f->mmap_sz, FIO_MADV_FREE);
-#endif
- } else if (f->filetype == FIO_TYPE_FILE) {
+ else if (f->filetype == FIO_TYPE_FILE)
ret = posix_fadvise(f->fd, off, len, POSIX_FADV_DONTNEED);
- } else if (f->filetype == FIO_TYPE_BD) {
+ else if (f->filetype == FIO_TYPE_BD) {
ret = blockdev_invalidate_cache(f);
if (ret < 0 && errno == EACCES && geteuid()) {
if (!root_warn) {
{
unsigned int range_size, seed;
unsigned long nranges;
- uint64_t file_size;
+ uint64_t fsize;
range_size = min(td->o.min_bs[DDIR_READ], td->o.min_bs[DDIR_WRITE]);
- file_size = min(f->real_file_size, f->io_size);
+ fsize = min(f->real_file_size, f->io_size);
- nranges = (file_size + range_size - 1) / range_size;
+ nranges = (fsize + range_size - 1) / range_size;
seed = jhash(f->file_name, strlen(f->file_name), 0) * td->thread_number;
if (!td->o.rand_repeatable)
return 0;
for_each_file(td, f, i) {
- uint64_t file_size = min(f->real_file_size, f->io_size);
+ uint64_t fsize = min(f->real_file_size, f->io_size);
- blocks = file_size / (unsigned long long) td->o.rw_min_bs;
+ blocks = fsize / (unsigned long long) td->o.rw_min_bs;
if (td->o.random_generator == FIO_RAND_GEN_LFSR) {
unsigned long seed;
seed = td->rand_seeds[FIO_RAND_BLOCK_OFF];
- if (!lfsr_init(&f->lfsr, blocks, seed, 0))
+ if (!lfsr_init(&f->lfsr, blocks, seed, 0)) {
+ fio_file_set_lfsr(f);
continue;
+ }
} else if (!td->o.norandommap) {
f->io_axmap = axmap_new(blocks);
- if (f->io_axmap)
+ if (f->io_axmap) {
+ fio_file_set_axmap(f);
continue;
+ }
} else if (td->o.norandommap)
continue;
sfree(f->file_name);
f->file_name = NULL;
- axmap_free(f->io_axmap);
- f->io_axmap = NULL;
+ if (fio_file_axmap(f)) {
+ axmap_free(f->io_axmap);
+ f->io_axmap = NULL;
+ }
sfree(f);
}
void fio_file_reset(struct thread_data *td, struct fio_file *f)
{
- f->last_pos = f->file_offset;
- f->last_start = -1ULL;
- if (f->io_axmap)
+ int i;
+
+ for (i = 0; i < DDIR_RWDIR_CNT; i++) {
+ f->last_pos[i] = f->file_offset;
+ f->last_start[i] = -1ULL;
+ }
+
+ if (fio_file_axmap(f))
axmap_reset(f->io_axmap);
- if (td->o.random_generator == FIO_RAND_GEN_LFSR)
+ else if (fio_file_lfsr(f))
lfsr_reset(&f->lfsr, td->rand_seeds[FIO_RAND_BLOCK_OFF]);
}