X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=filesetup.c;h=4310a79f7e6e513b341324c3b2aa3679ffa39219;hp=d0e3ed212366c27c05d7e7618912f80508fdb907;hb=13f8e2d2e3e5ec7d8c18b70fb2a2e2a026190020;hpb=25205e975e6dce6079a4b94d656724011f1aabd0 diff --git a/filesetup.c b/filesetup.c index d0e3ed21..4310a79f 100644 --- a/filesetup.c +++ b/filesetup.c @@ -98,27 +98,24 @@ static int create_files(struct thread_data *td) return 0; } + need_create = 0; + if (td->filetype == FIO_TYPE_FILE) + for_each_file(td, f, i) + need_create += file_ok(td, f); + + if (!need_create) + return 0; + if (!td->total_file_size) { log_err("Need size for create\n"); td_verror(td, EINVAL); return 1; } - need_create = 0; - for_each_file(td, f, i) { - f->file_size = td->total_file_size / td->nr_files; - need_create += file_ok(td, f); - } - - td->io_size = td->total_file_size; - - if (!need_create) - return 0; - temp_stall_ts = 1; fprintf(f_out, "%s: Laying out IO file(s) (%d x %LuMiB == %LuMiB)\n", - td->name, td->nr_files, - (td->total_file_size >> 20) / td->nr_files, + td->name, td->nr_uniq_files, + (td->total_file_size >> 20) / td->nr_uniq_files, td->total_file_size >> 20); err = 0; @@ -365,12 +362,24 @@ int setup_files(struct thread_data *td) if (create_files(td)) return 1; + err = 0; for_each_file(td, f, i) { err = setup_file(td, f); if (err) break; } + if (err) + return err; + + /* + * Recalculate the total file size now that files are set up. + */ + td->total_file_size = 0; + for_each_file(td, f, i) + td->total_file_size += f->file_size; + + td->io_size = td->total_file_size; if (td->io_size == 0) { log_err("%s: no io blocks\n", td->name); td_verror(td, EINVAL); @@ -397,6 +406,8 @@ void close_files(struct thread_data *td) if (f->fd != -1) { if (td->unlink && td->filetype == FIO_TYPE_FILE) unlink(f->file_name); + free(f->file_name); + f->file_name = NULL; close(f->fd); f->fd = -1; } @@ -405,4 +416,8 @@ void close_files(struct thread_data *td) f->mmap = NULL; } } + + free(td->files); + td->files = NULL; + td->nr_files = 0; }