From: Jens Axboe Date: Thu, 20 Mar 2014 14:28:11 +0000 (-0600) Subject: Unlink after file close X-Git-Tag: fio-2.1.7~5 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=b5f4d8baefc6eb3e13235b7d9042b7ffecdb23dd Unlink after file close Sébastien reports: I'm having an issue on windows : unlink=1 is not working (temp file are still there) and it's working fine on unix Looking at the code in close_and_free_files function : [...] if (td->o.unlink && f->filetype == FIO_TYPE_FILE) { dprint(FD_FILE, "free unlink %s\n", f->file_name); unlink(f->file_name); } [...] Unlink() fails because the file is still open : On Solaris, truss shows the following : [...] write(3, "\0\0\0\0\0 ;80\0\0\0\0\0".., 32768) = 32768 unlink("/data/fio/random_rw.0.0") = 0 close(3) = 0 [...] So unlink is called first. I would put this unlinking phase AFTER the remove_file_hash call. Signed-off-by: Jens Axboe --- diff --git a/filesetup.c b/filesetup.c index c3c0fc4b..9c03a626 100644 --- a/filesetup.c +++ b/filesetup.c @@ -1057,16 +1057,16 @@ 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); - unlink(f->file_name); - } - if (fio_file_open(f)) td_io_close_file(td, f); remove_file_hash(f); + if (td->o.unlink && f->filetype == FIO_TYPE_FILE) { + dprint(FD_FILE, "free unlink %s\n", f->file_name); + unlink(f->file_name); + } + sfree(f->file_name); f->file_name = NULL; axmap_free(f->io_axmap);