[Mesa-dev] [PATCH 1/2] util/disk_cache: delete .tmp if target exists

Grazvydas Ignotas notasas at gmail.com
Sat Mar 18 20:58:54 UTC 2017


At the time of target file check, .tmp file is already created and file
lock is held, so we should remove the .tmp, like in other error paths.

With this, piglit no longer leaves large amount of empty .tmp files
behind, which waste directory entries and may interfere with eviction.

Signed-off-by: Grazvydas Ignotas <notasas at gmail.com>
---
 src/util/disk_cache.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c
index 6c91f23..f6768d5 100644
--- a/src/util/disk_cache.c
+++ b/src/util/disk_cache.c
@@ -841,12 +841,14 @@ cache_put(void *job, int thread_index)
     * another process won the race between when we saw that the file
     * didn't exist and now. In this case, we don't do anything more,
     * (to ensure the size accounting of the cache doesn't get off).
     */
    fd_final = open(filename, O_RDONLY | O_CLOEXEC);
-   if (fd_final != -1)
+   if (fd_final != -1) {
+      unlink(filename_tmp);
       goto done;
+   }
 
    /* OK, we're now on the hook to write out a file that we know is
     * not in the cache, and is also not being written out to the cache
     * by some other process.
     *
-- 
2.7.4



More information about the mesa-dev mailing list