diff options
author | Tony Hutter <[email protected]> | 2018-02-23 11:38:05 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2018-02-23 11:38:05 -0800 |
commit | bf95a000c432dc92591432bfd2b7943cbbfb6708 (patch) | |
tree | 427a2a5acfa354546ce03c4d957a7751b2853781 /cmd/zed/zed_event.c | |
parent | e9a77290081b578144e9a911ad734f67274df82f (diff) |
Add scrub after resilver zed script
* Add a zed script to kick off a scrub after a resilver. The script is
disabled by default.
* Add a optional $PATH (-P) option to zed to allow it to use a custom
$PATH for its zedlets. This is needed when you're running zed under
the ZTS in a local workspace.
* Update test scripts to not copy in all-debug.sh and all-syslog.sh by
default. They can be optionally copied in as part of zed_setup().
These scripts slow down zed considerably under heavy events loads and
can cause events to be dropped or their delivery delayed. This was
causing some sporadic failures in the 'fault' tests.
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Richard Laager <[email protected]>
Signed-off-by: Tony Hutter <[email protected]>
Closes #4662
Closes #7086
Diffstat (limited to 'cmd/zed/zed_event.c')
-rw-r--r-- | cmd/zed/zed_event.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/cmd/zed/zed_event.c b/cmd/zed/zed_event.c index 390235019..2a7ff16fd 100644 --- a/cmd/zed/zed_event.c +++ b/cmd/zed/zed_event.c @@ -733,12 +733,14 @@ _zed_event_add_nvpair(uint64_t eid, zed_strings_t *zsp, nvpair_t *nvp) /* * Restrict various environment variables to safe and sane values - * when constructing the environment for the child process. + * when constructing the environment for the child process, unless + * we're running with a custom $PATH (like under the ZFS test suite). * * Reference: Secure Programming Cookbook by Viega & Messier, Section 1.1. */ static void -_zed_event_add_env_restrict(uint64_t eid, zed_strings_t *zsp) +_zed_event_add_env_restrict(uint64_t eid, zed_strings_t *zsp, + const char *path) { const char *env_restrict[][2] = { { "IFS", " \t\n" }, @@ -753,11 +755,35 @@ _zed_event_add_env_restrict(uint64_t eid, zed_strings_t *zsp) { "ZFS_RELEASE", ZFS_META_RELEASE }, { NULL, NULL } }; + + /* + * If we have a custom $PATH, use the default ZFS binary locations + * instead of the hard-coded ones. + */ + const char *env_path[][2] = { + { "IFS", " \t\n" }, + { "PATH", NULL }, /* $PATH copied in later on */ + { "ZDB", "zdb" }, + { "ZED", "zed" }, + { "ZFS", "zfs" }, + { "ZINJECT", "zinject" }, + { "ZPOOL", "zpool" }, + { "ZFS_ALIAS", ZFS_META_ALIAS }, + { "ZFS_VERSION", ZFS_META_VERSION }, + { "ZFS_RELEASE", ZFS_META_RELEASE }, + { NULL, NULL } + }; const char *(*pa)[2]; assert(zsp != NULL); - for (pa = env_restrict; *(*pa); pa++) { + pa = path != NULL ? env_path : env_restrict; + + for (; *(*pa); pa++) { + /* Use our custom $PATH if we have one */ + if (path != NULL && strcmp((*pa)[0], "PATH") == 0) + (*pa)[1] = path; + _zed_event_add_var(eid, zsp, NULL, (*pa)[0], "%s", (*pa)[1]); } } @@ -902,7 +928,7 @@ zed_event_service(struct zed_conf *zcp) while ((nvp = nvlist_next_nvpair(nvl, nvp))) _zed_event_add_nvpair(eid, zsp, nvp); - _zed_event_add_env_restrict(eid, zsp); + _zed_event_add_env_restrict(eid, zsp, zcp->path); _zed_event_add_env_preserve(eid, zsp); _zed_event_add_var(eid, zsp, ZED_VAR_PREFIX, "PID", |