Home | History | Annotate | Download | only in fio
      1 #include <unistd.h>
      2 #include <fcntl.h>
      3 #include <string.h>
      4 #include <assert.h>
      5 #include <dirent.h>
      6 #include <libgen.h>
      7 #include <sys/stat.h>
      8 #include <sys/mman.h>
      9 #include <sys/types.h>
     10 
     11 #include "fio.h"
     12 #include "smalloc.h"
     13 #include "filehash.h"
     14 #include "options.h"
     15 #include "os/os.h"
     16 #include "hash.h"
     17 #include "lib/axmap.h"
     18 
     19 #ifdef CONFIG_LINUX_FALLOCATE
     20 #include <linux/falloc.h>
     21 #endif
     22 
     23 static int root_warn;
     24 
     25 static FLIST_HEAD(filename_list);
     26 
     27 /*
     28  * List entry for filename_list
     29  */
     30 struct file_name {
     31 	struct flist_head list;
     32 	char *filename;
     33 };
     34 
     35 static inline void clear_error(struct thread_data *td)
     36 {
     37 	td->error = 0;
     38 	td->verror[0] = '\0';
     39 }
     40 
     41 /*
     42  * Leaves f->fd open on success, caller must close
     43  */
     44 static int extend_file(struct thread_data *td, struct fio_file *f)
     45 {
     46 	int r, new_layout = 0, unlink_file = 0, flags;
     47 	unsigned long long left;
     48 	unsigned int bs;
     49 	char *b = NULL;
     50 
     51 	if (read_only) {
     52 		log_err("fio: refusing extend of file due to read-only\n");
     53 		return 0;
     54 	}
     55 
     56 	/*
     57 	 * check if we need to lay the file out complete again. fio
     58 	 * does that for operations involving reads, or for writes
     59 	 * where overwrite is set
     60 	 */
     61 	if (td_read(td) ||
     62 	   (td_write(td) && td->o.overwrite && !td->o.file_append) ||
     63 	    (td_write(td) && td_ioengine_flagged(td, FIO_NOEXTEND)))
     64 		new_layout = 1;
     65 	if (td_write(td) && !td->o.overwrite && !td->o.file_append)
     66 		unlink_file = 1;
     67 
     68 	if (unlink_file || new_layout) {
     69 		int ret;
     70 
     71 		dprint(FD_FILE, "layout unlink %s\n", f->file_name);
     72 
     73 		ret = td_io_unlink_file(td, f);
     74 		if (ret != 0 && ret != ENOENT) {
     75 			td_verror(td, errno, "unlink");
     76 			return 1;
     77 		}
     78 	}
     79 
     80 	flags = O_WRONLY;
     81 	if (td->o.allow_create)
     82 		flags |= O_CREAT;
     83 	if (new_layout)
     84 		flags |= O_TRUNC;
     85 
     86 #ifdef WIN32
     87 	flags |= _O_BINARY;
     88 #endif
     89 
     90 	dprint(FD_FILE, "open file %s, flags %x\n", f->file_name, flags);
     91 	f->fd = open(f->file_name, flags, 0644);
     92 	if (f->fd < 0) {
     93 		int err = errno;
     94 
     95 		if (err == ENOENT && !td->o.allow_create)
     96 			log_err("fio: file creation disallowed by "
     97 					"allow_file_create=0\n");
     98 		else
     99 			td_verror(td, err, "open");
    100 		return 1;
    101 	}
    102 
    103 #ifdef CONFIG_POSIX_FALLOCATE
    104 	if (!td->o.fill_device) {
    105 		switch (td->o.fallocate_mode) {
    106 		case FIO_FALLOCATE_NONE:
    107 			break;
    108 		case FIO_FALLOCATE_POSIX:
    109 			dprint(FD_FILE, "posix_fallocate file %s size %llu\n",
    110 				 f->file_name,
    111 				 (unsigned long long) f->real_file_size);
    112 
    113 			r = posix_fallocate(f->fd, 0, f->real_file_size);
    114 			if (r > 0) {
    115 				log_err("fio: posix_fallocate fails: %s\n",
    116 						strerror(r));
    117 			}
    118 			break;
    119 #ifdef CONFIG_LINUX_FALLOCATE
    120 		case FIO_FALLOCATE_KEEP_SIZE:
    121 			dprint(FD_FILE,
    122 				"fallocate(FALLOC_FL_KEEP_SIZE) "
    123 				"file %s size %llu\n", f->file_name,
    124 				(unsigned long long) f->real_file_size);
    125 
    126 			r = fallocate(f->fd, FALLOC_FL_KEEP_SIZE, 0,
    127 					f->real_file_size);
    128 			if (r != 0)
    129 				td_verror(td, errno, "fallocate");
    130 
    131 			break;
    132 #endif /* CONFIG_LINUX_FALLOCATE */
    133 		default:
    134 			log_err("fio: unknown fallocate mode: %d\n",
    135 				td->o.fallocate_mode);
    136 			assert(0);
    137 		}
    138 	}
    139 #endif /* CONFIG_POSIX_FALLOCATE */
    140 
    141 	/*
    142 	 * If our jobs don't require regular files initially, we're done.
    143 	 */
    144 	if (!new_layout)
    145 		goto done;
    146 
    147 	/*
    148 	 * The size will be -1ULL when fill_device is used, so don't truncate
    149 	 * or fallocate this file, just write it
    150 	 */
    151 	if (!td->o.fill_device) {
    152 		dprint(FD_FILE, "truncate file %s, size %llu\n", f->file_name,
    153 					(unsigned long long) f->real_file_size);
    154 		if (ftruncate(f->fd, f->real_file_size) == -1) {
    155 			if (errno != EFBIG) {
    156 				td_verror(td, errno, "ftruncate");
    157 				goto err;
    158 			}
    159 		}
    160 	}
    161 
    162 	left = f->real_file_size;
    163 	bs = td->o.max_bs[DDIR_WRITE];
    164 	if (bs > left)
    165 		bs = left;
    166 
    167 	b = malloc(bs);
    168 	if (!b) {
    169 		td_verror(td, errno, "malloc");
    170 		goto err;
    171 	}
    172 
    173 	while (left && !td->terminate) {
    174 		if (bs > left)
    175 			bs = left;
    176 
    177 		fill_io_buffer(td, b, bs, bs);
    178 
    179 		r = write(f->fd, b, bs);
    180 
    181 		if (r > 0) {
    182 			left -= r;
    183 			continue;
    184 		} else {
    185 			if (r < 0) {
    186 				int __e = errno;
    187 
    188 				if (__e == ENOSPC) {
    189 					if (td->o.fill_device)
    190 						break;
    191 					log_info("fio: ENOSPC on laying out "
    192 						 "file, stopping\n");
    193 					break;
    194 				}
    195 				td_verror(td, errno, "write");
    196 			} else
    197 				td_verror(td, EIO, "write");
    198 
    199 			break;
    200 		}
    201 	}
    202 
    203 	if (td->terminate) {
    204 		dprint(FD_FILE, "terminate unlink %s\n", f->file_name);
    205 		td_io_unlink_file(td, f);
    206 	} else if (td->o.create_fsync) {
    207 		if (fsync(f->fd) < 0) {
    208 			td_verror(td, errno, "fsync");
    209 			goto err;
    210 		}
    211 	}
    212 	if (td->o.fill_device && !td_write(td)) {
    213 		fio_file_clear_size_known(f);
    214 		if (td_io_get_file_size(td, f))
    215 			goto err;
    216 		if (f->io_size > f->real_file_size)
    217 			f->io_size = f->real_file_size;
    218 	}
    219 
    220 	free(b);
    221 done:
    222 	return 0;
    223 err:
    224 	close(f->fd);
    225 	f->fd = -1;
    226 	if (b)
    227 		free(b);
    228 	return 1;
    229 }
    230 
    231 static int pre_read_file(struct thread_data *td, struct fio_file *f)
    232 {
    233 	int ret = 0, r, did_open = 0, old_runstate;
    234 	unsigned long long left;
    235 	unsigned int bs;
    236 	char *b;
    237 
    238 	if (td_ioengine_flagged(td, FIO_PIPEIO) ||
    239 	    td_ioengine_flagged(td, FIO_NOIO))
    240 		return 0;
    241 
    242 	if (f->filetype == FIO_TYPE_CHAR)
    243 		return 0;
    244 
    245 	if (!fio_file_open(f)) {
    246 		if (td->io_ops->open_file(td, f)) {
    247 			log_err("fio: cannot pre-read, failed to open file\n");
    248 			return 1;
    249 		}
    250 		did_open = 1;
    251 	}
    252 
    253 	old_runstate = td_bump_runstate(td, TD_PRE_READING);
    254 
    255 	left = f->io_size;
    256 	bs = td->o.max_bs[DDIR_READ];
    257 	if (bs > left)
    258 		bs = left;
    259 
    260 	b = malloc(bs);
    261 	if (!b) {
    262 		td_verror(td, errno, "malloc");
    263 		ret = 1;
    264 		goto error;
    265 	}
    266 	memset(b, 0, bs);
    267 
    268 	if (lseek(f->fd, f->file_offset, SEEK_SET) < 0) {
    269 		td_verror(td, errno, "lseek");
    270 		log_err("fio: failed to lseek pre-read file\n");
    271 		ret = 1;
    272 		goto error;
    273 	}
    274 
    275 	while (left && !td->terminate) {
    276 		if (bs > left)
    277 			bs = left;
    278 
    279 		r = read(f->fd, b, bs);
    280 
    281 		if (r == (int) bs) {
    282 			left -= bs;
    283 			continue;
    284 		} else {
    285 			td_verror(td, EIO, "pre_read");
    286 			break;
    287 		}
    288 	}
    289 
    290 error:
    291 	td_restore_runstate(td, old_runstate);
    292 
    293 	if (did_open)
    294 		td->io_ops->close_file(td, f);
    295 
    296 	free(b);
    297 	return ret;
    298 }
    299 
    300 unsigned long long get_rand_file_size(struct thread_data *td)
    301 {
    302 	unsigned long long ret, sized;
    303 	uint64_t frand_max;
    304 	unsigned long r;
    305 
    306 	frand_max = rand_max(&td->file_size_state);
    307 	r = __rand(&td->file_size_state);
    308 	sized = td->o.file_size_high - td->o.file_size_low;
    309 	ret = (unsigned long long) ((double) sized * (r / (frand_max + 1.0)));
    310 	ret += td->o.file_size_low;
    311 	ret -= (ret % td->o.rw_min_bs);
    312 	return ret;
    313 }
    314 
    315 static int file_size(struct thread_data *td, struct fio_file *f)
    316 {
    317 	struct stat st;
    318 
    319 	if (stat(f->file_name, &st) == -1) {
    320 		td_verror(td, errno, "fstat");
    321 		return 1;
    322 	}
    323 
    324 	f->real_file_size = st.st_size;
    325 	return 0;
    326 }
    327 
    328 static int bdev_size(struct thread_data *td, struct fio_file *f)
    329 {
    330 	unsigned long long bytes = 0;
    331 	int r;
    332 
    333 	if (td->io_ops->open_file(td, f)) {
    334 		log_err("fio: failed opening blockdev %s for size check\n",
    335 			f->file_name);
    336 		return 1;
    337 	}
    338 
    339 	r = blockdev_size(f, &bytes);
    340 	if (r) {
    341 		td_verror(td, r, "blockdev_size");
    342 		goto err;
    343 	}
    344 
    345 	if (!bytes) {
    346 		log_err("%s: zero sized block device?\n", f->file_name);
    347 		goto err;
    348 	}
    349 
    350 	f->real_file_size = bytes;
    351 	td->io_ops->close_file(td, f);
    352 	return 0;
    353 err:
    354 	td->io_ops->close_file(td, f);
    355 	return 1;
    356 }
    357 
    358 static int char_size(struct thread_data *td, struct fio_file *f)
    359 {
    360 #ifdef FIO_HAVE_CHARDEV_SIZE
    361 	unsigned long long bytes = 0;
    362 	int r;
    363 
    364 	if (td->io_ops->open_file(td, f)) {
    365 		log_err("fio: failed opening chardev %s for size check\n",
    366 			f->file_name);
    367 		return 1;
    368 	}
    369 
    370 	r = chardev_size(f, &bytes);
    371 	if (r) {
    372 		td_verror(td, r, "chardev_size");
    373 		goto err;
    374 	}
    375 
    376 	if (!bytes) {
    377 		log_err("%s: zero sized char device?\n", f->file_name);
    378 		goto err;
    379 	}
    380 
    381 	f->real_file_size = bytes;
    382 	td->io_ops->close_file(td, f);
    383 	return 0;
    384 err:
    385 	td->io_ops->close_file(td, f);
    386 	return 1;
    387 #else
    388 	f->real_file_size = -1ULL;
    389 	return 0;
    390 #endif
    391 }
    392 
    393 static int get_file_size(struct thread_data *td, struct fio_file *f)
    394 {
    395 	int ret = 0;
    396 
    397 	if (fio_file_size_known(f))
    398 		return 0;
    399 
    400 	if (f->filetype == FIO_TYPE_FILE)
    401 		ret = file_size(td, f);
    402 	else if (f->filetype == FIO_TYPE_BLOCK)
    403 		ret = bdev_size(td, f);
    404 	else if (f->filetype == FIO_TYPE_CHAR)
    405 		ret = char_size(td, f);
    406 	else
    407 		f->real_file_size = -1ULL;
    408 
    409 	/*
    410 	 * Leave ->real_file_size with 0 since it could be expectation
    411 	 * of initial setup for regular files.
    412 	 */
    413 	if (ret)
    414 		return ret;
    415 
    416 	/*
    417 	 * If ->real_file_size is -1, a conditional for the message
    418 	 * "offset extends end" is always true, but it makes no sense,
    419 	 * so just return the same value here.
    420 	 */
    421 	if (f->real_file_size == -1ULL) {
    422 		log_info("%s: failed to get file size of %s\n", td->o.name,
    423 					f->file_name);
    424 		return 1;
    425 	}
    426 
    427 	if (td->o.start_offset && f->file_offset == 0)
    428 		dprint(FD_FILE, "offset of file %s not initialized yet\n",
    429 					f->file_name);
    430 	/*
    431 	 * ->file_offset normally hasn't been initialized yet, so this
    432 	 * is basically always false.
    433 	 */
    434 	if (f->file_offset > f->real_file_size) {
    435 		log_err("%s: offset extends end (%llu > %llu)\n", td->o.name,
    436 					(unsigned long long) f->file_offset,
    437 					(unsigned long long) f->real_file_size);
    438 		return 1;
    439 	}
    440 
    441 	fio_file_set_size_known(f);
    442 	return 0;
    443 }
    444 
    445 static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f,
    446 				   unsigned long long off,
    447 				   unsigned long long len)
    448 {
    449 	int errval = 0, ret = 0;
    450 
    451 #ifdef CONFIG_ESX
    452 	return 0;
    453 #endif
    454 
    455 	if (len == -1ULL)
    456 		len = f->io_size;
    457 	if (off == -1ULL)
    458 		off = f->file_offset;
    459 
    460 	if (len == -1ULL || off == -1ULL)
    461 		return 0;
    462 
    463 	if (td->io_ops->invalidate) {
    464 		dprint(FD_IO, "invalidate %s cache %s\n", td->io_ops->name,
    465 			f->file_name);
    466 		ret = td->io_ops->invalidate(td, f);
    467 		if (ret < 0)
    468 			errval = -ret;
    469 	} else if (f->filetype == FIO_TYPE_FILE) {
    470 		dprint(FD_IO, "declare unneeded cache %s: %llu/%llu\n",
    471 			f->file_name, off, len);
    472 		ret = posix_fadvise(f->fd, off, len, POSIX_FADV_DONTNEED);
    473 		if (ret)
    474 			errval = ret;
    475 	} else if (f->filetype == FIO_TYPE_BLOCK) {
    476 		int retry_count = 0;
    477 
    478 		dprint(FD_IO, "drop page cache %s\n", f->file_name);
    479 		ret = blockdev_invalidate_cache(f);
    480 		while (ret < 0 && errno == EAGAIN && retry_count++ < 25) {
    481 			/*
    482 			 * Linux multipath devices reject ioctl while
    483 			 * the maps are being updated. That window can
    484 			 * last tens of milliseconds; we'll try up to
    485 			 * a quarter of a second.
    486 			 */
    487 			usleep(10000);
    488 			ret = blockdev_invalidate_cache(f);
    489 		}
    490 		if (ret < 0 && errno == EACCES && geteuid()) {
    491 			if (!root_warn) {
    492 				log_err("fio: only root may flush block "
    493 					"devices. Cache flush bypassed!\n");
    494 				root_warn = 1;
    495 			}
    496 			ret = 0;
    497 		}
    498 		if (ret < 0)
    499 			errval = errno;
    500 		else if (ret) /* probably not supported */
    501 			errval = ret;
    502 	} else if (f->filetype == FIO_TYPE_CHAR ||
    503 		   f->filetype == FIO_TYPE_PIPE) {
    504 		dprint(FD_IO, "invalidate not supported %s\n", f->file_name);
    505 		ret = 0;
    506 	}
    507 
    508 	/*
    509 	 * Cache flushing isn't a fatal condition, and we know it will
    510 	 * happen on some platforms where we don't have the proper
    511 	 * function to flush eg block device caches. So just warn and
    512 	 * continue on our way.
    513 	 */
    514 	if (errval)
    515 		log_info("fio: cache invalidation of %s failed: %s\n",
    516 			 f->file_name, strerror(errval));
    517 
    518 	return 0;
    519 
    520 }
    521 
    522 int file_invalidate_cache(struct thread_data *td, struct fio_file *f)
    523 {
    524 	if (!fio_file_open(f))
    525 		return 0;
    526 
    527 	return __file_invalidate_cache(td, f, -1ULL, -1ULL);
    528 }
    529 
    530 int generic_close_file(struct thread_data fio_unused *td, struct fio_file *f)
    531 {
    532 	int ret = 0;
    533 
    534 	dprint(FD_FILE, "fd close %s\n", f->file_name);
    535 
    536 	remove_file_hash(f);
    537 
    538 	if (close(f->fd) < 0)
    539 		ret = errno;
    540 
    541 	f->fd = -1;
    542 
    543 	if (f->shadow_fd != -1) {
    544 		close(f->shadow_fd);
    545 		f->shadow_fd = -1;
    546 	}
    547 
    548 	f->engine_pos = 0;
    549 	return ret;
    550 }
    551 
    552 int file_lookup_open(struct fio_file *f, int flags)
    553 {
    554 	struct fio_file *__f;
    555 	int from_hash;
    556 
    557 	__f = lookup_file_hash(f->file_name);
    558 	if (__f) {
    559 		dprint(FD_FILE, "found file in hash %s\n", f->file_name);
    560 		f->lock = __f->lock;
    561 		from_hash = 1;
    562 	} else {
    563 		dprint(FD_FILE, "file not found in hash %s\n", f->file_name);
    564 		from_hash = 0;
    565 	}
    566 
    567 #ifdef WIN32
    568 	flags |= _O_BINARY;
    569 #endif
    570 
    571 	f->fd = open(f->file_name, flags, 0600);
    572 	return from_hash;
    573 }
    574 
    575 static int file_close_shadow_fds(struct thread_data *td)
    576 {
    577 	struct fio_file *f;
    578 	int num_closed = 0;
    579 	unsigned int i;
    580 
    581 	for_each_file(td, f, i) {
    582 		if (f->shadow_fd == -1)
    583 			continue;
    584 
    585 		close(f->shadow_fd);
    586 		f->shadow_fd = -1;
    587 		num_closed++;
    588 	}
    589 
    590 	return num_closed;
    591 }
    592 
    593 int generic_open_file(struct thread_data *td, struct fio_file *f)
    594 {
    595 	int is_std = 0;
    596 	int flags = 0;
    597 	int from_hash = 0;
    598 
    599 	dprint(FD_FILE, "fd open %s\n", f->file_name);
    600 
    601 	if (!strcmp(f->file_name, "-")) {
    602 		if (td_rw(td)) {
    603 			log_err("fio: can't read/write to stdin/out\n");
    604 			return 1;
    605 		}
    606 		is_std = 1;
    607 
    608 		/*
    609 		 * move output logging to stderr, if we are writing to stdout
    610 		 */
    611 		if (td_write(td))
    612 			f_out = stderr;
    613 	}
    614 
    615 	if (td_trim(td))
    616 		goto skip_flags;
    617 	if (td->o.odirect)
    618 		flags |= OS_O_DIRECT;
    619 	if (td->o.oatomic) {
    620 		if (!FIO_O_ATOMIC) {
    621 			td_verror(td, EINVAL, "OS does not support atomic IO");
    622 			return 1;
    623 		}
    624 		flags |= OS_O_DIRECT | FIO_O_ATOMIC;
    625 	}
    626 	if (td->o.sync_io)
    627 		flags |= O_SYNC;
    628 	if (td->o.create_on_open && td->o.allow_create)
    629 		flags |= O_CREAT;
    630 skip_flags:
    631 	if (f->filetype != FIO_TYPE_FILE)
    632 		flags |= FIO_O_NOATIME;
    633 
    634 open_again:
    635 	if (td_write(td)) {
    636 		if (!read_only)
    637 			flags |= O_RDWR;
    638 
    639 		if (f->filetype == FIO_TYPE_FILE && td->o.allow_create)
    640 			flags |= O_CREAT;
    641 
    642 		if (is_std)
    643 			f->fd = dup(STDOUT_FILENO);
    644 		else
    645 			from_hash = file_lookup_open(f, flags);
    646 	} else if (td_read(td)) {
    647 		if (f->filetype == FIO_TYPE_CHAR && !read_only)
    648 			flags |= O_RDWR;
    649 		else
    650 			flags |= O_RDONLY;
    651 
    652 		if (is_std)
    653 			f->fd = dup(STDIN_FILENO);
    654 		else
    655 			from_hash = file_lookup_open(f, flags);
    656 	} else if (td_trim(td)) {
    657 		assert(!td_rw(td)); /* should have matched above */
    658 		flags |= O_RDWR;
    659 		from_hash = file_lookup_open(f, flags);
    660 	}
    661 
    662 	if (f->fd == -1) {
    663 		char buf[FIO_VERROR_SIZE];
    664 		int __e = errno;
    665 
    666 		if (__e == EPERM && (flags & FIO_O_NOATIME)) {
    667 			flags &= ~FIO_O_NOATIME;
    668 			goto open_again;
    669 		}
    670 		if (__e == EMFILE && file_close_shadow_fds(td))
    671 			goto open_again;
    672 
    673 		snprintf(buf, sizeof(buf), "open(%s)", f->file_name);
    674 
    675 		if (__e == EINVAL && (flags & OS_O_DIRECT)) {
    676 			log_err("fio: looks like your file system does not " \
    677 				"support direct=1/buffered=0\n");
    678 		}
    679 
    680 		td_verror(td, __e, buf);
    681 		return 1;
    682 	}
    683 
    684 	if (!from_hash && f->fd != -1) {
    685 		if (add_file_hash(f)) {
    686 			int fio_unused ret;
    687 
    688 			/*
    689 			 * Stash away descriptor for later close. This is to
    690 			 * work-around a "feature" on Linux, where a close of
    691 			 * an fd that has been opened for write will trigger
    692 			 * udev to call blkid to check partitions, fs id, etc.
    693 			 * That pollutes the device cache, which can slow down
    694 			 * unbuffered accesses.
    695 			 */
    696 			if (f->shadow_fd == -1)
    697 				f->shadow_fd = f->fd;
    698 			else {
    699 				/*
    700 			 	 * OK to ignore, we haven't done anything
    701 				 * with it
    702 				 */
    703 				ret = generic_close_file(td, f);
    704 			}
    705 			goto open_again;
    706 		}
    707 	}
    708 
    709 	return 0;
    710 }
    711 
    712 /*
    713  * This function i.e. get_file_size() is the default .get_file_size
    714  * implementation of majority of I/O engines.
    715  */
    716 int generic_get_file_size(struct thread_data *td, struct fio_file *f)
    717 {
    718 	return get_file_size(td, f);
    719 }
    720 
    721 /*
    722  * open/close all files, so that ->real_file_size gets set
    723  */
    724 static int get_file_sizes(struct thread_data *td)
    725 {
    726 	struct fio_file *f;
    727 	unsigned int i;
    728 	int err = 0;
    729 
    730 	for_each_file(td, f, i) {
    731 		dprint(FD_FILE, "get file size for %p/%d/%s\n", f, i,
    732 								f->file_name);
    733 
    734 		if (td_io_get_file_size(td, f)) {
    735 			if (td->error != ENOENT) {
    736 				log_err("%s\n", td->verror);
    737 				err = 1;
    738 				break;
    739 			}
    740 			clear_error(td);
    741 		}
    742 
    743 		/*
    744 		 * There are corner cases where we end up with -1 for
    745 		 * ->real_file_size due to unsupported file type, etc.
    746 		 * We then just set to size option value divided by number
    747 		 * of files, similar to the way file ->io_size is set.
    748 		 * stat(2) failure doesn't set ->real_file_size to -1.
    749 		 */
    750 		if (f->real_file_size == -1ULL && td->o.size)
    751 			f->real_file_size = td->o.size / td->o.nr_files;
    752 	}
    753 
    754 	return err;
    755 }
    756 
    757 struct fio_mount {
    758 	struct flist_head list;
    759 	const char *base;
    760 	char __base[256];
    761 	unsigned int key;
    762 };
    763 
    764 /*
    765  * Get free number of bytes for each file on each unique mount.
    766  */
    767 static unsigned long long get_fs_free_counts(struct thread_data *td)
    768 {
    769 	struct flist_head *n, *tmp;
    770 	unsigned long long ret = 0;
    771 	struct fio_mount *fm;
    772 	FLIST_HEAD(list);
    773 	struct fio_file *f;
    774 	unsigned int i;
    775 
    776 	for_each_file(td, f, i) {
    777 		struct stat sb;
    778 		char buf[256];
    779 
    780 		if (f->filetype == FIO_TYPE_BLOCK || f->filetype == FIO_TYPE_CHAR) {
    781 			if (f->real_file_size != -1ULL)
    782 				ret += f->real_file_size;
    783 			continue;
    784 		} else if (f->filetype != FIO_TYPE_FILE)
    785 			continue;
    786 
    787 		buf[255] = '\0';
    788 		strncpy(buf, f->file_name, 255);
    789 
    790 		if (stat(buf, &sb) < 0) {
    791 			if (errno != ENOENT)
    792 				break;
    793 			strcpy(buf, ".");
    794 			if (stat(buf, &sb) < 0)
    795 				break;
    796 		}
    797 
    798 		fm = NULL;
    799 		flist_for_each(n, &list) {
    800 			fm = flist_entry(n, struct fio_mount, list);
    801 			if (fm->key == sb.st_dev)
    802 				break;
    803 
    804 			fm = NULL;
    805 		}
    806 
    807 		if (fm)
    808 			continue;
    809 
    810 		fm = calloc(1, sizeof(*fm));
    811 		strncpy(fm->__base, buf, sizeof(fm->__base) - 1);
    812 		fm->base = basename(fm->__base);
    813 		fm->key = sb.st_dev;
    814 		flist_add(&fm->list, &list);
    815 	}
    816 
    817 	flist_for_each_safe(n, tmp, &list) {
    818 		unsigned long long sz;
    819 
    820 		fm = flist_entry(n, struct fio_mount, list);
    821 		flist_del(&fm->list);
    822 
    823 		sz = get_fs_free_size(fm->base);
    824 		if (sz && sz != -1ULL)
    825 			ret += sz;
    826 
    827 		free(fm);
    828 	}
    829 
    830 	return ret;
    831 }
    832 
    833 uint64_t get_start_offset(struct thread_data *td, struct fio_file *f)
    834 {
    835 	struct thread_options *o = &td->o;
    836 
    837 	if (o->file_append && f->filetype == FIO_TYPE_FILE)
    838 		return f->real_file_size;
    839 
    840 	return td->o.start_offset +
    841 		td->subjob_number * td->o.offset_increment;
    842 }
    843 
    844 /*
    845  * Open the files and setup files sizes, creating files if necessary.
    846  */
    847 int setup_files(struct thread_data *td)
    848 {
    849 	unsigned long long total_size, extend_size;
    850 	struct thread_options *o = &td->o;
    851 	struct fio_file *f;
    852 	unsigned int i, nr_fs_extra = 0;
    853 	int err = 0, need_extend;
    854 	int old_state;
    855 	const unsigned int bs = td_min_bs(td);
    856 	uint64_t fs = 0;
    857 
    858 	dprint(FD_FILE, "setup files\n");
    859 
    860 	old_state = td_bump_runstate(td, TD_SETTING_UP);
    861 
    862 	if (o->read_iolog_file)
    863 		goto done;
    864 
    865 	/*
    866 	 * Find out physical size of files or devices for this thread,
    867 	 * before we determine I/O size and range of our targets.
    868 	 * If ioengine defines a setup() method, it's responsible for
    869 	 * opening the files and setting f->real_file_size to indicate
    870 	 * the valid range for that file.
    871 	 */
    872 	if (td->io_ops->setup)
    873 		err = td->io_ops->setup(td);
    874 	else
    875 		err = get_file_sizes(td);
    876 
    877 	if (err)
    878 		goto err_out;
    879 
    880 	/*
    881 	 * check sizes. if the files/devices do not exist and the size
    882 	 * isn't passed to fio, abort.
    883 	 */
    884 	total_size = 0;
    885 	for_each_file(td, f, i) {
    886 		f->fileno = i;
    887 		if (f->real_file_size == -1ULL)
    888 			total_size = -1ULL;
    889 		else
    890 			total_size += f->real_file_size;
    891 	}
    892 
    893 	if (o->fill_device)
    894 		td->fill_device_size = get_fs_free_counts(td);
    895 
    896 	/*
    897 	 * device/file sizes are zero and no size given, punt
    898 	 */
    899 	if ((!total_size || total_size == -1ULL) && !o->size &&
    900 	    !td_ioengine_flagged(td, FIO_NOIO) && !o->fill_device &&
    901 	    !(o->nr_files && (o->file_size_low || o->file_size_high))) {
    902 		log_err("%s: you need to specify size=\n", o->name);
    903 		td_verror(td, EINVAL, "total_file_size");
    904 		goto err_out;
    905 	}
    906 
    907 	/*
    908 	 * Calculate per-file size and potential extra size for the
    909 	 * first files, if needed (i.e. if we don't have a fixed size).
    910 	 */
    911 	if (!o->file_size_low && o->nr_files) {
    912 		uint64_t all_fs;
    913 
    914 		fs = o->size / o->nr_files;
    915 		all_fs = fs * o->nr_files;
    916 
    917 		if (all_fs < o->size)
    918 			nr_fs_extra = (o->size - all_fs) / bs;
    919 	}
    920 
    921 	/*
    922 	 * now file sizes are known, so we can set ->io_size. if size= is
    923 	 * not given, ->io_size is just equal to ->real_file_size. if size
    924 	 * is given, ->io_size is size / nr_files.
    925 	 */
    926 	extend_size = total_size = 0;
    927 	need_extend = 0;
    928 	for_each_file(td, f, i) {
    929 		f->file_offset = get_start_offset(td, f);
    930 
    931 		/*
    932 		 * Update ->io_size depending on options specified.
    933 		 * ->file_size_low being 0 means filesize option isn't set.
    934 		 * Non zero ->file_size_low equals ->file_size_high means
    935 		 * filesize option is set in a fixed size format.
    936 		 * Non zero ->file_size_low not equals ->file_size_high means
    937 		 * filesize option is set in a range format.
    938 		 */
    939 		if (!o->file_size_low) {
    940 			/*
    941 			 * no file size or range given, file size is equal to
    942 			 * total size divided by number of files. If the size
    943 			 * doesn't divide nicely with the min blocksize,
    944 			 * make the first files bigger.
    945 			 */
    946 			f->io_size = fs;
    947 			if (nr_fs_extra) {
    948 				nr_fs_extra--;
    949 				f->io_size += bs;
    950 			}
    951 
    952 			/*
    953 			 * We normally don't come here for regular files, but
    954 			 * if the result is 0 for a regular file, set it to the
    955 			 * real file size. This could be size of the existing
    956 			 * one if it already exists, but otherwise will be set
    957 			 * to 0. A new file won't be created because
    958 			 * ->io_size + ->file_offset equals ->real_file_size.
    959 			 */
    960 			if (!f->io_size) {
    961 				if (f->file_offset > f->real_file_size)
    962 					goto err_offset;
    963 				f->io_size = f->real_file_size - f->file_offset;
    964 				if (!f->io_size)
    965 					log_info("fio: file %s may be ignored\n",
    966 						f->file_name);
    967 			}
    968 		} else if (f->real_file_size < o->file_size_low ||
    969 			   f->real_file_size > o->file_size_high) {
    970 			if (f->file_offset > o->file_size_low)
    971 				goto err_offset;
    972 			/*
    973 			 * file size given. if it's fixed, use that. if it's a
    974 			 * range, generate a random size in-between.
    975 			 */
    976 			if (o->file_size_low == o->file_size_high)
    977 				f->io_size = o->file_size_low - f->file_offset;
    978 			else {
    979 				f->io_size = get_rand_file_size(td)
    980 						- f->file_offset;
    981 			}
    982 		} else
    983 			f->io_size = f->real_file_size - f->file_offset;
    984 
    985 		if (f->io_size == -1ULL)
    986 			total_size = -1ULL;
    987 		else {
    988                         if (o->size_percent) {
    989 				f->io_size = (f->io_size * o->size_percent) / 100;
    990 				f->io_size -= (f->io_size % td_min_bs(td));
    991 			}
    992 			total_size += f->io_size;
    993 		}
    994 
    995 		if (f->filetype == FIO_TYPE_FILE &&
    996 		    (f->io_size + f->file_offset) > f->real_file_size &&
    997 		    !td_ioengine_flagged(td, FIO_DISKLESSIO)) {
    998 			if (!o->create_on_open) {
    999 				need_extend++;
   1000 				extend_size += (f->io_size + f->file_offset);
   1001 				fio_file_set_extend(f);
   1002 			} else
   1003 				f->real_file_size = f->io_size + f->file_offset;
   1004 		}
   1005 	}
   1006 
   1007 	if (td->o.block_error_hist) {
   1008 		int len;
   1009 
   1010 		assert(td->o.nr_files == 1);	/* checked in fixup_options */
   1011 		f = td->files[0];
   1012 		len = f->io_size / td->o.bs[DDIR_TRIM];
   1013 		if (len > MAX_NR_BLOCK_INFOS || len <= 0) {
   1014 			log_err("fio: cannot calculate block histogram with "
   1015 				"%d trim blocks, maximum %d\n",
   1016 				len, MAX_NR_BLOCK_INFOS);
   1017 			td_verror(td, EINVAL, "block_error_hist");
   1018 			goto err_out;
   1019 		}
   1020 
   1021 		td->ts.nr_block_infos = len;
   1022 		for (i = 0; i < len; i++)
   1023 			td->ts.block_infos[i] =
   1024 				BLOCK_INFO(0, BLOCK_STATE_UNINIT);
   1025 	} else
   1026 		td->ts.nr_block_infos = 0;
   1027 
   1028 	if (!o->size || (total_size && o->size > total_size))
   1029 		o->size = total_size;
   1030 
   1031 	if (o->size < td_min_bs(td)) {
   1032 		log_err("fio: blocksize too large for data set\n");
   1033 		goto err_out;
   1034 	}
   1035 
   1036 	/*
   1037 	 * See if we need to extend some files, typically needed when our
   1038 	 * target regular files don't exist yet, but our jobs require them
   1039 	 * initially due to read I/Os.
   1040 	 */
   1041 	if (need_extend) {
   1042 		temp_stall_ts = 1;
   1043 		if (output_format & FIO_OUTPUT_NORMAL) {
   1044 			log_info("%s: Laying out IO file%s (%u file%s / %s%lluMiB)\n",
   1045 				 o->name,
   1046 				 need_extend > 1 ? "s" : "",
   1047 				 need_extend,
   1048 				 need_extend > 1 ? "s" : "",
   1049 				 need_extend > 1 ? "total " : "",
   1050 				 extend_size >> 20);
   1051 		}
   1052 
   1053 		for_each_file(td, f, i) {
   1054 			unsigned long long old_len = -1ULL, extend_len = -1ULL;
   1055 
   1056 			if (!fio_file_extend(f))
   1057 				continue;
   1058 
   1059 			assert(f->filetype == FIO_TYPE_FILE);
   1060 			fio_file_clear_extend(f);
   1061 			if (!o->fill_device) {
   1062 				old_len = f->real_file_size;
   1063 				extend_len = f->io_size + f->file_offset -
   1064 						old_len;
   1065 			}
   1066 			f->real_file_size = (f->io_size + f->file_offset);
   1067 			err = extend_file(td, f);
   1068 			if (err)
   1069 				break;
   1070 
   1071 			err = __file_invalidate_cache(td, f, old_len,
   1072 								extend_len);
   1073 
   1074 			/*
   1075 			 * Shut up static checker
   1076 			 */
   1077 			if (f->fd != -1)
   1078 				close(f->fd);
   1079 
   1080 			f->fd = -1;
   1081 			if (err)
   1082 				break;
   1083 		}
   1084 		temp_stall_ts = 0;
   1085 	}
   1086 
   1087 	if (err)
   1088 		goto err_out;
   1089 
   1090 	if (!o->zone_size)
   1091 		o->zone_size = o->size;
   1092 
   1093 	/*
   1094 	 * iolog already set the total io size, if we read back
   1095 	 * stored entries.
   1096 	 */
   1097 	if (!o->read_iolog_file) {
   1098 		if (o->io_size)
   1099 			td->total_io_size = o->io_size * o->loops;
   1100 		else
   1101 			td->total_io_size = o->size * o->loops;
   1102 	}
   1103 
   1104 done:
   1105 	if (o->create_only)
   1106 		td->done = 1;
   1107 
   1108 	td_restore_runstate(td, old_state);
   1109 	return 0;
   1110 err_offset:
   1111 	log_err("%s: you need to specify valid offset=\n", o->name);
   1112 err_out:
   1113 	td_restore_runstate(td, old_state);
   1114 	return 1;
   1115 }
   1116 
   1117 int pre_read_files(struct thread_data *td)
   1118 {
   1119 	struct fio_file *f;
   1120 	unsigned int i;
   1121 
   1122 	dprint(FD_FILE, "pre_read files\n");
   1123 
   1124 	for_each_file(td, f, i) {
   1125 		if (pre_read_file(td, f))
   1126 			return -1;
   1127 	}
   1128 
   1129 	return 0;
   1130 }
   1131 
   1132 static int __init_rand_distribution(struct thread_data *td, struct fio_file *f)
   1133 {
   1134 	unsigned int range_size, seed;
   1135 	unsigned long nranges;
   1136 	uint64_t fsize;
   1137 
   1138 	range_size = min(td->o.min_bs[DDIR_READ], td->o.min_bs[DDIR_WRITE]);
   1139 	fsize = min(f->real_file_size, f->io_size);
   1140 
   1141 	nranges = (fsize + range_size - 1) / range_size;
   1142 
   1143 	seed = jhash(f->file_name, strlen(f->file_name), 0) * td->thread_number;
   1144 	if (!td->o.rand_repeatable)
   1145 		seed = td->rand_seeds[4];
   1146 
   1147 	if (td->o.random_distribution == FIO_RAND_DIST_ZIPF)
   1148 		zipf_init(&f->zipf, nranges, td->o.zipf_theta.u.f, seed);
   1149 	else if (td->o.random_distribution == FIO_RAND_DIST_PARETO)
   1150 		pareto_init(&f->zipf, nranges, td->o.pareto_h.u.f, seed);
   1151 	else if (td->o.random_distribution == FIO_RAND_DIST_GAUSS)
   1152 		gauss_init(&f->gauss, nranges, td->o.gauss_dev.u.f, seed);
   1153 
   1154 	return 1;
   1155 }
   1156 
   1157 static int init_rand_distribution(struct thread_data *td)
   1158 {
   1159 	struct fio_file *f;
   1160 	unsigned int i;
   1161 	int state;
   1162 
   1163 	if (td->o.random_distribution == FIO_RAND_DIST_RANDOM)
   1164 		return 0;
   1165 
   1166 	state = td_bump_runstate(td, TD_SETTING_UP);
   1167 
   1168 	for_each_file(td, f, i)
   1169 		__init_rand_distribution(td, f);
   1170 
   1171 	td_restore_runstate(td, state);
   1172 
   1173 	return 1;
   1174 }
   1175 
   1176 /*
   1177  * Check if the number of blocks exceeds the randomness capability of
   1178  * the selected generator. Tausworthe is 32-bit, the others are fullly
   1179  * 64-bit capable.
   1180  */
   1181 static int check_rand_gen_limits(struct thread_data *td, struct fio_file *f,
   1182 				 uint64_t blocks)
   1183 {
   1184 	if (blocks <= FRAND32_MAX)
   1185 		return 0;
   1186 	if (td->o.random_generator != FIO_RAND_GEN_TAUSWORTHE)
   1187 		return 0;
   1188 
   1189 	/*
   1190 	 * If the user hasn't specified a random generator, switch
   1191 	 * to tausworthe64 with informational warning. If the user did
   1192 	 * specify one, just warn.
   1193 	 */
   1194 	log_info("fio: file %s exceeds 32-bit tausworthe random generator.\n",
   1195 			f->file_name);
   1196 
   1197 	if (!fio_option_is_set(&td->o, random_generator)) {
   1198 		log_info("fio: Switching to tausworthe64. Use the "
   1199 			 "random_generator= option to get rid of this "
   1200 			 "warning.\n");
   1201 		td->o.random_generator = FIO_RAND_GEN_TAUSWORTHE64;
   1202 		return 0;
   1203 	}
   1204 
   1205 	/*
   1206 	 * Just make this information to avoid breaking scripts.
   1207 	 */
   1208 	log_info("fio: Use the random_generator= option to switch to lfsr or "
   1209 			 "tausworthe64.\n");
   1210 	return 0;
   1211 }
   1212 
   1213 int init_random_map(struct thread_data *td)
   1214 {
   1215 	unsigned long long blocks;
   1216 	struct fio_file *f;
   1217 	unsigned int i;
   1218 
   1219 	if (init_rand_distribution(td))
   1220 		return 0;
   1221 	if (!td_random(td))
   1222 		return 0;
   1223 
   1224 	for_each_file(td, f, i) {
   1225 		uint64_t fsize = min(f->real_file_size, f->io_size);
   1226 
   1227 		blocks = fsize / (unsigned long long) td->o.rw_min_bs;
   1228 
   1229 		if (check_rand_gen_limits(td, f, blocks))
   1230 			return 1;
   1231 
   1232 		if (td->o.random_generator == FIO_RAND_GEN_LFSR) {
   1233 			unsigned long seed;
   1234 
   1235 			seed = td->rand_seeds[FIO_RAND_BLOCK_OFF];
   1236 
   1237 			if (!lfsr_init(&f->lfsr, blocks, seed, 0)) {
   1238 				fio_file_set_lfsr(f);
   1239 				continue;
   1240 			}
   1241 		} else if (!td->o.norandommap) {
   1242 			f->io_axmap = axmap_new(blocks);
   1243 			if (f->io_axmap) {
   1244 				fio_file_set_axmap(f);
   1245 				continue;
   1246 			}
   1247 		} else if (td->o.norandommap)
   1248 			continue;
   1249 
   1250 		if (!td->o.softrandommap) {
   1251 			log_err("fio: failed allocating random map. If running"
   1252 				" a large number of jobs, try the 'norandommap'"
   1253 				" option or set 'softrandommap'. Or give"
   1254 				" a larger --alloc-size to fio.\n");
   1255 			return 1;
   1256 		}
   1257 
   1258 		log_info("fio: file %s failed allocating random map. Running "
   1259 			 "job without.\n", f->file_name);
   1260 	}
   1261 
   1262 	return 0;
   1263 }
   1264 
   1265 void close_files(struct thread_data *td)
   1266 {
   1267 	struct fio_file *f;
   1268 	unsigned int i;
   1269 
   1270 	for_each_file(td, f, i) {
   1271 		if (fio_file_open(f))
   1272 			td_io_close_file(td, f);
   1273 	}
   1274 }
   1275 
   1276 void close_and_free_files(struct thread_data *td)
   1277 {
   1278 	struct fio_file *f;
   1279 	unsigned int i;
   1280 
   1281 	dprint(FD_FILE, "close files\n");
   1282 
   1283 	for_each_file(td, f, i) {
   1284 		if (td->o.unlink && f->filetype == FIO_TYPE_FILE) {
   1285 			dprint(FD_FILE, "free unlink %s\n", f->file_name);
   1286 			td_io_unlink_file(td, f);
   1287 		}
   1288 
   1289 		if (fio_file_open(f))
   1290 			td_io_close_file(td, f);
   1291 
   1292 		remove_file_hash(f);
   1293 
   1294 		if (td->o.unlink && f->filetype == FIO_TYPE_FILE) {
   1295 			dprint(FD_FILE, "free unlink %s\n", f->file_name);
   1296 			td_io_unlink_file(td, f);
   1297 		}
   1298 
   1299 		sfree(f->file_name);
   1300 		f->file_name = NULL;
   1301 		if (fio_file_axmap(f)) {
   1302 			axmap_free(f->io_axmap);
   1303 			f->io_axmap = NULL;
   1304 		}
   1305 		sfree(f);
   1306 	}
   1307 
   1308 	td->o.filename = NULL;
   1309 	free(td->files);
   1310 	free(td->file_locks);
   1311 	td->files_index = 0;
   1312 	td->files = NULL;
   1313 	td->file_locks = NULL;
   1314 	td->o.file_lock_mode = FILE_LOCK_NONE;
   1315 	td->o.nr_files = 0;
   1316 }
   1317 
   1318 static void get_file_type(struct fio_file *f)
   1319 {
   1320 	struct stat sb;
   1321 
   1322 	if (!strcmp(f->file_name, "-"))
   1323 		f->filetype = FIO_TYPE_PIPE;
   1324 	else
   1325 		f->filetype = FIO_TYPE_FILE;
   1326 
   1327 #ifdef WIN32
   1328 	/* \\.\ is the device namespace in Windows, where every file is
   1329 	 * a block device */
   1330 	if (strncmp(f->file_name, "\\\\.\\", 4) == 0)
   1331 		f->filetype = FIO_TYPE_BLOCK;
   1332 #endif
   1333 
   1334 	if (!stat(f->file_name, &sb)) {
   1335 		if (S_ISBLK(sb.st_mode))
   1336 			f->filetype = FIO_TYPE_BLOCK;
   1337 		else if (S_ISCHR(sb.st_mode))
   1338 			f->filetype = FIO_TYPE_CHAR;
   1339 		else if (S_ISFIFO(sb.st_mode))
   1340 			f->filetype = FIO_TYPE_PIPE;
   1341 	}
   1342 }
   1343 
   1344 static bool __is_already_allocated(const char *fname, bool set)
   1345 {
   1346 	struct flist_head *entry;
   1347 	bool ret;
   1348 
   1349 	ret = file_bloom_exists(fname, set);
   1350 	if (!ret)
   1351 		return ret;
   1352 
   1353 	flist_for_each(entry, &filename_list) {
   1354 		struct file_name *fn;
   1355 
   1356 		fn = flist_entry(entry, struct file_name, list);
   1357 
   1358 		if (!strcmp(fn->filename, fname))
   1359 			return true;
   1360 	}
   1361 
   1362 	return false;
   1363 }
   1364 
   1365 static bool is_already_allocated(const char *fname)
   1366 {
   1367 	bool ret;
   1368 
   1369 	fio_file_hash_lock();
   1370 	ret = __is_already_allocated(fname, false);
   1371 	fio_file_hash_unlock();
   1372 
   1373 	return ret;
   1374 }
   1375 
   1376 static void set_already_allocated(const char *fname)
   1377 {
   1378 	struct file_name *fn;
   1379 
   1380 	fn = malloc(sizeof(struct file_name));
   1381 	fn->filename = strdup(fname);
   1382 
   1383 	fio_file_hash_lock();
   1384 	if (!__is_already_allocated(fname, true)) {
   1385 		flist_add_tail(&fn->list, &filename_list);
   1386 		fn = NULL;
   1387 	}
   1388 	fio_file_hash_unlock();
   1389 
   1390 	if (fn) {
   1391 		free(fn->filename);
   1392 		free(fn);
   1393 	}
   1394 }
   1395 
   1396 static void free_already_allocated(void)
   1397 {
   1398 	struct flist_head *entry, *tmp;
   1399 	struct file_name *fn;
   1400 
   1401 	if (flist_empty(&filename_list))
   1402 		return;
   1403 
   1404 	fio_file_hash_lock();
   1405 	flist_for_each_safe(entry, tmp, &filename_list) {
   1406 		fn = flist_entry(entry, struct file_name, list);
   1407 		free(fn->filename);
   1408 		flist_del(&fn->list);
   1409 		free(fn);
   1410 	}
   1411 
   1412 	fio_file_hash_unlock();
   1413 }
   1414 
   1415 static struct fio_file *alloc_new_file(struct thread_data *td)
   1416 {
   1417 	struct fio_file *f;
   1418 
   1419 	f = smalloc(sizeof(*f));
   1420 	if (!f) {
   1421 		assert(0);
   1422 		return NULL;
   1423 	}
   1424 
   1425 	f->fd = -1;
   1426 	f->shadow_fd = -1;
   1427 	fio_file_reset(td, f);
   1428 	return f;
   1429 }
   1430 
   1431 bool exists_and_not_regfile(const char *filename)
   1432 {
   1433 	struct stat sb;
   1434 
   1435 	if (lstat(filename, &sb) == -1)
   1436 		return false;
   1437 
   1438 #ifndef WIN32 /* NOT Windows */
   1439 	if (S_ISREG(sb.st_mode))
   1440 		return false;
   1441 #else
   1442 	/* \\.\ is the device namespace in Windows, where every file
   1443 	 * is a device node */
   1444 	if (S_ISREG(sb.st_mode) && strncmp(filename, "\\\\.\\", 4) != 0)
   1445 		return false;
   1446 #endif
   1447 
   1448 	return true;
   1449 }
   1450 
   1451 int add_file(struct thread_data *td, const char *fname, int numjob, int inc)
   1452 {
   1453 	int cur_files = td->files_index;
   1454 	char file_name[PATH_MAX];
   1455 	struct fio_file *f;
   1456 	int len = 0;
   1457 
   1458 	dprint(FD_FILE, "add file %s\n", fname);
   1459 
   1460 	if (td->o.directory)
   1461 		len = set_name_idx(file_name, PATH_MAX, td->o.directory, numjob,
   1462 					td->o.unique_filename);
   1463 
   1464 	sprintf(file_name + len, "%s", fname);
   1465 
   1466 	/* clean cloned siblings using existing files */
   1467 	if (numjob && is_already_allocated(file_name) &&
   1468 	    !exists_and_not_regfile(fname))
   1469 		return 0;
   1470 
   1471 	f = alloc_new_file(td);
   1472 
   1473 	if (td->files_size <= td->files_index) {
   1474 		unsigned int new_size = td->o.nr_files + 1;
   1475 
   1476 		dprint(FD_FILE, "resize file array to %d files\n", new_size);
   1477 
   1478 		td->files = realloc(td->files, new_size * sizeof(f));
   1479 		if (td->files == NULL) {
   1480 			log_err("fio: realloc OOM\n");
   1481 			assert(0);
   1482 		}
   1483 		if (td->o.file_lock_mode != FILE_LOCK_NONE) {
   1484 			td->file_locks = realloc(td->file_locks, new_size);
   1485 			if (!td->file_locks) {
   1486 				log_err("fio: realloc OOM\n");
   1487 				assert(0);
   1488 			}
   1489 			td->file_locks[cur_files] = FILE_LOCK_NONE;
   1490 		}
   1491 		td->files_size = new_size;
   1492 	}
   1493 	td->files[cur_files] = f;
   1494 	f->fileno = cur_files;
   1495 
   1496 	/*
   1497 	 * init function, io engine may not be loaded yet
   1498 	 */
   1499 	if (td->io_ops && td_ioengine_flagged(td, FIO_DISKLESSIO))
   1500 		f->real_file_size = -1ULL;
   1501 
   1502 	f->file_name = smalloc_strdup(file_name);
   1503 	if (!f->file_name)
   1504 		assert(0);
   1505 
   1506 	get_file_type(f);
   1507 
   1508 	switch (td->o.file_lock_mode) {
   1509 	case FILE_LOCK_NONE:
   1510 		break;
   1511 	case FILE_LOCK_READWRITE:
   1512 		f->rwlock = fio_rwlock_init();
   1513 		break;
   1514 	case FILE_LOCK_EXCLUSIVE:
   1515 		f->lock = fio_mutex_init(FIO_MUTEX_UNLOCKED);
   1516 		break;
   1517 	default:
   1518 		log_err("fio: unknown lock mode: %d\n", td->o.file_lock_mode);
   1519 		assert(0);
   1520 	}
   1521 
   1522 	td->files_index++;
   1523 	if (f->filetype == FIO_TYPE_FILE)
   1524 		td->nr_normal_files++;
   1525 
   1526 	set_already_allocated(file_name);
   1527 
   1528 	if (inc)
   1529 		td->o.nr_files++;
   1530 
   1531 	dprint(FD_FILE, "file %p \"%s\" added at %d\n", f, f->file_name,
   1532 							cur_files);
   1533 
   1534 	return cur_files;
   1535 }
   1536 
   1537 int add_file_exclusive(struct thread_data *td, const char *fname)
   1538 {
   1539 	struct fio_file *f;
   1540 	unsigned int i;
   1541 
   1542 	for_each_file(td, f, i) {
   1543 		if (!strcmp(f->file_name, fname))
   1544 			return i;
   1545 	}
   1546 
   1547 	return add_file(td, fname, 0, 1);
   1548 }
   1549 
   1550 void get_file(struct fio_file *f)
   1551 {
   1552 	dprint(FD_FILE, "get file %s, ref=%d\n", f->file_name, f->references);
   1553 	assert(fio_file_open(f));
   1554 	f->references++;
   1555 }
   1556 
   1557 int put_file(struct thread_data *td, struct fio_file *f)
   1558 {
   1559 	int f_ret = 0, ret = 0;
   1560 
   1561 	dprint(FD_FILE, "put file %s, ref=%d\n", f->file_name, f->references);
   1562 
   1563 	if (!fio_file_open(f)) {
   1564 		assert(f->fd == -1);
   1565 		return 0;
   1566 	}
   1567 
   1568 	assert(f->references);
   1569 	if (--f->references)
   1570 		return 0;
   1571 
   1572 	if (should_fsync(td) && td->o.fsync_on_close) {
   1573 		f_ret = fsync(f->fd);
   1574 		if (f_ret < 0)
   1575 			f_ret = errno;
   1576 	}
   1577 
   1578 	if (td->io_ops->close_file)
   1579 		ret = td->io_ops->close_file(td, f);
   1580 
   1581 	if (!ret)
   1582 		ret = f_ret;
   1583 
   1584 	td->nr_open_files--;
   1585 	fio_file_clear_open(f);
   1586 	assert(f->fd == -1);
   1587 	return ret;
   1588 }
   1589 
   1590 void lock_file(struct thread_data *td, struct fio_file *f, enum fio_ddir ddir)
   1591 {
   1592 	if (!f->lock || td->o.file_lock_mode == FILE_LOCK_NONE)
   1593 		return;
   1594 
   1595 	if (td->o.file_lock_mode == FILE_LOCK_READWRITE) {
   1596 		if (ddir == DDIR_READ)
   1597 			fio_rwlock_read(f->rwlock);
   1598 		else
   1599 			fio_rwlock_write(f->rwlock);
   1600 	} else if (td->o.file_lock_mode == FILE_LOCK_EXCLUSIVE)
   1601 		fio_mutex_down(f->lock);
   1602 
   1603 	td->file_locks[f->fileno] = td->o.file_lock_mode;
   1604 }
   1605 
   1606 void unlock_file(struct thread_data *td, struct fio_file *f)
   1607 {
   1608 	if (!f->lock || td->o.file_lock_mode == FILE_LOCK_NONE)
   1609 		return;
   1610 
   1611 	if (td->o.file_lock_mode == FILE_LOCK_READWRITE)
   1612 		fio_rwlock_unlock(f->rwlock);
   1613 	else if (td->o.file_lock_mode == FILE_LOCK_EXCLUSIVE)
   1614 		fio_mutex_up(f->lock);
   1615 
   1616 	td->file_locks[f->fileno] = FILE_LOCK_NONE;
   1617 }
   1618 
   1619 void unlock_file_all(struct thread_data *td, struct fio_file *f)
   1620 {
   1621 	if (td->o.file_lock_mode == FILE_LOCK_NONE || !td->file_locks)
   1622 		return;
   1623 	if (td->file_locks[f->fileno] != FILE_LOCK_NONE)
   1624 		unlock_file(td, f);
   1625 }
   1626 
   1627 static int recurse_dir(struct thread_data *td, const char *dirname)
   1628 {
   1629 	struct dirent *dir;
   1630 	int ret = 0;
   1631 	DIR *D;
   1632 
   1633 	D = opendir(dirname);
   1634 	if (!D) {
   1635 		char buf[FIO_VERROR_SIZE];
   1636 
   1637 		snprintf(buf, FIO_VERROR_SIZE, "opendir(%s)", dirname);
   1638 		td_verror(td, errno, buf);
   1639 		return 1;
   1640 	}
   1641 
   1642 	while ((dir = readdir(D)) != NULL) {
   1643 		char full_path[PATH_MAX];
   1644 		struct stat sb;
   1645 
   1646 		if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, ".."))
   1647 			continue;
   1648 
   1649 		sprintf(full_path, "%s%s%s", dirname, FIO_OS_PATH_SEPARATOR, dir->d_name);
   1650 
   1651 		if (lstat(full_path, &sb) == -1) {
   1652 			if (errno != ENOENT) {
   1653 				td_verror(td, errno, "stat");
   1654 				ret = 1;
   1655 				break;
   1656 			}
   1657 		}
   1658 
   1659 		if (S_ISREG(sb.st_mode)) {
   1660 			add_file(td, full_path, 0, 1);
   1661 			continue;
   1662 		}
   1663 		if (!S_ISDIR(sb.st_mode))
   1664 			continue;
   1665 
   1666 		ret = recurse_dir(td, full_path);
   1667 		if (ret)
   1668 			break;
   1669 	}
   1670 
   1671 	closedir(D);
   1672 	return ret;
   1673 }
   1674 
   1675 int add_dir_files(struct thread_data *td, const char *path)
   1676 {
   1677 	int ret = recurse_dir(td, path);
   1678 
   1679 	if (!ret)
   1680 		log_info("fio: opendir added %d files\n", td->o.nr_files);
   1681 
   1682 	return ret;
   1683 }
   1684 
   1685 void dup_files(struct thread_data *td, struct thread_data *org)
   1686 {
   1687 	struct fio_file *f;
   1688 	unsigned int i;
   1689 
   1690 	dprint(FD_FILE, "dup files: %d\n", org->files_index);
   1691 
   1692 	if (!org->files)
   1693 		return;
   1694 
   1695 	td->files = malloc(org->files_index * sizeof(f));
   1696 
   1697 	if (td->o.file_lock_mode != FILE_LOCK_NONE)
   1698 		td->file_locks = malloc(org->files_index);
   1699 
   1700 	for_each_file(org, f, i) {
   1701 		struct fio_file *__f;
   1702 
   1703 		__f = alloc_new_file(td);
   1704 
   1705 		if (f->file_name) {
   1706 			__f->file_name = smalloc_strdup(f->file_name);
   1707 			if (!__f->file_name)
   1708 				assert(0);
   1709 
   1710 			__f->filetype = f->filetype;
   1711 		}
   1712 
   1713 		if (td->o.file_lock_mode == FILE_LOCK_EXCLUSIVE)
   1714 			__f->lock = f->lock;
   1715 		else if (td->o.file_lock_mode == FILE_LOCK_READWRITE)
   1716 			__f->rwlock = f->rwlock;
   1717 
   1718 		td->files[i] = __f;
   1719 	}
   1720 }
   1721 
   1722 /*
   1723  * Returns the index that matches the filename, or -1 if not there
   1724  */
   1725 int get_fileno(struct thread_data *td, const char *fname)
   1726 {
   1727 	struct fio_file *f;
   1728 	unsigned int i;
   1729 
   1730 	for_each_file(td, f, i)
   1731 		if (!strcmp(f->file_name, fname))
   1732 			return i;
   1733 
   1734 	return -1;
   1735 }
   1736 
   1737 /*
   1738  * For log usage, where we add/open/close files automatically
   1739  */
   1740 void free_release_files(struct thread_data *td)
   1741 {
   1742 	close_files(td);
   1743 	td->o.nr_files = 0;
   1744 	td->o.open_files = 0;
   1745 	td->files_index = 0;
   1746 	td->nr_normal_files = 0;
   1747 }
   1748 
   1749 void fio_file_reset(struct thread_data *td, struct fio_file *f)
   1750 {
   1751 	int i;
   1752 
   1753 	for (i = 0; i < DDIR_RWDIR_CNT; i++) {
   1754 		f->last_pos[i] = f->file_offset;
   1755 		f->last_start[i] = -1ULL;
   1756 	}
   1757 
   1758 	if (fio_file_axmap(f))
   1759 		axmap_reset(f->io_axmap);
   1760 	else if (fio_file_lfsr(f))
   1761 		lfsr_reset(&f->lfsr, td->rand_seeds[FIO_RAND_BLOCK_OFF]);
   1762 }
   1763 
   1764 bool fio_files_done(struct thread_data *td)
   1765 {
   1766 	struct fio_file *f;
   1767 	unsigned int i;
   1768 
   1769 	for_each_file(td, f, i)
   1770 		if (!fio_file_done(f))
   1771 			return false;
   1772 
   1773 	return true;
   1774 }
   1775 
   1776 /* free memory used in initialization phase only */
   1777 void filesetup_mem_free(void)
   1778 {
   1779 	free_already_allocated();
   1780 }
   1781