X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fobdclass%2Fmea.c;h=1082cbcb64035569c5fba0170733fc0bc500106c;hb=3ac7c325efaf3a2537fafc79168d87de67982acd;hp=eaa3533d1f637c42ded4d0dd542cc084a11c4482;hpb=6869932b552ac705f411de3362f01bd50c1f6f7d;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/mea.c b/lustre/obdclass/mea.c index eaa3533..1082cbc 100644 --- a/lustre/obdclass/mea.c +++ b/lustre/obdclass/mea.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -26,7 +24,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -39,7 +37,6 @@ #ifdef __KERNEL__ #include /* for request_module() */ #include -#include #include #include #else @@ -49,13 +46,6 @@ #include #include -#ifdef __KERNEL__ -#include -#ifdef HAVE_SERVER_SUPPORT -/* LDISKFS_SB() */ -#include -#endif -#endif static int mea_last_char_hash(int count, char *name, int namelen) { unsigned int c; @@ -77,84 +67,6 @@ static int mea_all_chars_hash(int count, char *name, int namelen) return c; } -#ifdef __KERNEL__ -/* This hash calculate method must be same as the lvar hash method */ - -#define LVAR_HASH_SANDWICH (0) -#define LVAR_HASH_TEA (1) -#define LVAR_HASH_R5 (0) -#define LVAR_HASH_PREFIX (0) - -static __u32 hash_build0(const char *name, int namelen) -{ - __u32 result; - - if (namelen == 0) - return 0; - if (strncmp(name, ".", 1) == 0 && namelen == 1) - return 1; - if (strncmp(name, "..", 2) == 0 && namelen == 2) - return 2; - - if (LVAR_HASH_PREFIX) { - result = 0; - strncpy((void *)&result, - name, min(namelen, (int)sizeof result)); - } else { - struct ldiskfs_dx_hash_info hinfo; - - if (LVAR_HASH_TEA) - hinfo.hash_version = LDISKFS_DX_HASH_TEA; - else - hinfo.hash_version = LDISKFS_DX_HASH_R5; - hinfo.seed = 0; - ldiskfsfs_dirhash(name, namelen, &hinfo); - result = hinfo.hash; - if (LVAR_HASH_SANDWICH) { - __u32 result2; - - hinfo.hash_version = LDISKFS_DX_HASH_TEA; - hinfo.seed = 0; - ldiskfsfs_dirhash(name, namelen, &hinfo); - result2 = hinfo.hash; - result = (0xfc000000 & result2) | (0x03ffffff & result); - } - } - - return result; -} - -enum { - HASH_GRAY_AREA = 1024 -}; - -static __u32 hash_build(const char *name, int namelen) -{ - __u32 hash; - - hash = (hash_build0(name, namelen) << 1) & MAX_HASH_SIZE_32; - if (hash > MAX_HASH_SIZE_32 - HASH_GRAY_AREA) - hash &= HASH_GRAY_AREA - 1; - return hash; -} - -static int mea_hash_segment(int count, const char *name, int namelen) -{ - __u32 hash; - - LASSERT(IS_PO2(MAX_HASH_SIZE_32 + 1)); - - hash = hash_build(name, namelen) / (MAX_HASH_SIZE_32 / count); - LASSERTF(hash < count, "hash %x count %d \n", hash, count); - - return hash; -} -#else -static int mea_hash_segment(int count, char *name, int namelen) -{ - return 0; -} -#endif int raw_name2idx(int hashtype, int count, const char *name, int namelen) { unsigned int c = 0; @@ -171,15 +83,16 @@ int raw_name2idx(int hashtype, int count, const char *name, int namelen) c = mea_all_chars_hash(count, (char *)name, namelen); break; case MEA_MAGIC_HASH_SEGMENT: - c = mea_hash_segment(count, (char *)name, namelen); + CERROR("Unsupported hash type MEA_MAGIC_HASH_SEGMENT\n"); break; default: CERROR("Unknown hash type 0x%x\n", hashtype); } - + LASSERT(c < count); return c; } +EXPORT_SYMBOL(raw_name2idx); int mea_name2idx(struct lmv_stripe_md *mea, const char *name, int namelen) { @@ -192,3 +105,4 @@ int mea_name2idx(struct lmv_stripe_md *mea, const char *name, int namelen) LASSERT(c < mea->mea_count); return c; } +EXPORT_SYMBOL(mea_name2idx);