@@ -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+
203239static 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