X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=filesetup.c;h=cc6d44091736aeba9e6ba1ab5be7a3d56bc29c1b;hb=a4d3b4dbf594be6223a21a47a7ce4c21c7dddaf0;hp=12a43b1fa14459439dd73013dd4ef018e5f6bfba;hpb=69bdd6badc47775443413405e1aea4abe9e570c9;p=fio.git diff --git a/filesetup.c b/filesetup.c index 12a43b1f..cc6d4409 100644 --- a/filesetup.c +++ b/filesetup.c @@ -59,7 +59,7 @@ static int extend_file(struct thread_data *td, struct fio_file *f) if (unlink_file || new_layout) { dprint(FD_FILE, "layout unlink %s\n", f->file_name); - if ((unlink(f->file_name) < 0) && (errno != ENOENT)) { + if ((td_io_unlink_file(td, f) < 0) && (errno != ENOENT)) { td_verror(td, errno, "unlink"); return 1; } @@ -172,7 +172,7 @@ static int extend_file(struct thread_data *td, struct fio_file *f) if (td->terminate) { dprint(FD_FILE, "terminate unlink %s\n", f->file_name); - unlink(f->file_name); + td_io_unlink_file(td, f); } else if (td->o.create_fsync) { if (fsync(f->fd) < 0) { td_verror(td, errno, "fsync"); @@ -261,16 +261,9 @@ static unsigned long long get_rand_file_size(struct thread_data *td) unsigned long long ret, sized; unsigned long r; - if (td->o.use_os_rand) { - r = os_random_long(&td->file_size_state); - sized = td->o.file_size_high - td->o.file_size_low; - ret = (unsigned long long) ((double) sized * (r / (OS_RAND_MAX + 1.0))); - } else { - r = __rand(&td->__file_size_state); - sized = td->o.file_size_high - td->o.file_size_low; - ret = (unsigned long long) ((double) sized * (r / (FRAND_MAX + 1.0))); - } - + r = __rand(&td->file_size_state); + sized = td->o.file_size_high - td->o.file_size_low; + ret = (unsigned long long) ((double) sized * (r / (FRAND_MAX + 1.0))); ret += td->o.file_size_low; ret -= (ret % td->o.rw_min_bs); return ret; @@ -898,7 +891,7 @@ int setup_files(struct thread_data *td) } } - if (!o->size || o->size > total_size) + if (!o->size || (total_size && o->size > total_size)) o->size = total_size; if (o->size < td_min_bs(td)) { @@ -998,12 +991,12 @@ static int __init_rand_distribution(struct thread_data *td, struct fio_file *f) { 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) @@ -1048,9 +1041,9 @@ int init_random_map(struct thread_data *td) 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; @@ -1100,6 +1093,11 @@ void close_and_free_files(struct thread_data *td) dprint(FD_FILE, "close files\n"); for_each_file(td, f, i) { + if (td->o.unlink && f->filetype == FIO_TYPE_FILE) { + dprint(FD_FILE, "free unlink %s\n", f->file_name); + td_io_unlink_file(td, f); + } + if (fio_file_open(f)) td_io_close_file(td, f); @@ -1107,7 +1105,7 @@ void close_and_free_files(struct thread_data *td) if (td->o.unlink && f->filetype == FIO_TYPE_FILE) { dprint(FD_FILE, "free unlink %s\n", f->file_name); - unlink(f->file_name); + td_io_unlink_file(td, f); } sfree(f->file_name);