summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2017-04-27 11:15:30 +1000
committerEmil Velikov <[email protected]>2017-04-30 09:46:30 +0100
commit359782960595fa063660db8c4d4eebcfdb51a56d (patch)
treeba914111df2844c29ad48b46146474b83736b483
parent505e7cd2324847ca74c7ef393e5013facdcc6cb5 (diff)
disk_cache: use block size rather than file size
The majority of cache files are less than 1kb this resulted in us greatly miscalculating the amount of disk space used by the cache. Using the number of blocks allocated to the file is more conservative and less likely to cause issues. This change will result in cache sizes being miscalculated further until old items added with the previous calculation have all been removed. However I don't see anyway around that, the previous patch should help limit that problem. Cc: "17.1" <[email protected]> Reviewed-and-Tested-by: Michel Dänzer <[email protected]> (cherry picked from commit 4e1f3afea9bdeddb0d21f00d25319bce580d80c3)
-rw-r--r--src/util/disk_cache.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c
index 9fd7b96adcf..cc9faff0130 100644
--- a/src/util/disk_cache.c
+++ b/src/util/disk_cache.c
@@ -532,7 +532,7 @@ unlink_lru_file_from_directory(const char *path)
unlink(filename);
free (filename);
- return sb.st_size;
+ return sb.st_blocks * 512;
}
/* Is entry a directory with a two-character name, (and not the
@@ -637,8 +637,8 @@ disk_cache_remove(struct disk_cache *cache, const cache_key key)
unlink(filename);
free(filename);
- if (sb.st_size)
- p_atomic_add(cache->size, - (uint64_t)sb.st_size);
+ if (sb.st_blocks)
+ p_atomic_add(cache->size, - (uint64_t)sb.st_blocks * 512);
}
static ssize_t
@@ -880,8 +880,14 @@ cache_put(void *job, int thread_index)
goto done;
}
- file_size += cf_data_size + dc_job->cache->driver_keys_blob_size;
- p_atomic_add(dc_job->cache->size, file_size);
+ struct stat sb;
+ if (stat(filename, &sb) == -1) {
+ /* Something went wrong remove the file */
+ unlink(filename);
+ goto done;
+ }
+
+ p_atomic_add(dc_job->cache->size, sb.st_blocks * 512);
done:
if (fd_final != -1)