X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=memory.c;h=6cf7333375d035dd6eb36526eb338f355f310e78;hb=7914c6147adaf3ef32804519ced850168fff1711;hp=22a7f5ddde6c1dc785d9a6f37ad4a16d53cb38ec;hpb=29ac257cb18a38c20f970bd02f2bfb3a027309d5;p=fio.git diff --git a/memory.c b/memory.c index 22a7f5dd..6cf73333 100644 --- a/memory.c +++ b/memory.c @@ -1,11 +1,10 @@ /* * Memory helpers */ -#include -#include #include #include #include +#include #include "fio.h" #ifndef FIO_NO_HAVE_SHM_H @@ -138,6 +137,9 @@ static int alloc_mem_mmap(struct thread_data *td, size_t total_mem) } if (td->o.mmapfile) { + if (access(td->o.mmapfile, F_OK) == 0) + td->flags |= TD_F_MMAP_KEEP; + td->mmapfd = open(td->o.mmapfile, O_RDWR|O_CREAT, 0644); if (td->mmapfd < 0) { @@ -169,7 +171,7 @@ static int alloc_mem_mmap(struct thread_data *td, size_t total_mem) td->orig_buffer = NULL; if (td->mmapfd != 1 && td->mmapfd != -1) { close(td->mmapfd); - if (td->o.mmapfile) + if (td->o.mmapfile && !(td->flags & TD_F_MMAP_KEEP)) unlink(td->o.mmapfile); } @@ -187,7 +189,8 @@ static void free_mem_mmap(struct thread_data *td, size_t total_mem) if (td->o.mmapfile) { if (td->mmapfd != -1) close(td->mmapfd); - unlink(td->o.mmapfile); + if (!(td->flags & TD_F_MMAP_KEEP)) + unlink(td->o.mmapfile); free(td->o.mmapfile); } } @@ -271,7 +274,7 @@ static int alloc_mem_cudamalloc(struct thread_data *td, size_t total_mem) static void free_mem_cudamalloc(struct thread_data *td) { #ifdef CONFIG_CUDA - if (td->dev_mem_ptr != NULL) + if (td->dev_mem_ptr) cuMemFree(td->dev_mem_ptr); if (cuCtxDestroy(td->cu_ctx) != CUDA_SUCCESS)