Skip to content

Commit 6ceff4f

Browse files
author
Rob Wing
committed
fm: include checksum_n, checksum_t, io_n, and io_t in event payload
Sponsored-by: Seagate Technology LLC Submitted-by: Klara, Inc. Signed-off-by: Rob Wing <rob.wing@klarasystems.com>
1 parent a2f157d commit 6ceff4f

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

include/sys/fm/fs/zfs.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ extern "C" {
7878
#define FM_EREPORT_PAYLOAD_ZFS_VDEV_READ_ERRORS "vdev_read_errors"
7979
#define FM_EREPORT_PAYLOAD_ZFS_VDEV_WRITE_ERRORS "vdev_write_errors"
8080
#define FM_EREPORT_PAYLOAD_ZFS_VDEV_CKSUM_ERRORS "vdev_cksum_errors"
81+
#define FM_EREPORT_PAYLOAD_ZFS_VDEV_CKSUM_N "vdev_cksum_n"
82+
#define FM_EREPORT_PAYLOAD_ZFS_VDEV_CKSUM_T "vdev_cksum_t"
83+
#define FM_EREPORT_PAYLOAD_ZFS_VDEV_IO_N "vdev_io_n"
84+
#define FM_EREPORT_PAYLOAD_ZFS_VDEV_IO_T "vdev_io_t"
8185
#define FM_EREPORT_PAYLOAD_ZFS_VDEV_DELAYS "vdev_delays"
8286
#define FM_EREPORT_PAYLOAD_ZFS_PARENT_GUID "parent_guid"
8387
#define FM_EREPORT_PAYLOAD_ZFS_PARENT_TYPE "parent_type"

module/zfs/zfs_fm.c

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,42 @@ recent_events_compare(const void *a, const void *b)
200200
return (0);
201201
}
202202

203+
/*
204+
* workaround: vdev properties don't have inheritance
205+
*/
206+
static uint64_t
207+
vdev_prop_get_inherited(vdev_t *vd, vdev_prop_t prop)
208+
{
209+
uint64_t propdef, propval;
210+
211+
propdef = vdev_prop_default_numeric(prop);
212+
switch (prop) {
213+
case VDEV_PROP_CHECKSUM_N:
214+
propval = vd->vdev_checksum_n;
215+
break;
216+
case VDEV_PROP_CHECKSUM_T:
217+
propval = vd->vdev_checksum_t;
218+
break;
219+
case VDEV_PROP_IO_N:
220+
propval = vd->vdev_io_n;
221+
break;
222+
case VDEV_PROP_IO_T:
223+
propval = vd->vdev_io_t;
224+
break;
225+
default:
226+
propval = propdef;
227+
break;
228+
}
229+
230+
if (propval != propdef)
231+
return (propval);
232+
233+
if (vd->vdev_parent == NULL)
234+
return (propdef);
235+
236+
return (vdev_prop_get_inherited(vd->vdev_parent, prop));
237+
}
238+
203239
static void zfs_ereport_schedule_cleaner(void);
204240

205241
/*
@@ -662,6 +698,49 @@ zfs_ereport_start(nvlist_t **ereport_out, nvlist_t **detector_out,
662698
DATA_TYPE_UINT64, zb->zb_blkid, NULL);
663699
}
664700

701+
/*
702+
* Payload for tuning the zed
703+
*/
704+
if (vd != NULL && strcmp(subclass, FM_EREPORT_ZFS_CHECKSUM) == 0) {
705+
uint64_t cksum_n, cksum_t;
706+
707+
cksum_n = vdev_prop_get_inherited(vd, VDEV_PROP_CHECKSUM_N);
708+
if (cksum_n != vdev_prop_default_numeric(VDEV_PROP_CHECKSUM_N))
709+
fm_payload_set(ereport,
710+
FM_EREPORT_PAYLOAD_ZFS_VDEV_CKSUM_N,
711+
DATA_TYPE_UINT64,
712+
cksum_n,
713+
NULL);
714+
715+
cksum_t = vdev_prop_get_inherited(vd, VDEV_PROP_CHECKSUM_T);
716+
if (cksum_t != vdev_prop_default_numeric(VDEV_PROP_CHECKSUM_T))
717+
fm_payload_set(ereport,
718+
FM_EREPORT_PAYLOAD_ZFS_VDEV_CKSUM_T,
719+
DATA_TYPE_UINT64,
720+
cksum_t,
721+
NULL);
722+
}
723+
724+
if (vd != NULL && strcmp(subclass, FM_EREPORT_ZFS_IO) == 0) {
725+
uint64_t io_n, io_t;
726+
727+
io_n = vdev_prop_get_inherited(vd, VDEV_PROP_IO_N);
728+
if (io_n != vdev_prop_default_numeric(VDEV_PROP_IO_N))
729+
fm_payload_set(ereport,
730+
FM_EREPORT_PAYLOAD_ZFS_VDEV_IO_N,
731+
DATA_TYPE_UINT64,
732+
io_n,
733+
NULL);
734+
735+
io_t = vdev_prop_get_inherited(vd, VDEV_PROP_IO_T);
736+
if (io_t != vdev_prop_default_numeric(VDEV_PROP_IO_T))
737+
fm_payload_set(ereport,
738+
FM_EREPORT_PAYLOAD_ZFS_VDEV_IO_T,
739+
DATA_TYPE_UINT64,
740+
io_t,
741+
NULL);
742+
}
743+
665744
mutex_exit(&spa->spa_errlist_lock);
666745

667746
*ereport_out = ereport;

0 commit comments

Comments
 (0)