X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmgc%2Fmgc_request.c;h=c99aab6eba1003441eae7ea818fd22b8effc8399;hb=2f5556627a19d5d9b62e7c223a134f1b8b9f2a74;hp=18ad5c374ba9955a72a3b1ab8314bfd5173a145b;hpb=3e3395aeab6b99720fd70f942def89eb94f1e26a;p=fs%2Flustre-release.git diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c index 18ad5c3..c99aab6 100644 --- a/lustre/mgc/mgc_request.c +++ b/lustre/mgc/mgc_request.c @@ -1,27 +1,41 @@ /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * - * lustre/mgc/mgc_request.c - * Lustre Management Client + * GPL HEADER START * - * Copyright (C) 2006 Cluster File Systems, Inc. - * Author: Nathan Rutman + * 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 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/mgc/mgc_request.c + * + * Author: Nathan Rutman */ #ifndef EXPORT_SYMTAB @@ -73,7 +87,7 @@ static int mgc_name2resid(char *name, int len, struct ldlm_res_id *res_id) int mgc_fsname2resid(char *fsname, struct ldlm_res_id *res_id) { /* fsname is at most 8 chars long, maybe contain "-". - * e.g. "lustre", "CFS-000" */ + * e.g. "lustre", "SUN-000" */ return mgc_name2resid(fsname, strlen(fsname), res_id); } EXPORT_SYMBOL(mgc_fsname2resid); @@ -84,7 +98,7 @@ int mgc_logname2resid(char *logname, struct ldlm_res_id *res_id) int len; /* logname consists of "fsname-nodetype". - * e.g. "lustre-MDT0001", "CFS-000-client" */ + * e.g. "lustre-MDT0001", "SUN-000-client" */ name_end = strrchr(logname, '-'); LASSERT(name_end); len = name_end - logname; @@ -92,7 +106,7 @@ int mgc_logname2resid(char *logname, struct ldlm_res_id *res_id) } /********************** config llog list **********************/ -static struct list_head config_llog_list = LIST_HEAD_INIT(config_llog_list); +static CFS_LIST_HEAD(config_llog_list); static spinlock_t config_list_lock = SPIN_LOCK_UNLOCKED; /* Take a reference to a config log */ @@ -323,7 +337,6 @@ static int mgc_requeue_add(struct config_llog_data *cld, int later) /* Hold lock for rq_state */ spin_lock(&config_list_lock); - cld->cld_lostlock = 1; if (cld->cld_stopping || (rq_state & RQ_STOP)) { spin_unlock(&config_list_lock); @@ -331,6 +344,8 @@ static int mgc_requeue_add(struct config_llog_data *cld, int later) RETURN(0); } + cld->cld_lostlock = 1; + if (!(rq_state & RQ_RUNNING)) { LASSERT(rq_state == 0); rq_state = RQ_RUNNING | (later ? RQ_LATER : RQ_NOW); @@ -406,7 +421,7 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb, /* We take an obd ref to insure that we can't get to mgc_cleanup without calling mgc_fs_cleanup first. */ - class_incref(obd); + class_incref(obd, "mgc_fs", obd); label = fsfilt_get_label(obd, mnt->mnt_sb); if (label) @@ -437,7 +452,7 @@ static int mgc_fs_cleanup(struct obd_device *obd) l_dput(cli->cl_mgc_configs_dir); cli->cl_mgc_configs_dir = NULL; pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - class_decref(obd); + class_decref(obd, "mgc_fs", obd); } cli->cl_mgc_vfsmnt = NULL; @@ -467,14 +482,10 @@ static int mgc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) spin_unlock(&config_list_lock); cfs_waitq_signal(&rq_waitq); } - break; - case OBD_CLEANUP_SELF_EXP: rc = obd_llog_finish(obd, 0); if (rc != 0) CERROR("failed to cleanup llogging subsystems\n"); break; - case OBD_CLEANUP_OBD: - break; } RETURN(rc); } @@ -512,7 +523,7 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) if (rc) GOTO(err_decref, rc); - rc = obd_llog_init(obd, OBD_LLOG_GROUP, obd, 0, NULL, NULL); + rc = obd_llog_init(obd, &obd->obd_olg, obd, 0, NULL, NULL); if (rc) { CERROR("failed to setup llogging subsystems\n"); GOTO(err_cleanup, rc); @@ -528,7 +539,7 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) cfs_waitq_init(&rq_waitq); } spin_unlock(&config_list_lock); - + RETURN(rc); err_cleanup: @@ -614,7 +625,7 @@ static int mgc_set_mgs_param(struct obd_export *exp, struct ptlrpc_request *req; struct mgs_send_param *req_msp, *rep_msp; int size[] = { sizeof(struct ptlrpc_body), sizeof(*req_msp) }; - int rep_size[] = { sizeof(struct ptlrpc_body), sizeof(*msp) }; + __u32 rep_size[] = { sizeof(struct ptlrpc_body), sizeof(*msp) }; int rc; ENTRY; @@ -650,7 +661,7 @@ static int mgc_enqueue(struct obd_export *exp, struct lov_stripe_md *lsm, { struct config_llog_data *cld = (struct config_llog_data *)data; struct ldlm_enqueue_info einfo = { type, mode, mgc_blocking_ast, - ldlm_completion_ast, NULL, data}; + ldlm_completion_ast, NULL, NULL, data}; int rc; ENTRY; @@ -814,7 +825,7 @@ int mgc_set_info_async(struct obd_export *exp, obd_count keylen, RETURN(0); } /* FIXME move this to mgc_process_config */ - if (KEY_IS("register_target")) { + if (KEY_IS(KEY_REGISTER_TARGET)) { struct mgs_target_info *mti; if (vallen != sizeof(struct mgs_target_info)) RETURN(-EINVAL); @@ -824,7 +835,7 @@ int mgc_set_info_async(struct obd_export *exp, obd_count keylen, rc = mgc_target_register(exp, mti); RETURN(rc); } - if (KEY_IS("set_fs")) { + if (KEY_IS(KEY_SET_FS)) { struct super_block *sb = (struct super_block *)val; struct lustre_sb_info *lsi; if (vallen != sizeof(struct super_block)) @@ -836,7 +847,7 @@ int mgc_set_info_async(struct obd_export *exp, obd_count keylen, } RETURN(rc); } - if (KEY_IS("clear_fs")) { + if (KEY_IS(KEY_CLEAR_FS)) { if (vallen != 0) RETURN(-EINVAL); rc = mgc_fs_cleanup(exp->exp_obd); @@ -868,7 +879,6 @@ static int mgc_import_event(struct obd_device *obd, switch (event) { case IMP_EVENT_DISCON: /* MGC imports should not wait for recovery */ - ptlrpc_invalidate_import(imp); break; case IMP_EVENT_INACTIVE: break; @@ -891,17 +901,15 @@ static int mgc_import_event(struct obd_device *obd, RETURN(rc); } -static int mgc_llog_init(struct obd_device *obd, int group, +static int mgc_llog_init(struct obd_device *obd, struct obd_llog_group *olg, struct obd_device *tgt, int count, struct llog_catid *logid, struct obd_uuid *uuid) { struct llog_ctxt *ctxt; - struct obd_llog_group *olg = &obd->obd_olg; int rc; ENTRY; - LASSERT(group == OBD_LLOG_GROUP); - LASSERT(olg->olg_group == group); + LASSERT(olg == &obd->obd_olg); rc = llog_setup(obd, olg, LLOG_CONFIG_ORIG_CTXT, tgt, 0, NULL, &llog_lvfs_ops); @@ -914,6 +922,10 @@ static int mgc_llog_init(struct obd_device *obd, int group, ctxt = llog_get_context(obd, LLOG_CONFIG_REPL_CTXT); llog_initiator_connect(ctxt); llog_ctxt_put(ctxt); + } else { + ctxt = llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); + if (ctxt) + llog_cleanup(ctxt); } RETURN(rc); @@ -1051,7 +1063,8 @@ out_closel: struct client_obd *cli = &obd->u.cli; LASSERT(cli); LASSERT(cli->cl_mgc_configs_dir); - rc = lustre_rename(cli->cl_mgc_configs_dir, temp_log, logname); + rc = lustre_rename(cli->cl_mgc_configs_dir, cli->cl_mgc_vfsmnt, + temp_log, logname); } CDEBUG(D_MGC, "Copied remote log %s (%d)\n", logname, rc); out: @@ -1084,7 +1097,7 @@ static int mgc_process_log(struct obd_device *mgc, if (cld->cld_stopping) RETURN(0); - OBD_FAIL_TIMEOUT(OBD_FAIL_MGC_PROCESS_LOG, 20); + OBD_FAIL_TIMEOUT(OBD_FAIL_MGC_PAUSE_PROCESS_LOG, 20); lsi = s2lsi(cld->cld_cfg.cfg_sb); @@ -1276,7 +1289,7 @@ static void /*__exit*/ mgc_exit(void) class_unregister_type(LUSTRE_MGC_NAME); } -MODULE_AUTHOR("Cluster File Systems, Inc. "); +MODULE_AUTHOR("Sun Microsystems, Inc. "); MODULE_DESCRIPTION("Lustre Management Client"); MODULE_LICENSE("GPL");