Whamcloud - gitweb
LU-5519 lfsck: LFSCK code framework adjustment (2)
[fs/lustre-release.git] / lustre / include / lustre_lmv.h
index acd4e4e..bb05b34 100644 (file)
@@ -117,4 +117,70 @@ static inline void lmv_le_to_cpu(union lmv_mds_md *lmv_dst,
        }
 }
 
+/* This hash is only for testing purpose */
+static inline unsigned int
+lmv_hash_all_chars(unsigned int count, const char *name, int namelen)
+{
+       unsigned int c = 0;
+       const unsigned char *p = (const unsigned char *)name;
+
+       while (--namelen >= 0)
+               c += p[namelen];
+
+       c = c % count;
+
+       return c;
+}
+
+static inline unsigned int
+lmv_hash_fnv1a(unsigned int count, const char *name, int namelen)
+{
+       __u64   hash;
+
+       hash = lustre_hash_fnv_1a_64(name, namelen);
+
+       hash = hash % count;
+
+       return hash;
+}
+
+static inline int lmv_name_to_stripe_index(__u32 lmv_hash_type,
+                                          unsigned int stripe_count,
+                                          const char *name, int namelen)
+{
+       int     idx;
+       __u32   hash_type = lmv_hash_type & LMV_HASH_TYPE_MASK;
+
+       LASSERT(namelen > 0);
+       if (stripe_count <= 1)
+               return 0;
+
+       /* for migrating object, always start from 0 stripe */
+       if (lmv_hash_type & LMV_HASH_FLAG_MIGRATION)
+               return 0;
+
+       switch (hash_type) {
+       case LMV_HASH_TYPE_ALL_CHARS:
+               idx = lmv_hash_all_chars(stripe_count, name, namelen);
+               break;
+       case LMV_HASH_TYPE_FNV_1A_64:
+               idx = lmv_hash_fnv1a(stripe_count, name, namelen);
+               break;
+       default:
+               idx = -EBADFD;
+               break;
+       }
+
+       CDEBUG(D_INFO, "name %.*s hash_type %d idx %d\n", namelen, name,
+              hash_type, idx);
+
+       return idx;
+}
+
+static inline bool lmv_is_known_hash_type(__u32 type)
+{
+       return (type & LMV_HASH_TYPE_MASK) == LMV_HASH_TYPE_FNV_1A_64 ||
+              (type & LMV_HASH_TYPE_MASK) == LMV_HASH_TYPE_ALL_CHARS;
+}
+
 #endif