util/disk_cache: do eviction before creating .tmp
authorGrazvydas Ignotas <notasas@gmail.com>
Wed, 15 Mar 2017 18:53:56 +0000 (20:53 +0200)
committerTimothy Arceri <tarceri@itsqueeze.com>
Wed, 15 Mar 2017 22:36:18 +0000 (09:36 +1100)
commiteb5a61f77a551e98b35bd9f4de3e44ed6c98dd1f
tree464d27edba910ba5058a5db33f1adeb054a6f1a8
parenta7ce0490e42b056dc20e13af795ca3e4cb73ed52
util/disk_cache: do eviction before creating .tmp

cache_put() first creates a .tmp file and then tries to do eviction.
The recently added LRU eviction code selects non-empty directory with
the oldest access time, but that may easily be the one with just the
new .tmp file, especially on Linux where atime is updated lazily
(with "relatime" mount option, which is the default). So when cache is
small, if random doesn't hit another dir LRU keeps selecting the same
dir with just the .tmp and not deleting anything. To fix this (and the
tests), do eviction earlier.

Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/util/disk_cache.c