Skip to content

Commit

Permalink
ceph: Use pseudo-random numbers to choose mds
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Sam Lang authored and Sage Weil committed May 2, 2013
1 parent 8b3e1a5 commit a84cd29
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions fs/ceph/mdsmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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++)
Expand All @@ -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)
Expand Down

0 comments on commit a84cd29

Please sign in to comment.