Whamcloud - gitweb
LU-5963 nodemap: use proper hashing 81/12881/2
authorAlexey Lyashkov <alexey_lyashkov@xyratex.com>
Sat, 29 Nov 2014 08:55:22 +0000 (11:55 +0300)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 3 Dec 2014 02:27:20 +0000 (02:27 +0000)
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 <alexey_lyashkov@xyratex.com>
Change-Id: Id53281078f165ce984abebc74992bde30fcc9f31
Reviewed-on: http://review.whamcloud.com/12881
Tested-by: Jenkins
Reviewed-by: Andrew Perepechko <andrew_perepechko@xyratex.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Kit Westneat <kit.westneat@gmail.com>
Reviewed-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/ptlrpc/nodemap_member.c

index 08b269b..00459f1 100644 (file)
@@ -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 = {