]> granicus.if.org Git - zfs/blobdiff - cmd/zed/zed_conf.c
Fix for ARC sysctls ignored at runtime
[zfs] / cmd / zed / zed_conf.c
index 3f38945c03d437d67c1cb45275a440f59e10db74..86671369c19ef08ecac6fd40c78270b210af475e 100644 (file)
@@ -1,27 +1,15 @@
 /*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license from the top-level
- * OPENSOLARIS.LICENSE or <http://opensource.org/licenses/CDDL-1.0>.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each file
- * and include the License file from the top-level OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
+ * This file is part of the ZFS Event Daemon (ZED)
+ * for ZFS on Linux (ZoL) <http://zfsonlinux.org/>.
  * Developed at Lawrence Livermore National Laboratory (LLNL-CODE-403049).
  * Copyright (C) 2013-2014 Lawrence Livermore National Security, LLC.
+ * Refer to the ZoL git commit log for authoritative copyright attribution.
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License Version 1.0 (CDDL-1.0).
+ * You can obtain a copy of the license from the top-level file
+ * "OPENSOLARIS.LICENSE" or at <http://opensource.org/licenses/CDDL-1.0>.
+ * You may not use this file except in compliance with the license.
  */
 
 #include <assert.h>
@@ -99,6 +87,7 @@ zed_conf_destroy(struct zed_conf *zcp)
                        zed_log_msg(LOG_WARNING,
                            "Failed to close state file \"%s\": %s",
                            zcp->state_file, strerror(errno));
+               zcp->state_fd = -1;
        }
        if (zcp->pid_file) {
                if ((unlink(zcp->pid_file) < 0) && (errno != ENOENT))
@@ -113,21 +102,26 @@ zed_conf_destroy(struct zed_conf *zcp)
                            zcp->pid_file, strerror(errno));
                zcp->pid_fd = -1;
        }
-       if (zcp->conf_file)
+       if (zcp->conf_file) {
                free(zcp->conf_file);
-
-       if (zcp->pid_file)
+               zcp->conf_file = NULL;
+       }
+       if (zcp->pid_file) {
                free(zcp->pid_file);
-
-       if (zcp->zedlet_dir)
+               zcp->pid_file = NULL;
+       }
+       if (zcp->zedlet_dir) {
                free(zcp->zedlet_dir);
-
-       if (zcp->state_file)
+               zcp->zedlet_dir = NULL;
+       }
+       if (zcp->state_file) {
                free(zcp->state_file);
-
-       if (zcp->zedlets)
+               zcp->state_file = NULL;
+       }
+       if (zcp->zedlets) {
                zed_strings_destroy(zcp->zedlets);
-
+               zcp->zedlets = NULL;
+       }
        free(zcp);
 }
 
@@ -161,6 +155,8 @@ _zed_conf_display_help(const char *prog, int got_err)
            "Run daemon in the foreground.");
        fprintf(fp, "%*c%*s %s\n", w1, 0x20, -w2, "-M",
            "Lock all pages in memory.");
+       fprintf(fp, "%*c%*s %s\n", w1, 0x20, -w2, "-P",
+           "$PATH for ZED to use (only used by ZTS).");
        fprintf(fp, "%*c%*s %s\n", w1, 0x20, -w2, "-Z",
            "Zero state file.");
        fprintf(fp, "\n");
@@ -190,10 +186,9 @@ _zed_conf_display_license(void)
            "The ZFS Event Daemon (ZED) is distributed under the terms of the",
            "  Common Development and Distribution License (CDDL-1.0)",
            "  <http://opensource.org/licenses/CDDL-1.0>.",
+           "",
            "Developed at Lawrence Livermore National Laboratory"
            " (LLNL-CODE-403049).",
-           "Copyright (C) 2013-2014"
-           " Lawrence Livermore National Security, LLC.",
            "",
            NULL
        };
@@ -254,7 +249,7 @@ _zed_conf_parse_path(char **resultp, const char *path)
 void
 zed_conf_parse_opts(struct zed_conf *zcp, int argc, char **argv)
 {
-       const char * const opts = ":hLVc:d:p:s:vfFMZ";
+       const char * const opts = ":hLVc:d:p:P:s:vfFMZ";
        int opt;
 
        if (!zcp || !argv || !argv[0])
@@ -282,6 +277,9 @@ zed_conf_parse_opts(struct zed_conf *zcp, int argc, char **argv)
                case 'p':
                        _zed_conf_parse_path(&zcp->pid_file, optarg);
                        break;
+               case 'P':
+                       _zed_conf_parse_path(&zcp->path, optarg);
+                       break;
                case 's':
                        _zed_conf_parse_path(&zcp->state_file, optarg);
                        break;
@@ -401,19 +399,19 @@ zed_conf_scan_dir(struct zed_conf *zcp)
                            direntp->d_name);
                        continue;
                }
-               if ((st.st_mode & S_IWGRP) & !zcp->do_force) {
+               if ((st.st_mode & S_IWGRP) && !zcp->do_force) {
                        zed_log_msg(LOG_NOTICE,
                            "Ignoring \"%s\": writable by group",
                            direntp->d_name);
                        continue;
                }
-               if ((st.st_mode & S_IWOTH) & !zcp->do_force) {
+               if ((st.st_mode & S_IWOTH) && !zcp->do_force) {
                        zed_log_msg(LOG_NOTICE,
                            "Ignoring \"%s\": writable by other",
                            direntp->d_name);
                        continue;
                }
-               if (zed_strings_add(zedlets, direntp->d_name) < 0) {
+               if (zed_strings_add(zedlets, NULL, direntp->d_name) < 0) {
                        zed_log_msg(LOG_WARNING,
                            "Failed to register \"%s\": %s",
                            direntp->d_name, strerror(errno));
@@ -520,7 +518,7 @@ zed_conf_write_pid(struct zed_conf *zcp)
        /*
         * Write PID file.
         */
-       n = snprintf(buf, sizeof (buf), "%d\n", (int) getpid());
+       n = snprintf(buf, sizeof (buf), "%d\n", (int)getpid());
        if ((n < 0) || (n >= sizeof (buf))) {
                errno = ERANGE;
                zed_log_msg(LOG_ERR, "Failed to write PID file \"%s\": %s",
@@ -644,7 +642,7 @@ zed_conf_read_state(struct zed_conf *zcp, uint64_t *eidp, int64_t etime[])
                    "Failed to read state file: %s", strerror(errno));
                return (-1);
        }
-       if (lseek(zcp->state_fd, 0, SEEK_SET) == (off_t) -1) {
+       if (lseek(zcp->state_fd, 0, SEEK_SET) == (off_t)-1) {
                zed_log_msg(LOG_WARNING,
                    "Failed to reposition state file offset: %s",
                    strerror(errno));
@@ -694,7 +692,7 @@ zed_conf_write_state(struct zed_conf *zcp, uint64_t eid, int64_t etime[])
                    "Failed to write state file: %s", strerror(errno));
                return (-1);
        }
-       if (lseek(zcp->state_fd, 0, SEEK_SET) == (off_t) -1) {
+       if (lseek(zcp->state_fd, 0, SEEK_SET) == (off_t)-1) {
                zed_log_msg(LOG_WARNING,
                    "Failed to reposition state file offset: %s",
                    strerror(errno));