#define DEF_FORCE_SCAN_INTERVAL (30 * 60)
#define MIN_FORCE_SCAN_INTERVAL (60)
#define MAX_FORCE_SCAN_INTERVAL (24 * 60 * 60)
+#define DISABLED_FORCE_SCAN_INTERVAL (-1)
#define OPT_DRY_RUN 1
#define OPT_CANDIDATE_NUM 2
"\t-t, --scan-threads=NUM, scanning threads (default: %u)\n"
"\t --candidate-num=NUM, candidate number of approximate LRU (default: %d, min: %d, max: %d)\n"
"\t --max-scan-secs=NUM, max seconds to scan continously before purging (default: %d, min: %d, max: %d)\n"
- "\t --force-scan-interval=NUM, seconds to next forceful scanning (default: %d, min: %d, max: %d)\n"
+ "\t --force-scan-interval=NUM, seconds to next forceful scanning (default: %d, min: %d, max: %d, disabled: %d)\n"
"\t-w, --dump=FILE, dump stats to FILE when signal USR1 is recieved (default: /var/run/lpcc_purge-RWID.stats)\n"
"\t --pidfile=FILE, the pidfile name (default: /var/run/lpcc_purge-RWID.pid)\n"
"\t --clear-hashdir, clear empty hash dir after detaching file\n"
DEF_CANDIDATE_NUM, MIN_CANDIDATE_NUM, MAX_CANDIDATE_NUM,
DEF_MAX_SCAN_SECS, MIN_MAX_SCAN_SECS, MAX_MAX_SCAN_SECS,
DEF_FORCE_SCAN_INTERVAL, MIN_FORCE_SCAN_INTERVAL,
- MAX_FORCE_SCAN_INTERVAL
+ MAX_FORCE_SCAN_INTERVAL, DISABLED_FORCE_SCAN_INTERVAL
);
}
break;
case OPT_FORCE_SCAN_INTERVAL:
value = strtol(optarg, &endptr, 10);
- if (*endptr != '\0' || value < MIN_FORCE_SCAN_INTERVAL ||
- value > MAX_FORCE_SCAN_INTERVAL) {
+ if (*endptr != '\0' || (value != DISABLED_FORCE_SCAN_INTERVAL &&
+ (value < MIN_FORCE_SCAN_INTERVAL ||
+ value > MAX_FORCE_SCAN_INTERVAL))) {
llapi_error(LLAPI_MSG_FATAL, -EINVAL,
"invalid force-scan-interval: '%s'\n",
optarg);
double usage = lpcc_purge_get_fs_usage(opt.o_cache);
LPCC_PURGE_LOG(LLAPI_MSG_DEBUG, "usage: %.1f\n", usage);
if (usage >= opt.o_high_usage || opt.o_dry_run ||
+ (opt.o_force_scan_interval != DISABLED_FORCE_SCAN_INTERVAL &&
(now - xstats[1].xs_last_scan_time) >
- opt.o_force_scan_interval) {
+ opt.o_force_scan_interval)) {
stats.s_start_usage = usage;
xstats[1].xs_last_scan_time = now;
break;