X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Fmea.c;h=1082cbcb64035569c5fba0170733fc0bc500106c;hb=44cc42f556c668de09479f706beea4b6e600eb4b;hp=56fc149ee55a49a49c93864b8c150606a00aa987;hpb=e2d42b61949a4ffc08a3a8245f0572543350bd2c;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/mea.c b/lustre/obdclass/mea.c index 56fc149..1082cbc 100644 --- a/lustre/obdclass/mea.c +++ b/lustre/obdclass/mea.c @@ -1,72 +1,108 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: +/* + * GPL HEADER START * - * Copyright (C) 2002, 2003 Cluster File Systems, Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * This file is part of Lustre, http://www.lustre.org. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + * GPL HEADER END + */ +/* + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. */ #define DEBUG_SUBSYSTEM S_CLASS +#include #ifdef __KERNEL__ #include /* for request_module() */ #include -#include -#include #include #include -#else +#else #include -#include -#include +#include #endif -#include +#include +#include - -int mea_name2idx(struct mea *mea, char *name, int namelen) +static int mea_last_char_hash(int count, char *name, int namelen) { unsigned int c; - /* just to simplify caller code */ - if (mea == NULL) - return 0; + c = name[namelen - 1]; + if (c == 0) + CWARN("looks like wrong len is passed\n"); + c = c % count; + return c; +} - if (mea->mea_count == 0) - return 0; +static int mea_all_chars_hash(int count, char *name, int namelen) +{ + unsigned int c = 0; - /* FIXME: real hash calculation here */ - c = name[namelen - 1]; - c = c % mea->mea_count; - - LASSERT(c < mea->mea_count); + while (--namelen >= 0) + c += name[namelen]; + c = c % count; return c; } -int raw_name2idx(int count, const char *name, int namelen) +int raw_name2idx(int hashtype, int count, const char *name, int namelen) { - unsigned int c; + unsigned int c = 0; LASSERT(namelen > 0); if (count <= 1) return 0; + switch (hashtype) { + case MEA_MAGIC_LAST_CHAR: + c = mea_last_char_hash(count, (char *)name, namelen); + break; + case MEA_MAGIC_ALL_CHARS: + c = mea_all_chars_hash(count, (char *)name, namelen); + break; + case MEA_MAGIC_HASH_SEGMENT: + CERROR("Unsupported hash type MEA_MAGIC_HASH_SEGMENT\n"); + break; + default: + CERROR("Unknown hash type 0x%x\n", hashtype); + } - /* FIXME: real hash calculation here */ - c = name[namelen - 1]; - c = c % count; - + LASSERT(c < count); return c; } +EXPORT_SYMBOL(raw_name2idx); +int mea_name2idx(struct lmv_stripe_md *mea, const char *name, int namelen) +{ + unsigned int c; + + LASSERT(mea && mea->mea_count); + + c = raw_name2idx(mea->mea_magic, mea->mea_count, name, namelen); + + LASSERT(c < mea->mea_count); + return c; +} +EXPORT_SYMBOL(mea_name2idx);