X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdd%2Fmdd_lock.c;h=193de6e1efdad140d6fea44d0dc459483b556cdc;hb=59cb4a5c39e2c85a89be2863a73899c02c9a89c3;hp=2bbbbdad2fd17c3b7c8d9d8cf58363e677c0898b;hpb=d2d56f38da01001c92a09afc6b52b5acbd9bc13c;p=fs%2Flustre-release.git diff --git a/lustre/mdd/mdd_lock.c b/lustre/mdd/mdd_lock.c index 2bbbbda..193de6e 100644 --- a/lustre/mdd/mdd_lock.c +++ b/lustre/mdd/mdd_lock.c @@ -1,105 +1,79 @@ -/* -*- MODE: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: +/* + * GPL HEADER START * - * mdd/mdd_handler.c - * Lustre Metadata Server (mdd) routines + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2006 Cluster File Systems, Inc. - * Author: Mike Pershin + * 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. * - * 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 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). * - * 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. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html * - * 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. + * GPL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. * - * 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. + * Copyright (c) 2012, 2014, Intel Corporation. */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + * + * lustre/mdd/mdd_lock.c + * + * Lustre Metadata Server (mdd) routines + * + * Author: Mike Pershin + */ + #define DEBUG_SUBSYSTEM S_MDS #include -#include #include "mdd_internal.h" -void mdd_write_lock(const struct lu_env *env, struct mdd_object *obj) +void mdd_write_lock(const struct lu_env *env, struct mdd_object *obj, + enum mdd_object_role role) { - struct dt_object *next = mdd_object_child(obj); + struct dt_object *next = mdd_object_child(obj); - next->do_ops->do_write_lock(env, next); + dt_write_lock(env, next, role); } -void mdd_read_lock(const struct lu_env *env, struct mdd_object *obj) +void mdd_read_lock(const struct lu_env *env, struct mdd_object *obj, + enum mdd_object_role role) { - struct dt_object *next = mdd_object_child(obj); - next->do_ops->do_read_lock(env, next); + struct dt_object *next = mdd_object_child(obj); + + dt_read_lock(env, next, role); } void mdd_write_unlock(const struct lu_env *env, struct mdd_object *obj) { - struct dt_object *next = mdd_object_child(obj); + struct dt_object *next = mdd_object_child(obj); - next->do_ops->do_write_unlock(env, next); + dt_write_unlock(env, next); } void mdd_read_unlock(const struct lu_env *env, struct mdd_object *obj) { - struct dt_object *next = mdd_object_child(obj); + struct dt_object *next = mdd_object_child(obj); - next->do_ops->do_read_unlock(env, next); + dt_read_unlock(env, next); } - -/* Methods for parallel directory locking */ - -void mdd_pdlock_init(struct mdd_object *obj) +int mdd_write_locked(const struct lu_env *env, struct mdd_object *obj) { - dynlock_init(&obj->mod_pdlock); - -} + struct dt_object *next = mdd_object_child(obj); -unsigned long mdd_name2hash(const char *name) -{ - return full_name_hash((unsigned char*)name, strlen(name)); + return dt_write_locked(env, next); } - -struct dynlock_handle *mdd_pdo_write_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name) -{ - unsigned long value = mdd_name2hash(name); - return dynlock_lock(&obj->mod_pdlock, value, DLT_WRITE, GFP_NOFS); -} - -struct dynlock_handle *mdd_pdo_read_lock(const struct lu_env *env, - struct mdd_object *obj, - const char *name) -{ - unsigned long value = mdd_name2hash(name); - return dynlock_lock(&obj->mod_pdlock, value, DLT_READ, GFP_NOFS); -} - -void mdd_pdo_write_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh) -{ - return dynlock_unlock(&obj->mod_pdlock, dlh); -} - -void mdd_pdo_read_unlock(const struct lu_env *env, struct mdd_object *obj, - struct dynlock_handle *dlh) -{ - return dynlock_unlock(&obj->mod_pdlock, dlh); -} -