X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fcmm%2Fcmm_split.c;h=d77e77aad07f6b7374a358691e409dd0276cd813;hb=3d5b2a8fe8c6e5b510bd5cc96fee0e9479bd9e83;hp=193a8b0bcf6d36c8198e23f31f7381cd2fceafba;hpb=d2d56f38da01001c92a09afc6b52b5acbd9bc13c;p=fs%2Flustre-release.git diff --git a/lustre/cmm/cmm_split.c b/lustre/cmm/cmm_split.c index 193a8b0..d77e77a 100644 --- a/lustre/cmm/cmm_split.c +++ b/lustre/cmm/cmm_split.c @@ -1,31 +1,45 @@ /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * - * lustre/cmm/cmm_split.c - * Lustre splitting dir + * GPL HEADER START * - * Copyright (c) 2006 Cluster File Systems, Inc. - * Author: Alex Thomas - * Wang Di - * Yury Umanets + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * This file is part of the Lustre file system, http://www.lustre.org - * Lustre is a trademark of Cluster File Systems, Inc. + * 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. * - * You may have signed or agreed to another license before downloading - * this software. If so, you are bound by the terms and conditions - * of that agreement, and the following does not apply to you. See the - * LICENSE file included with this distribution for more information. + * 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). * - * If you did not agree to a different license, then this copy of Lustre - * is open source 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. + * 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 * - * In either case, 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 - * license text for more details. + * 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 2008 Sun Microsystems, Inc. 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. + * + * lustre/cmm/cmm_split.c + * + * Lustre splitting dir + * + * Author: Alex Thomas + * Author: Wang Di + * Author: Yury Umanets */ #ifndef EXPORT_SYMTAB @@ -456,8 +470,8 @@ static int cmm_split_remove_entry(const struct lu_env *env, * use highest bit of hash). */ if (is_dir) { - ent->lde_hash = le32_to_cpu(ent->lde_hash); - ent->lde_hash = cpu_to_le32(ent->lde_hash | MAX_HASH_HIGHEST_BIT); + ent->lde_hash = le64_to_cpu(ent->lde_hash); + ent->lde_hash = cpu_to_le64(ent->lde_hash | MAX_HASH_HIGHEST_BIT); } EXIT; cleanup: @@ -472,7 +486,7 @@ cleanup: static int cmm_split_remove_page(const struct lu_env *env, struct md_object *mo, struct lu_rdpg *rdpg, - __u32 hash_end, __u32 *len) + __u64 hash_end, __u32 *len) { struct lu_dirpage *dp; struct lu_dirent *ent; @@ -480,10 +494,10 @@ static int cmm_split_remove_page(const struct lu_env *env, ENTRY; *len = 0; - kmap(rdpg->rp_pages[0]); + cfs_kmap(rdpg->rp_pages[0]); dp = page_address(rdpg->rp_pages[0]); for (ent = lu_dirent_start(dp); - ent != NULL && le32_to_cpu(ent->lde_hash) < hash_end; + ent != NULL && le64_to_cpu(ent->lde_hash) < hash_end; ent = lu_dirent_next(ent)) { rc = cmm_split_remove_entry(env, mo, ent); if (rc) { @@ -505,7 +519,7 @@ static int cmm_split_remove_page(const struct lu_env *env, *len += sizeof(struct lu_dirpage); EXIT; unmap: - kunmap(rdpg->rp_pages[0]); + cfs_kunmap(rdpg->rp_pages[0]); return rc; } @@ -551,7 +565,7 @@ static int cmm_split_process_stripe(const struct lu_env *env, struct md_object *mo, struct lu_rdpg *rdpg, struct lu_fid *lf, - __u32 end) + __u64 end) { int rc, done = 0; ENTRY; @@ -584,13 +598,13 @@ static int cmm_split_process_stripe(const struct lu_env *env, } } - kmap(rdpg->rp_pages[0]); + cfs_kmap(rdpg->rp_pages[0]); ldp = page_address(rdpg->rp_pages[0]); - if (le32_to_cpu(ldp->ldp_hash_end) >= end) + if (le64_to_cpu(ldp->ldp_hash_end) >= end) done = 1; - rdpg->rp_hash = le32_to_cpu(ldp->ldp_hash_end); - kunmap(rdpg->rp_pages[0]); + rdpg->rp_hash = le64_to_cpu(ldp->ldp_hash_end); + cfs_kunmap(rdpg->rp_pages[0]); } while (!done); RETURN(rc); @@ -602,7 +616,7 @@ static int cmm_split_process_dir(const struct lu_env *env, { struct cmm_device *cmm = cmm_obj2dev(md2cmm_obj(mo)); struct lu_rdpg *rdpg = &cmm_env_info(env)->cmi_rdpg; - __u32 hash_segement; + __u64 hash_segement; int rc = 0, i; ENTRY; @@ -612,7 +626,7 @@ static int cmm_split_process_dir(const struct lu_env *env, rdpg->rp_pages = cmm_env_info(env)->cmi_pages; for (i = 0; i < rdpg->rp_npages; i++) { - rdpg->rp_pages[i] = alloc_pages(GFP_KERNEL, 0); + rdpg->rp_pages[i] = cfs_alloc_page(CFS_ALLOC_STD); if (rdpg->rp_pages[i] == NULL) GOTO(cleanup, rc = -ENOMEM); } @@ -621,7 +635,7 @@ static int cmm_split_process_dir(const struct lu_env *env, hash_segement = MAX_HASH_SIZE / (cmm->cmm_tgt_count + 1); for (i = 1; i < cmm->cmm_tgt_count + 1; i++) { struct lu_fid *lf; - __u32 hash_end; + __u64 hash_end; lf = &ma->ma_lmv->mea_ids[i]; @@ -642,7 +656,7 @@ static int cmm_split_process_dir(const struct lu_env *env, cleanup: for (i = 0; i < rdpg->rp_npages; i++) if (rdpg->rp_pages[i] != NULL) - __free_pages(rdpg->rp_pages[i], 0); + __cfs_free_page(rdpg->rp_pages[i]); return rc; }