mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Ratelimit deadman zevents as with delay zevents
Just as delay zevents can flood the zevent pipe when a vdev becomes unresponsive, so do the deadman zevents. Ratelimit deadman zevents according to the same tunable as for delay zevents. Enable deadman tests on FreeBSD and add a test for deadman event ratelimiting. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Don Brady <don.brady@delphix.com> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #11786
This commit is contained in:
@@ -625,6 +625,8 @@ vdev_alloc_common(spa_t *spa, uint_t id, uint64_t guid, vdev_ops_t *ops)
|
||||
*/
|
||||
zfs_ratelimit_init(&vd->vdev_delay_rl, &zfs_slow_io_events_per_second,
|
||||
1);
|
||||
zfs_ratelimit_init(&vd->vdev_deadman_rl, &zfs_slow_io_events_per_second,
|
||||
1);
|
||||
zfs_ratelimit_init(&vd->vdev_checksum_rl,
|
||||
&zfs_checksum_events_per_second, 1);
|
||||
|
||||
@@ -1106,6 +1108,7 @@ vdev_free(vdev_t *vd)
|
||||
cv_destroy(&vd->vdev_rebuild_cv);
|
||||
|
||||
zfs_ratelimit_fini(&vd->vdev_delay_rl);
|
||||
zfs_ratelimit_fini(&vd->vdev_deadman_rl);
|
||||
zfs_ratelimit_fini(&vd->vdev_checksum_rl);
|
||||
|
||||
if (vd == spa->spa_root_vdev)
|
||||
|
||||
+5
-3
@@ -395,8 +395,8 @@ zfs_zevent_post_cb(nvlist_t *nvl, nvlist_t *detector)
|
||||
}
|
||||
|
||||
/*
|
||||
* We want to rate limit ZIO delay and checksum events so as to not
|
||||
* flood ZED when a disk is acting up.
|
||||
* We want to rate limit ZIO delay, deadman, and checksum events so as to not
|
||||
* flood zevent consumers when a disk is acting up.
|
||||
*
|
||||
* Returns 1 if we're ratelimiting, 0 if not.
|
||||
*/
|
||||
@@ -405,11 +405,13 @@ zfs_is_ratelimiting_event(const char *subclass, vdev_t *vd)
|
||||
{
|
||||
int rc = 0;
|
||||
/*
|
||||
* __ratelimit() returns 1 if we're *not* ratelimiting and 0 if we
|
||||
* zfs_ratelimit() returns 1 if we're *not* ratelimiting and 0 if we
|
||||
* are. Invert it to get our return value.
|
||||
*/
|
||||
if (strcmp(subclass, FM_EREPORT_ZFS_DELAY) == 0) {
|
||||
rc = !zfs_ratelimit(&vd->vdev_delay_rl);
|
||||
} else if (strcmp(subclass, FM_EREPORT_ZFS_DEADMAN) == 0) {
|
||||
rc = !zfs_ratelimit(&vd->vdev_deadman_rl);
|
||||
} else if (strcmp(subclass, FM_EREPORT_ZFS_CHECKSUM) == 0) {
|
||||
rc = !zfs_ratelimit(&vd->vdev_checksum_rl);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user