68301ba20e
This commit adds two features to zed, that macOS desires. The first is that when you unload the kernel module, zed would enter into a cpubusy loop calling zfs_events_next() repeatedly. We now look for ENODEV, returned by kernel, so zed can exit gracefully. Second feature is -I (idle) (alas -P persist was taken) is for the deamon to; 1; if started without ZFS kernel module, stick around waiting for it. 2; if kernel module is unloaded, go back to 1. This is due to daemons in macOS is started by launchctl, and is expected to stick around. Currently, the busy loop only exists when errno is ENODEV. This is to ensure that functionality that upstream expects is not changed. It did not care about errors before, and it still does not. (with the exception of ENODEV). However, it is probably better that all errors (ERESTART notwithstanding) exits the loop, and the issues complaining about zed taking all CPU will go away. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Jorgen Lundman <lundman@lundman.net> Closes #10476
30 lines
984 B
C
30 lines
984 B
C
/*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef ZED_EVENT_H
|
|
#define ZED_EVENT_H
|
|
|
|
#include <stdint.h>
|
|
|
|
int zed_event_init(struct zed_conf *zcp);
|
|
|
|
void zed_event_fini(struct zed_conf *zcp);
|
|
|
|
int zed_event_seek(struct zed_conf *zcp, uint64_t saved_eid,
|
|
int64_t saved_etime[]);
|
|
|
|
int zed_event_service(struct zed_conf *zcp);
|
|
|
|
#endif /* !ZED_EVENT_H */
|