@@ -667,6 +667,14 @@ vdev_alloc_common(spa_t *spa, uint_t id, uint64_t guid, vdev_ops_t *ops)
667667 zfs_ratelimit_init (& vd -> vdev_checksum_rl ,
668668 & zfs_checksum_events_per_second , 1 );
669669
670+ /*
671+ * Default Thresholds for tuning ZED
672+ */
673+ vd -> vdev_checksum_n = vdev_prop_default_numeric (VDEV_PROP_CHECKSUM_N );
674+ vd -> vdev_checksum_t = vdev_prop_default_numeric (VDEV_PROP_CHECKSUM_T );
675+ vd -> vdev_io_n = vdev_prop_default_numeric (VDEV_PROP_IO_N );
676+ vd -> vdev_io_t = vdev_prop_default_numeric (VDEV_PROP_IO_T );
677+
670678 list_link_init (& vd -> vdev_config_dirty_node );
671679 list_link_init (& vd -> vdev_state_dirty_node );
672680 list_link_init (& vd -> vdev_initialize_node );
@@ -3622,6 +3630,39 @@ vdev_load(vdev_t *vd)
36223630 }
36233631 }
36243632
3633+ if (vd -> vdev_top_zap != 0 || vd -> vdev_leaf_zap != 0 ) {
3634+ uint64_t zapobj ;
3635+
3636+ if (vd -> vdev_top_zap != 0 )
3637+ zapobj = vd -> vdev_top_zap ;
3638+ else
3639+ zapobj = vd -> vdev_leaf_zap ;
3640+
3641+ error = vdev_prop_get_int (vd , VDEV_PROP_CHECKSUM_N ,
3642+ & vd -> vdev_checksum_n );
3643+ if (error && error != ENOENT )
3644+ vdev_dbgmsg (vd , "vdev_load: zap_lookup(zap=%llu) "
3645+ "failed [error=%d]" , (u_longlong_t )zapobj , error );
3646+
3647+ error = vdev_prop_get_int (vd , VDEV_PROP_CHECKSUM_T ,
3648+ & vd -> vdev_checksum_t );
3649+ if (error && error != ENOENT )
3650+ vdev_dbgmsg (vd , "vdev_load: zap_lookup(zap=%llu) "
3651+ "failed [error=%d]" , (u_longlong_t )zapobj , error );
3652+
3653+ error = vdev_prop_get_int (vd , VDEV_PROP_IO_N ,
3654+ & vd -> vdev_io_n );
3655+ if (error && error != ENOENT )
3656+ vdev_dbgmsg (vd , "vdev_load: zap_lookup(zap=%llu) "
3657+ "failed [error=%d]" , (u_longlong_t )zapobj , error );
3658+
3659+ error = vdev_prop_get_int (vd , VDEV_PROP_IO_T ,
3660+ & vd -> vdev_io_t );
3661+ if (error && error != ENOENT )
3662+ vdev_dbgmsg (vd , "vdev_load: zap_lookup(zap=%llu) "
3663+ "failed [error=%d]" , (u_longlong_t )zapobj , error );
3664+ }
3665+
36253666 /*
36263667 * If this is a top-level vdev, initialize its metaslabs.
36273668 */
@@ -5761,6 +5802,34 @@ vdev_prop_set(vdev_t *vd, nvlist_t *innvl, nvlist_t *outnvl)
57615802 }
57625803 vd -> vdev_failfast = intval & 1 ;
57635804 break ;
5805+ case VDEV_PROP_CHECKSUM_N :
5806+ if (nvpair_value_uint64 (elem , & intval ) != 0 ) {
5807+ error = EINVAL ;
5808+ break ;
5809+ }
5810+ vd -> vdev_checksum_n = intval ;
5811+ break ;
5812+ case VDEV_PROP_CHECKSUM_T :
5813+ if (nvpair_value_uint64 (elem , & intval ) != 0 ) {
5814+ error = EINVAL ;
5815+ break ;
5816+ }
5817+ vd -> vdev_checksum_t = intval ;
5818+ break ;
5819+ case VDEV_PROP_IO_N :
5820+ if (nvpair_value_uint64 (elem , & intval ) != 0 ) {
5821+ error = EINVAL ;
5822+ break ;
5823+ }
5824+ vd -> vdev_io_n = intval ;
5825+ break ;
5826+ case VDEV_PROP_IO_T :
5827+ if (nvpair_value_uint64 (elem , & intval ) != 0 ) {
5828+ error = EINVAL ;
5829+ break ;
5830+ }
5831+ vd -> vdev_io_t = intval ;
5832+ break ;
57645833 default :
57655834 /* Most processing is done in vdev_props_set_sync */
57665835 break ;
@@ -6090,6 +6159,22 @@ vdev_prop_get(vdev_t *vd, nvlist_t *innvl, nvlist_t *outnvl)
60906159 vdev_prop_add_list (outnvl , propname , strval ,
60916160 intval , src );
60926161 break ;
6162+ case VDEV_PROP_CHECKSUM_N :
6163+ case VDEV_PROP_CHECKSUM_T :
6164+ case VDEV_PROP_IO_N :
6165+ case VDEV_PROP_IO_T :
6166+ err = vdev_prop_get_int (vd , prop , & intval );
6167+ if (err && err != ENOENT )
6168+ break ;
6169+
6170+ if (intval == vdev_prop_default_numeric (prop ))
6171+ src = ZPROP_SRC_DEFAULT ;
6172+ else
6173+ src = ZPROP_SRC_LOCAL ;
6174+
6175+ vdev_prop_add_list (outnvl , propname , NULL ,
6176+ intval , src );
6177+ break ;
60936178 /* Text Properties */
60946179 case VDEV_PROP_COMMENT :
60956180 /* Exists in the ZAP below */
0 commit comments