diff options
Diffstat (limited to 'libbcache/dirent.c')
-rw-r--r-- | libbcache/dirent.c | 31 |
1 files changed, 5 insertions, 26 deletions
diff --git a/libbcache/dirent.c b/libbcache/dirent.c index d97c3b22..ebf0f101 100644 --- a/libbcache/dirent.c +++ b/libbcache/dirent.c @@ -23,34 +23,13 @@ unsigned bch_dirent_name_bytes(struct bkey_s_c_dirent d) static u64 bch_dirent_hash(const struct bch_hash_info *info, const struct qstr *name) { - switch (info->type) { - case BCH_STR_HASH_SHA1: { - SHASH_DESC_ON_STACK(desc, bch_sha1); - u8 digest[SHA1_DIGEST_SIZE]; - u64 ret; - desc->tfm = bch_sha1; - desc->flags = 0; - crypto_shash_init(desc); - - crypto_shash_update(desc, (void *) &info->seed, sizeof(info->seed)); - - crypto_shash_update(desc, (void *) name->name, name->len); - crypto_shash_final(desc, digest); - memcpy(&ret, &digest, sizeof(ret)); - return max_t(u64, ret >> 1, 2); - } - default: { - struct bch_str_hash_ctx ctx; - - bch_str_hash_init(&ctx, info->type); - bch_str_hash_update(&ctx, info->type, &info->seed, sizeof(info->seed)); + struct bch_str_hash_ctx ctx; - bch_str_hash_update(&ctx, info->type, name->name, name->len); + bch_str_hash_init(&ctx, info); + bch_str_hash_update(&ctx, info, name->name, name->len); - /* [0,2) reserved for dots */ - return max_t(u64, bch_str_hash_end(&ctx, info->type), 2); - } - } + /* [0,2) reserved for dots */ + return max_t(u64, bch_str_hash_end(&ctx, info), 2); } static u64 dirent_hash_key(const struct bch_hash_info *info, const void *key) |