summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Swanson <[email protected]>2017-03-06 16:17:32 +0000
committerTimothy Arceri <[email protected]>2017-03-15 11:15:11 +1100
commitb7e03d87e4b8a89e778c674e0dc0736f189b5d4f (patch)
tree50f64bf74c6940d26c37e1aed29faaba87ad2690
parentf1e96714424f516ec3ee7a341fb10068340b0411 (diff)
util/disk_cache: scale cache according to filesystem size
Select higher of current 1G default or 10% of filesystem where cache is located. Acked-by: Timothy Arceri <[email protected]> Reviewed-by: Grazvydas Ignotas <[email protected]>
-rw-r--r--src/util/disk_cache.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c
index 54134441bda..e015e56f5e2 100644
--- a/src/util/disk_cache.c
+++ b/src/util/disk_cache.c
@@ -31,6 +31,7 @@
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/statvfs.h>
#include <sys/mman.h>
#include <unistd.h>
#include <fcntl.h>
@@ -45,6 +46,7 @@
#include "util/mesa-sha1.h"
#include "util/ralloc.h"
#include "main/errors.h"
+#include "util/macros.h"
#include "disk_cache.h"
@@ -228,6 +230,7 @@ disk_cache_create(const char *gpu_name, const char *timestamp)
uint64_t max_size;
int fd = -1;
struct stat sb;
+ struct statvfs vfs = { 0 };
size_t size;
/* If running as a users other than the real user disable cache */
@@ -389,9 +392,11 @@ disk_cache_create(const char *gpu_name, const char *timestamp)
}
}
- /* Default to 1GB for maximum cache size. */
- if (max_size == 0)
- max_size = 1024*1024*1024;
+ /* Default to 1GB or 10% of filesystem for maximum cache size. */
+ if (max_size == 0) {
+ statvfs(path, &vfs);
+ max_size = MAX2(1024*1024*1024, vfs.f_blocks * vfs.f_bsize / 10);
+ }
cache->max_size = max_size;