util/disk_cache: delete .tmp if target exists
authorGrazvydas Ignotas <notasas@gmail.com>
Sat, 18 Mar 2017 20:58:54 +0000 (22:58 +0200)
committerTimothy Arceri <tarceri@itsqueeze.com>
Sun, 19 Mar 2017 21:24:38 +0000 (08:24 +1100)
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@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/util/disk_cache.c

index 79ec63080cadf00401b45f8b283b1480541d8315..36b27d95ede581adbdc51ae0d867a5d27ca6c03d 100644 (file)
@@ -843,8 +843,10 @@ cache_put(void *job, int thread_index)
     * (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