Date: Sun, 21 Jun 2015 06:40:44 +0000 (UTC) From: Edward Tomasz Napierala <trasz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r284667 - stable/10/usr.bin/rctl Message-ID: <201506210640.t5L6eijW052482@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: trasz Date: Sun Jun 21 06:40:43 2015 New Revision: 284667 URL: https://svnweb.freebsd.org/changeset/base/284667 Log: MFC r282236: Make rctl(8) more user-friendly when RACCT/RCTL is disabled for some reason. Sponsored by: The FreeBSD Foundation Modified: stable/10/usr.bin/rctl/rctl.c Directory Properties: stable/10/ (props changed) Modified: stable/10/usr.bin/rctl/rctl.c ============================================================================== --- stable/10/usr.bin/rctl/rctl.c Sun Jun 21 06:36:54 2015 (r284666) +++ stable/10/usr.bin/rctl/rctl.c Sun Jun 21 06:40:43 2015 (r284667) @@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$"); #include <sys/types.h> #include <sys/rctl.h> +#include <sys/sysctl.h> #include <assert.h> #include <ctype.h> #include <err.h> @@ -305,13 +306,37 @@ print_rules(char *rules, int hflag, int } static void +enosys(void) +{ + int error, racct_enable; + size_t racct_enable_len; + + racct_enable_len = sizeof(racct_enable); + error = sysctlbyname("kern.racct.enable", + &racct_enable, &racct_enable_len, NULL, 0); + + if (error != 0) { + if (errno == ENOENT) + errx(1, "RACCT/RCTL support not present in kernel; see rctl(8) for details."); + + err(1, "sysctlbyname"); + } + + if (racct_enable == 0) + errx(1, "RACCT/RCTL present, but disabled; enable using kern.racct.enable=1 tunable"); +} + +static void add_rule(char *rule) { int error; error = rctl_add_rule(rule, strlen(rule) + 1, NULL, 0); - if (error != 0) + if (error != 0) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_add_rule"); + } free(rule); } @@ -330,8 +355,11 @@ show_limits(char *filter, int hflag, int error = rctl_get_limits(filter, strlen(filter) + 1, outbuf, outbuflen); - if (error && errno != ERANGE) + if (error && errno != ERANGE) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_get_limits"); + } } while (error && errno == ERANGE); print_rules(outbuf, hflag, nflag); @@ -345,8 +373,11 @@ remove_rule(char *filter) int error; error = rctl_remove_rule(filter, strlen(filter) + 1, NULL, 0); - if (error != 0) + if (error != 0) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_remove_rule"); + } free(filter); } @@ -399,8 +430,11 @@ show_usage(char *filter, int hflag) error = rctl_get_racct(filter, strlen(filter) + 1, outbuf, outbuflen); - if (error && errno != ERANGE) + if (error && errno != ERANGE) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_get_racct"); + } } while (error && errno == ERANGE); while ((tmp = strsep(&outbuf, ",")) != NULL) { @@ -439,8 +473,11 @@ show_rules(char *filter, int hflag, int err(1, "realloc"); error = rctl_get_rules(filter, filterlen, outbuf, outbuflen); - if (error && errno != ERANGE) + if (error && errno != ERANGE) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_get_rules"); + } } while (error && errno == ERANGE); print_rules(outbuf, hflag, nflag);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506210640.t5L6eijW052482>