Commit a84cd293 authored by Sam Lang's avatar Sam Lang Committed by Sage Weil
Browse files

ceph: Use pseudo-random numbers to choose mds

We don't need to use up entropy to choose an mds,
so use prandom_u32() to get a pseudo-random number.

Also, we don't need to choose a random mds if only
one mds is available, so add special casing for the
common case.

Fixes http://tracker.ceph.com/issues/3579



Signed-off-by: default avatarSam Lang <sam.lang@inktank.com>
Reviewed-by: default avatarGreg Farnum <greg@inktank.com>
Reviewed-by: default avatarAlex Elder <elder@inktank.com>
parent 8b3e1a56
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -20,7 +20,10 @@ int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m)
{
	int n = 0;
	int i;
	char r;

	/* special case for one mds */
	if (1 == m->m_max_mds && m->m_info[0].state > 0)
		return 0;

	/* count */
	for (i = 0; i < m->m_max_mds; i++)
@@ -30,8 +33,7 @@ int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m)
		return -1;

	/* pick */
	get_random_bytes(&r, 1);
	n = r % n;
	n = prandom_u32() % n;
	i = 0;
	for (i = 0; n > 0; i++, n--)
		while (m->m_info[i].state <= 0)