-/* -*- MODE: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
+/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
* vim:expandtab:shiftwidth=8:tabstop=8:
*
- * mdd/mdd_handler.c
- * Lustre Metadata Server (mdd) routines
+ * GPL HEADER START
*
- * Copyright (C) 2006 Cluster File Systems, Inc.
- * Author: Wang Di <wangdi@clusterfs.com>
+ * 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/mdd/mdd_device.c
+ *
+ * Lustre Metadata Server (mdd) routines
+ *
+ * Author: Wang Di <wangdi@clusterfs.com>
*/
+
#ifndef EXPORT_SYMTAB
# define EXPORT_SYMTAB
#endif
#include <linux/ldiskfs_fs.h>
#include <lustre_mds.h>
#include <lustre/lustre_idl.h>
+#include <lustre_param.h>
#include "mdd_internal.h"
mdd->mdd_txn_cb.dtc_txn_stop = mdd_txn_stop_cb;
mdd->mdd_txn_cb.dtc_txn_commit = mdd_txn_commit_cb;
mdd->mdd_txn_cb.dtc_cookie = mdd;
- INIT_LIST_HEAD(&mdd->mdd_txn_cb.dtc_linkage);
+ CFS_INIT_LIST_HEAD(&mdd->mdd_txn_cb.dtc_linkage);
+ mdd->mdd_atime_diff = MAX_ATIME_DIFF;
+
rc = mdd_procfs_init(mdd, name);
RETURN(rc);
}
ENTRY;
switch (cfg->lcfg_command) {
+ case LCFG_PARAM: {
+ struct lprocfs_static_vars lvars;
+
+ lprocfs_mdd_init_vars(&lvars);
+ rc = class_process_proc_param(PARAM_MDD, lvars.obd_vars, cfg,m);
+ if (rc == -ENOSYS)
+ /* we don't understand; pass it on */
+ rc = next->ld_ops->ldo_process_config(env, next, cfg);
+ break;
+ }
case LCFG_SETUP:
rc = next->ld_ops->ldo_process_config(env, next, cfg);
if (rc)
int rc;
ENTRY;
- rc = obd_set_info_async(lov_exp, strlen(KEY_CAPA_KEY), KEY_CAPA_KEY,
+ rc = obd_set_info_async(lov_exp, sizeof(KEY_CAPA_KEY), KEY_CAPA_KEY,
sizeof(*key), key, NULL);
RETURN(rc);
}
return l;
}
-static void mdd_device_free(const struct lu_env *env,
- struct lu_device *lu)
+static struct lu_device *mdd_device_free(const struct lu_env *env,
+ struct lu_device *lu)
{
struct mdd_device *m = lu2mdd_dev(lu);
+ struct lu_device *next = &m->mdd_child->dd_lu_dev;
+ ENTRY;
LASSERT(atomic_read(&lu->ld_ref) == 0);
md_device_fini(&m->mdd_md_dev);
OBD_FREE_PTR(m);
+ RETURN(next);
}
static struct obd_ops mdd_obd_device_ops = {
.o_owner = THIS_MODULE
};
+/* context key constructor/destructor: mdd_ucred_key_init, mdd_ucred_key_fini */
LU_KEY_INIT_FINI(mdd_ucred, struct md_ucred);
static struct lu_context_key mdd_ucred_key = {
}
EXPORT_SYMBOL(md_ucred);
+/*
+ * context key constructor/destructor:
+ * mdd_capainfo_key_init, mdd_capainfo_key_fini
+ */
LU_KEY_INIT_FINI(mdd_capainfo, struct md_capainfo);
struct lu_context_key mdd_capainfo_key = {
}
EXPORT_SYMBOL(md_capainfo);
-static int mdd_type_init(struct lu_device_type *t)
-{
- int result;
-
- LU_CONTEXT_KEY_INIT(&mdd_thread_key);
- result = lu_context_key_register(&mdd_thread_key);
- if (result == 0) {
- LU_CONTEXT_KEY_INIT(&mdd_ucred_key);
- result = lu_context_key_register(&mdd_ucred_key);
- }
- if (result == 0) {
- LU_CONTEXT_KEY_INIT(&mdd_capainfo_key);
- result = lu_context_key_register(&mdd_capainfo_key);
- }
- return result;
-}
-
-static void mdd_type_fini(struct lu_device_type *t)
-{
- lu_context_key_degister(&mdd_capainfo_key);
- lu_context_key_degister(&mdd_ucred_key);
- lu_context_key_degister(&mdd_thread_key);
-}
+/* type constructor/destructor: mdd_type_init, mdd_type_fini */
+LU_TYPE_INIT_FINI(mdd, &mdd_thread_key, &mdd_ucred_key, &mdd_capainfo_key);
struct md_device_operations mdd_ops = {
.mdo_statfs = mdd_statfs,
.ldt_ctx_tags = LCT_MD_THREAD
};
+/* context key constructor: mdd_key_init */
LU_KEY_INIT(mdd, struct mdd_thread_info);
static void mdd_key_fini(const struct lu_context *ctx,
OBD_FREE_PTR(info);
}
-struct lu_context_key mdd_thread_key = {
- .lct_tags = LCT_MD_THREAD,
- .lct_init = mdd_key_init,
- .lct_fini = mdd_key_fini
-};
-
-struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
- { 0 }
-};
-
-struct lprocfs_vars lprocfs_mdd_module_vars[] = {
- { 0 }
-};
-
-LPROCFS_INIT_VARS(mdd, lprocfs_mdd_module_vars, lprocfs_mdd_obd_vars);
+/* context key: mdd_thread_key */
+LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
static int __init mdd_mod_init(void)
{
struct lprocfs_static_vars lvars;
- lprocfs_init_vars(mdd, &lvars);
+ lprocfs_mdd_init_vars(&lvars);
return class_register_type(&mdd_obd_device_ops, NULL, lvars.module_vars,
LUSTRE_MDD_NAME, &mdd_device_type);
}
class_unregister_type(LUSTRE_MDD_NAME);
}
-MODULE_AUTHOR("Cluster File Systems, Inc. <info@clusterfs.com>");
+MODULE_AUTHOR("Sun Microsystems, Inc. <http://www.lustre.org/>");
MODULE_DESCRIPTION("Lustre Meta-data Device Prototype ("LUSTRE_MDD_NAME")");
MODULE_LICENSE("GPL");