From: Sam Lang Date: Tue, 9 Apr 2013 21:49:11 +0000 (-0500) Subject: ceph: Use pseudo-random numbers to choose mds X-Git-Tag: v3.10-rc1~81^2~96 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=a84cd29335f4ca38ca8405c1636ee3876bb292b5;p=~emulex%2Finfiniband.git 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 Reviewed-by: Greg Farnum Reviewed-by: Alex Elder --- diff --git a/fs/ceph/mdsmap.c b/fs/ceph/mdsmap.c index 0d3c9240c61..9278dec9e94 100644 --- a/fs/ceph/mdsmap.c +++ b/fs/ceph/mdsmap.c @@ -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)