mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 11:29:36 +03:00
6b95031f56
Optionally turn off disk's enclosure slot if an I/O is hung triggering the deadman. It's possible for outstanding I/O to a misbehaving SCSI disk to neither promptly complete or return an error. This can occur due to retry and recovery actions taken by the SCSI layer, driver, or disk. When it occurs the pool will be unresponsive even though there may be sufficient redundancy configured to proceeded without this single disk. When a hung I/O is detected by the kmods it will be posted as a deadman event. By default an I/O is considered to be hung after 5 minutes. This value can be changed with the zfs_deadman_ziotime_ms module parameter. If ZED_POWER_OFF_ENCLOSURE_SLOT_ON_DEADMAN is set the disk's enclosure slot will be powered off causing the outstanding I/O to fail. The ZED will then handle this like a normal disk failure. By default ZED_POWER_OFF_ENCLOSURE_SLOT_ON_DEADMAN is not set. As part of this change `zfs_deadman_events_per_second` is added to control the ratelimitting of deadman events independantly of delay events. In practice, a single deadman event is sufficient and more aren't particularly useful. Alphabetize the zfs_deadman_* entries in zfs.4. Reviewed-by: Tony Hutter <hutter2@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #16226
60 lines
1.8 KiB
Makefile
60 lines
1.8 KiB
Makefile
zedconfdir = $(sysconfdir)/zfs/zed.d
|
|
dist_zedconf_DATA = \
|
|
%D%/zed-functions.sh \
|
|
%D%/zed.rc
|
|
|
|
zedexecdir = $(zfsexecdir)/zed.d
|
|
|
|
dist_zedexec_SCRIPTS = \
|
|
%D%/all-debug.sh \
|
|
%D%/all-syslog.sh \
|
|
%D%/data-notify.sh \
|
|
%D%/deadman-slot_off.sh \
|
|
%D%/generic-notify.sh \
|
|
%D%/pool_import-led.sh \
|
|
%D%/resilver_finish-notify.sh \
|
|
%D%/resilver_finish-start-scrub.sh \
|
|
%D%/scrub_finish-notify.sh \
|
|
%D%/statechange-led.sh \
|
|
%D%/statechange-notify.sh \
|
|
%D%/statechange-slot_off.sh \
|
|
%D%/trim_finish-notify.sh \
|
|
%D%/vdev_attach-led.sh \
|
|
%D%/vdev_clear-led.sh
|
|
|
|
nodist_zedexec_SCRIPTS = \
|
|
%D%/history_event-zfs-list-cacher.sh
|
|
|
|
SUBSTFILES += $(nodist_zedexec_SCRIPTS)
|
|
|
|
zedconfdefaults = \
|
|
all-syslog.sh \
|
|
data-notify.sh \
|
|
deadman-slot_off.sh \
|
|
history_event-zfs-list-cacher.sh \
|
|
pool_import-led.sh \
|
|
resilver_finish-notify.sh \
|
|
resilver_finish-start-scrub.sh \
|
|
scrub_finish-notify.sh \
|
|
statechange-led.sh \
|
|
statechange-notify.sh \
|
|
statechange-slot_off.sh \
|
|
vdev_attach-led.sh \
|
|
vdev_clear-led.sh
|
|
|
|
dist_noinst_DATA += %D%/README
|
|
|
|
INSTALL_DATA_HOOKS += zed-install-data-hook
|
|
zed-install-data-hook:
|
|
$(MKDIR_P) "$(DESTDIR)$(zedconfdir)"
|
|
set -x; for f in $(zedconfdefaults); do \
|
|
[ -f "$(DESTDIR)$(zedconfdir)/$${f}" ] ||\
|
|
[ -L "$(DESTDIR)$(zedconfdir)/$${f}" ] || \
|
|
$(LN_S) "$(zedexecdir)/$${f}" "$(DESTDIR)$(zedconfdir)"; \
|
|
done
|
|
|
|
SHELLCHECKSCRIPTS += $(dist_zedconf_DATA) $(dist_zedexec_SCRIPTS) $(nodist_zedexec_SCRIPTS)
|
|
$(call SHELLCHECK_OPTS,$(dist_zedconf_DATA) $(dist_zedexec_SCRIPTS) $(nodist_zedexec_SCRIPTS)): SHELLCHECK_SHELL = sh
|
|
# False positive: 1>&"${ZED_FLOCK_FD}" looks suspiciously similar to a >&filename bash extension
|
|
$(call SHELLCHECK_OPTS,$(dist_zedconf_DATA) $(dist_zedexec_SCRIPTS) $(nodist_zedexec_SCRIPTS)): CHECKBASHISMS_IGNORE = -e 'should be >word 2>&1' -e '&"$${ZED_FLOCK_FD}"'
|