Expose the maximum cache size setting as a flag

Allow the user to customize the size of the sshfs cache by adding a new
max_cache_size flag and turning the hardcoded constant into a variable.
This commit is contained in:
Julio Merino 2016-01-27 11:07:19 -05:00 committed by Julio Merino
parent d1ddbbcae5
commit ebfeebd468
3 changed files with 8 additions and 2 deletions

View File

@ -3,6 +3,8 @@ Draft notes for upcoming release
* Integrated osxfuse's copy of sshfs, which means that sshfs now works
on OS X out of the box.
* Added -o cache_max_size=N option to let users tune the maximum size of
the cache in number of entries.
Release 2.7 (2015-01-28)
------------------------

View File

@ -15,7 +15,7 @@
#include <pthread.h>
#define DEFAULT_CACHE_TIMEOUT_SECS 20
#define MAX_CACHE_SIZE 10000
#define DEFAULT_MAX_CACHE_SIZE 10000
#define MIN_CACHE_CLEAN_INTERVAL 5
#define CACHE_CLEAN_INTERVAL 60
@ -24,6 +24,7 @@ struct cache {
unsigned stat_timeout_secs;
unsigned dir_timeout_secs;
unsigned link_timeout_secs;
unsigned max_size;
struct fuse_cache_operations *next_oper;
GHashTable *table;
pthread_mutex_t lock;
@ -71,7 +72,7 @@ static void cache_clean(void)
{
time_t now = time(NULL);
if (now > cache.last_cleaned + MIN_CACHE_CLEAN_INTERVAL &&
(g_hash_table_size(cache.table) > MAX_CACHE_SIZE ||
(g_hash_table_size(cache.table) > cache.max_size ||
now > cache.last_cleaned + CACHE_CLEAN_INTERVAL)) {
g_hash_table_foreach_remove(cache.table,
(GHRFunc) cache_clean_entry, &now);
@ -576,6 +577,7 @@ static const struct fuse_opt cache_opts[] = {
{ "cache_stat_timeout=%u", offsetof(struct cache, stat_timeout_secs), 0 },
{ "cache_dir_timeout=%u", offsetof(struct cache, dir_timeout_secs), 0 },
{ "cache_link_timeout=%u", offsetof(struct cache, link_timeout_secs), 0 },
{ "cache_max_size=%u", offsetof(struct cache, max_size), 0 },
FUSE_OPT_END
};
@ -584,6 +586,7 @@ int cache_parse_options(struct fuse_args *args)
cache.stat_timeout_secs = DEFAULT_CACHE_TIMEOUT_SECS;
cache.dir_timeout_secs = DEFAULT_CACHE_TIMEOUT_SECS;
cache.link_timeout_secs = DEFAULT_CACHE_TIMEOUT_SECS;
cache.max_size = DEFAULT_MAX_CACHE_SIZE;
cache.on = 1;
return fuse_opt_parse(args, &cache, cache_opts, NULL);

View File

@ -3377,6 +3377,7 @@ static void usage(const char *progname)
" -o sync_readdir synchronous readdir\n"
" -o sshfs_debug print some debugging information\n"
" -o cache=BOOL enable caching {yes,no} (default: yes)\n"
" -o cache_max_size=N sets the maximum size of the cache (default: 10000)\n"
" -o cache_timeout=N sets timeout for caches in seconds (default: 20)\n"
" -o cache_X_timeout=N sets timeout for {stat,dir,link} cache\n"
" -o workaround=LIST colon separated list of workarounds\n"