From b0236f7b024b5f76d8915334480dd6387f71451f Mon Sep 17 00:00:00 2001 From: Alexey Lyashkov Date: Sat, 29 Nov 2014 11:55:22 +0300 Subject: [PATCH] LU-5963 nodemap: use proper hashing don't hash a export pointer as string. check a situation when we don't delete a export from nodemap hash. Signed-off-by: Alexey Lyashkov Change-Id: Id53281078f165ce984abebc74992bde30fcc9f31 Reviewed-on: http://review.whamcloud.com/12881 Tested-by: Jenkins Reviewed-by: Andrew Perepechko Tested-by: Maloo Reviewed-by: Kit Westneat Reviewed-by: Nathaniel Clark Reviewed-by: Oleg Drokin --- lustre/ptlrpc/nodemap_member.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lustre/ptlrpc/nodemap_member.c b/lustre/ptlrpc/nodemap_member.c index 08b269b..00459f1 100644 --- a/lustre/ptlrpc/nodemap_member.c +++ b/lustre/ptlrpc/nodemap_member.c @@ -50,7 +50,7 @@ void nm_member_putref(struct obd_export *exp) static __u32 nm_member_hashfn(cfs_hash_t *hash_body, const void *key, unsigned mask) { - return cfs_hash_djb2_hash(key, strlen(key), mask); + return hash_long((unsigned long)key, hash_body->hs_bkt_bits) & mask; } static void *nm_member_hs_key(struct hlist_node *hnode) @@ -106,13 +106,14 @@ static void nm_member_hs_put_locked(cfs_hash_t *hs, */ void nm_member_del(struct lu_nodemap *nodemap, struct obd_export *exp) { + struct obd_export *exp1; - exp->exp_target_data.ted_nodemap = NULL; - exp = cfs_hash_del_key(nodemap->nm_member_hash, exp); - if (exp == NULL) - return; + exp1 = cfs_hash_del_key(nodemap->nm_member_hash, exp); + if (exp1 != NULL) + class_export_put(exp1); - class_export_put(exp); + LASSERT(hlist_unhashed(&exp->exp_target_data.ted_nodemap_member)); + exp->exp_target_data.ted_nodemap = NULL; } static cfs_hash_ops_t nm_member_hash_operations = { -- 1.8.3.1