diff options
author | Alexander Motin <[email protected]> | 2021-06-22 19:35:23 -0400 |
---|---|---|
committer | Tony Hutter <[email protected]> | 2021-09-14 12:10:17 -0700 |
commit | f3969ea78b5f54935474d49455cf9c4d6a1e107a (patch) | |
tree | 38dbfbee2cd0bbd24bbc642e2023d3f20bd82b6f /module/zfs/mmp.c | |
parent | 6fe6192796f6835163523db94130fb842022f6cf (diff) |
Optimize small random numbers generation
In all places except two spa_get_random() is used for small values,
and the consumers do not require well seeded high quality values.
Switch those two exceptions directly to random_get_pseudo_bytes()
and optimize spa_get_random(), renaming it to random_in_range(),
since it is not related to SPA or ZFS in general.
On FreeBSD directly map random_in_range() to new prng32_bounded() KPI
added in FreeBSD 13. On Linux and in user-space just reduce the type
used to uint32_t to avoid more expensive 64bit division.
Reviewed-by: Ryan Moeller <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Alexander Motin <[email protected]>
Sponsored-By: iXsystems, Inc.
Closes #12183
Diffstat (limited to 'module/zfs/mmp.c')
-rw-r--r-- | module/zfs/mmp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/module/zfs/mmp.c b/module/zfs/mmp.c index d9ed457a7..f67a4eb22 100644 --- a/module/zfs/mmp.c +++ b/module/zfs/mmp.c @@ -524,9 +524,9 @@ mmp_write_uberblock(spa_t *spa) mutex_exit(&mmp->mmp_io_lock); offset = VDEV_UBERBLOCK_OFFSET(vd, VDEV_UBERBLOCK_COUNT(vd) - - MMP_BLOCKS_PER_LABEL + spa_get_random(MMP_BLOCKS_PER_LABEL)); + MMP_BLOCKS_PER_LABEL + random_in_range(MMP_BLOCKS_PER_LABEL)); - label = spa_get_random(VDEV_LABELS); + label = random_in_range(VDEV_LABELS); vdev_label_write(zio, vd, label, ub_abd, offset, VDEV_UBERBLOCK_SIZE(vd), mmp_write_done, mmp, flags | ZIO_FLAG_DONT_PROPAGATE); |