Changeset View
Changeset View
Standalone View
Standalone View
sys/geom/journal/g_journal.c
Show All 12 Lines | |||||
if (error != 0 || req->newptr == NULL) | if (error != 0 || req->newptr == NULL) | ||||
return (error); | return (error); | ||||
if (entries < 1 || entries > GJ_RECORD_HEADER_NENTRIES) | if (entries < 1 || entries > GJ_RECORD_HEADER_NENTRIES) | ||||
return (EINVAL); | return (EINVAL); | ||||
g_journal_record_entries = entries; | g_journal_record_entries = entries; | ||||
return (0); | return (0); | ||||
} | } | ||||
SYSCTL_PROC(_kern_geom_journal, OID_AUTO, record_entries, | SYSCTL_PROC(_kern_geom_journal, OID_AUTO, record_entries, | ||||
CTLTYPE_UINT | CTLFLAG_RW, NULL, 0, g_journal_record_entries_sysctl, "I", | CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, NULL, 0, | ||||
g_journal_record_entries_sysctl, "I", | |||||
"Maximum number of entires in one journal record"); | "Maximum number of entires in one journal record"); | ||||
SYSCTL_UINT(_kern_geom_journal, OID_AUTO, optimize, CTLFLAG_RW, | SYSCTL_UINT(_kern_geom_journal, OID_AUTO, optimize, CTLFLAG_RW, | ||||
&g_journal_do_optimize, 0, "Try to combine bios on flush and copy"); | &g_journal_do_optimize, 0, "Try to combine bios on flush and copy"); | ||||
static u_long g_journal_cache_used = 0; | static u_long g_journal_cache_used = 0; | ||||
static u_long g_journal_cache_limit = 64 * 1024 * 1024; | static u_long g_journal_cache_limit = 64 * 1024 * 1024; | ||||
static u_int g_journal_cache_divisor = 2; | static u_int g_journal_cache_divisor = 2; | ||||
static u_int g_journal_cache_switch = 90; | static u_int g_journal_cache_switch = 90; | ||||
Show All 15 Lines | |||||
error = sysctl_handle_long(oidp, &limit, 0, req); | error = sysctl_handle_long(oidp, &limit, 0, req); | ||||
if (error != 0 || req->newptr == NULL) | if (error != 0 || req->newptr == NULL) | ||||
return (error); | return (error); | ||||
g_journal_cache_limit = limit; | g_journal_cache_limit = limit; | ||||
g_journal_cache_low = (limit / 100) * g_journal_cache_switch; | g_journal_cache_low = (limit / 100) * g_journal_cache_switch; | ||||
return (0); | return (0); | ||||
} | } | ||||
SYSCTL_PROC(_kern_geom_journal_cache, OID_AUTO, limit, | SYSCTL_PROC(_kern_geom_journal_cache, OID_AUTO, limit, | ||||
CTLTYPE_ULONG | CTLFLAG_RWTUN, NULL, 0, g_journal_cache_limit_sysctl, "I", | CTLTYPE_ULONG | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, NULL, 0, | ||||
g_journal_cache_limit_sysctl, "I", | |||||
"Maximum number of allocated bytes"); | "Maximum number of allocated bytes"); | ||||
SYSCTL_UINT(_kern_geom_journal_cache, OID_AUTO, divisor, CTLFLAG_RDTUN, | SYSCTL_UINT(_kern_geom_journal_cache, OID_AUTO, divisor, CTLFLAG_RDTUN, | ||||
&g_journal_cache_divisor, 0, | &g_journal_cache_divisor, 0, | ||||
"(kmem_size / kern.geom.journal.cache.divisor) == cache size"); | "(kmem_size / kern.geom.journal.cache.divisor) == cache size"); | ||||
static int | static int | ||||
g_journal_cache_switch_sysctl(SYSCTL_HANDLER_ARGS) | g_journal_cache_switch_sysctl(SYSCTL_HANDLER_ARGS) | ||||
{ | { | ||||
u_int cswitch; | u_int cswitch; | ||||
int error; | int error; | ||||
cswitch = g_journal_cache_switch; | cswitch = g_journal_cache_switch; | ||||
error = sysctl_handle_int(oidp, &cswitch, 0, req); | error = sysctl_handle_int(oidp, &cswitch, 0, req); | ||||
if (error != 0 || req->newptr == NULL) | if (error != 0 || req->newptr == NULL) | ||||
return (error); | return (error); | ||||
if (cswitch > 100) | if (cswitch > 100) | ||||
return (EINVAL); | return (EINVAL); | ||||
g_journal_cache_switch = cswitch; | g_journal_cache_switch = cswitch; | ||||
g_journal_cache_low = (g_journal_cache_limit / 100) * cswitch; | g_journal_cache_low = (g_journal_cache_limit / 100) * cswitch; | ||||
return (0); | return (0); | ||||
} | } | ||||
SYSCTL_PROC(_kern_geom_journal_cache, OID_AUTO, switch, | SYSCTL_PROC(_kern_geom_journal_cache, OID_AUTO, switch, | ||||
CTLTYPE_UINT | CTLFLAG_RW, NULL, 0, g_journal_cache_switch_sysctl, "I", | CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, NULL, 0, | ||||
g_journal_cache_switch_sysctl, "I", | |||||
"Force switch when we hit this percent of cache use"); | "Force switch when we hit this percent of cache use"); | ||||
SYSCTL_UINT(_kern_geom_journal_cache, OID_AUTO, misses, CTLFLAG_RW, | SYSCTL_UINT(_kern_geom_journal_cache, OID_AUTO, misses, CTLFLAG_RW, | ||||
&g_journal_cache_misses, 0, "Number of cache misses"); | &g_journal_cache_misses, 0, "Number of cache misses"); | ||||
SYSCTL_UINT(_kern_geom_journal_cache, OID_AUTO, alloc_failures, CTLFLAG_RW, | SYSCTL_UINT(_kern_geom_journal_cache, OID_AUTO, alloc_failures, CTLFLAG_RW, | ||||
&g_journal_cache_alloc_failures, 0, "Memory allocation failures"); | &g_journal_cache_alloc_failures, 0, "Memory allocation failures"); | ||||
static u_long g_journal_stats_bytes_skipped = 0; | static u_long g_journal_stats_bytes_skipped = 0; | ||||
static u_long g_journal_stats_combined_ios = 0; | static u_long g_journal_stats_combined_ios = 0; | ||||
Show All 12 Lines |