if (new_layout)
flags |= O_TRUNC;
+#ifdef WIN32
+ flags |= _O_BINARY;
+#endif
+
dprint(FD_FILE, "open file %s, flags %x\n", f->file_name, flags);
f->fd = open(f->file_name, flags, 0644);
if (f->fd < 0) {
{
int ret = 0;
+#ifdef CONFIG_ESX
+ return 0;
+#endif
+
if (len == -1ULL)
len = f->io_size;
if (off == -1ULL)
dprint(FD_IO, "invalidate cache %s: %llu/%llu\n", f->file_name, off,
len);
- if (f->mmap_ptr) {
+ 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)
from_hash = 0;
}
+#ifdef WIN32
+ flags |= _O_BINARY;
+#endif
+
f->fd = open(f->file_name, flags, 0600);
return from_hash;
}
if (fm)
continue;
- fm = malloc(sizeof(*fm));
- strcpy(fm->__base, buf);
+ fm = calloc(1, sizeof(*fm));
+ strncpy(fm->__base, buf, sizeof(fm->__base) - 1);
fm->base = basename(fm->__base);
fm->key = sb.st_dev;
flist_add(&fm->list, &list);
if (!o->size || o->size > total_size)
o->size = total_size;
+ if (o->size < td_min_bs(td)) {
+ log_err("fio: blocksize too large for data set\n");
+ goto err_out;
+ }
+
/*
* See if we need to extend some files
*/
* iolog already set the total io size, if we read back
* stored entries.
*/
- if (!o->read_iolog_file)
- td->total_io_size = o->size * o->loops;
+ if (!o->read_iolog_file) {
+ if (o->io_limit)
+ td->total_io_size = o->io_limit * o->loops;
+ else
+ td->total_io_size = o->size * o->loops;
+ }
done:
if (o->create_only)
unsigned long seed;
seed = td->rand_seeds[FIO_RAND_BLOCK_OFF];
-
+
if (!lfsr_init(&f->lfsr, blocks, seed, 0))
continue;
} else if (!td->o.norandommap) {
void free_release_files(struct thread_data *td)
{
close_files(td);
+ td->o.nr_files = 0;
+ td->o.open_files = 0;
td->files_index = 0;
td->nr_normal_files = 0;
}