Whamcloud - gitweb
b=21846 add a hs_key entry in lqs hash operations
authorLanden <tianzy@sun.com>
Fri, 29 Jan 2010 07:04:53 +0000 (15:04 +0800)
committerRobert Read <rread@sun.com>
Sat, 30 Jan 2010 01:32:17 +0000 (17:32 -0800)
When lqs rehashes, it will call its hs_key method. If it isn't
defined, an assert will be triggered. The patch just add it
for lqs hash.

a=johann
i=landen
i=adilger

libcfs/include/libcfs/libcfs_hash.h
lustre/quota/quota_context.c

index e195c24..73cfe01 100644 (file)
@@ -175,11 +175,9 @@ cfs_hash_key(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
         LASSERT(hs);
         LASSERT(hnode);
         LASSERT(CFS_HO(hs));
         LASSERT(hs);
         LASSERT(hnode);
         LASSERT(CFS_HO(hs));
+        LASSERT(CFS_HOP(hs, key));
 
 
-        if (CFS_HOP(hs, key))
-                return CFS_HOP(hs, key)(hnode);
-
-        return NULL;
+        return CFS_HOP(hs, key)(hnode);
 }
 
 /* Returns 1 on a match,
 }
 
 /* Returns 1 on a match,
index 57ac31d..859deee 100644 (file)
@@ -1587,6 +1587,16 @@ lqs_hash(cfs_hash_t *hs, void *key, unsigned mask)
         RETURN(hash & mask);
 }
 
         RETURN(hash & mask);
 }
 
+static void *
+lqs_key(cfs_hlist_node_t *hnode)
+{
+        struct lustre_qunit_size *lqs;
+        ENTRY;
+
+        lqs = cfs_hlist_entry(hnode, struct lustre_qunit_size, lqs_hash);
+        RETURN(&lqs->lqs_key);
+}
+
 static int
 lqs_compare(void *key, cfs_hlist_node_t *hnode)
 {
 static int
 lqs_compare(void *key, cfs_hlist_node_t *hnode)
 {
@@ -1649,6 +1659,7 @@ lqs_exit(cfs_hlist_node_t *hnode)
 
 static cfs_hash_ops_t lqs_hash_ops = {
         .hs_hash    = lqs_hash,
 
 static cfs_hash_ops_t lqs_hash_ops = {
         .hs_hash    = lqs_hash,
+        .hs_key     = lqs_key,
         .hs_compare = lqs_compare,
         .hs_get     = lqs_get,
         .hs_put     = lqs_put,
         .hs_compare = lqs_compare,
         .hs_get     = lqs_get,
         .hs_put     = lqs_put,