aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs/mmp.c
diff options
context:
space:
mode:
authorAlexander Motin <[email protected]>2021-06-22 19:35:23 -0400
committerTony Hutter <[email protected]>2021-09-14 12:10:17 -0700
commitf3969ea78b5f54935474d49455cf9c4d6a1e107a (patch)
tree38dbfbee2cd0bbd24bbc642e2023d3f20bd82b6f /module/zfs/mmp.c
parent6fe6192796f6835163523db94130fb842022f6cf (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.c4
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);