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: Sam Lang <sam.lang@inktank.com> Reviewed-by: Greg Farnum <greg@inktank.com> Reviewed-by: Alex Elder <elder@inktank.com>
This commit is contained in:
parent
8b3e1a5698
commit
a84cd29335
1 changed files with 5 additions and 3 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue