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 <axboe@fb.com>
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);