From 69d748be13bda3e160c8f3328659ee7e7b2e8ac8 Mon Sep 17 00:00:00 2001 From: Niu Yawei Date: Thu, 28 Jul 2011 21:19:41 -0700 Subject: [PATCH] LU-550 incorrect quota hash function Quota code uses 'uid' or '(1 << 32) + gid' as the hash key, however, the quota hash function lqs_hash() always try to interpret such a unsigned long long key as a 'quota_adjust_qunit' struct, then calculate the hash value by quota_adjust_qunit->qaq_id. Signed-off-by: Niu Yawei Change-Id: I128f2835ff590d712b0a1641af7361146e8e3e81 Reviewed-on: http://review.whamcloud.com/1163 Tested-by: Hudson Reviewed-by: Fan Yong Reviewed-by: Johann Lombardi --- lustre/quota/quota_context.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lustre/quota/quota_context.c b/lustre/quota/quota_context.c index 1b1b982..beee1c1 100644 --- a/lustre/quota/quota_context.c +++ b/lustre/quota/quota_context.c @@ -1465,13 +1465,13 @@ exit: static unsigned lqs_hash(lustre_hash_t *lh, void *key, unsigned mask) { - struct quota_adjust_qunit *lqs_key; + unsigned long long id; unsigned hash; ENTRY; LASSERT(key); - lqs_key = (struct quota_adjust_qunit *)key; - hash = (QAQ_IS_GRP(lqs_key) ? 5381 : 5387) * lqs_key->qaq_id; + id = *((unsigned long long *)key); + hash = (LQS_KEY_GRP(id) ? 5381 : 5387) * (unsigned)LQS_KEY_ID(id); RETURN(hash & mask); } -- 1.8.3.1