X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmgs%2Fmgs_fs.c;h=fd49546493b231505fc23f7a66317dc18f01d794;hb=5a02d431f4a0a80915afa19c065df29c61e26ec9;hp=217b41c2377b2e62cc8bff689ad7ceddd0a5becc;hpb=5963af745b3aa14410d5ceb66f8a7b7d6aaf576a;p=fs%2Flustre-release.git diff --git a/lustre/mgs/mgs_fs.c b/lustre/mgs/mgs_fs.c index 217b41c..fd49546 100644 --- a/lustre/mgs/mgs_fs.c +++ b/lustre/mgs/mgs_fs.c @@ -23,7 +23,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2015, Intel Corporation. + * Copyright (c) 2011, 2017, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -61,6 +61,7 @@ int mgs_export_stats_init(struct obd_device *obd, struct obd_export *exp, lnet_nid_t *client_nid = localdata; struct nid_stat *stats; int rc; + ENTRY; rc = lprocfs_exp_setup(exp, client_nid); @@ -69,13 +70,11 @@ int mgs_export_stats_init(struct obd_device *obd, struct obd_export *exp, RETURN(rc == -EALREADY ? 0 : rc); stats = exp->exp_nid_stats; - stats->nid_stats = lprocfs_alloc_stats(NUM_OBD_STATS + LPROC_MGS_LAST, - LPROCFS_STATS_FLAG_NOPERCPU); + stats->nid_stats = lprocfs_alloc_stats(LPROC_MGS_LAST, + LPROCFS_STATS_FLAG_NOPERCPU); if (stats->nid_stats == NULL) RETURN(-ENOMEM); - lprocfs_init_ops_stats(LPROC_MGS_LAST, stats->nid_stats); - mgs_stats_counter_init(stats->nid_stats); rc = lprocfs_register_stats(stats->nid_proc, "stats", stats->nid_stats); @@ -98,26 +97,26 @@ out: * crash all connections are treated as new connections. */ int mgs_client_add(struct obd_device *obd, struct obd_export *exp, - void *localdata) + void *localdata) { - return 0; + return 0; } /* Remove client export data from the MGS */ int mgs_client_free(struct obd_export *exp) { - return 0; + return 0; } int mgs_fs_setup(const struct lu_env *env, struct mgs_device *mgs) { - struct lu_fid fid; - struct dt_object *o; - struct lu_fid rfid; - struct dt_object *root; - struct dt_object *nm_config_file_obj; - struct nm_config_file *nm_config_file; - int rc; + struct lu_fid fid; + struct dt_object *o; + struct lu_fid rfid; + struct dt_object *root; + struct dt_object *nm_config_file_obj; + struct nm_config_file *nm_config_file; + int rc; ENTRY; @@ -148,7 +147,7 @@ int mgs_fs_setup(const struct lu_env *env, struct mgs_device *mgs) o = local_file_find_or_create(env, mgs->mgs_los, root, MOUNT_CONFIGS_DIR, - S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO); + S_IFDIR | 0755); if (IS_ERR(o)) GOTO(out_root, rc = PTR_ERR(o)); @@ -163,8 +162,7 @@ int mgs_fs_setup(const struct lu_env *env, struct mgs_device *mgs) nm_config_file_obj = local_index_find_or_create(env, mgs->mgs_los, mgs->mgs_configs_dir, LUSTRE_NODEMAP_NAME, - S_IFREG | S_IRUGO | - S_IWUSR, + S_IFREG | 0644, &dt_nodemap_features); if (IS_ERR(nm_config_file_obj)) GOTO(out_configs, rc = PTR_ERR(nm_config_file_obj)); @@ -191,7 +189,7 @@ int mgs_fs_setup(const struct lu_env *env, struct mgs_device *mgs) /* create directory to store nid table versions */ o = local_file_find_or_create(env, mgs->mgs_los, root, MGS_NIDTBL_DIR, - S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO); + S_IFDIR | 0755); if (IS_ERR(o)) GOTO(out_nm, rc = PTR_ERR(o)); @@ -222,6 +220,28 @@ out: int mgs_fs_cleanup(const struct lu_env *env, struct mgs_device *mgs) { + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; + + /* + * For the MGS on independent device from MDT, it notifies the lower + * layer OSD to backup index before the umount via LCFG_PRE_CLEANUP. + */ + lustre_cfg_bufs_reset(&bufs, mgs->mgs_obd->obd_name); + lustre_cfg_bufs_set_string(&bufs, 1, NULL); + OBD_ALLOC(lcfg, lustre_cfg_len(bufs.lcfg_bufcount, bufs.lcfg_buflen)); + if (!lcfg) { + CERROR("%s: failed to trigger LCFG_PRE_CLEANUP\n", + mgs->mgs_obd->obd_name); + } else { + struct lu_device *l = &mgs->mgs_bottom->dd_lu_dev; + + lustre_cfg_init(lcfg, LCFG_PRE_CLEANUP, &bufs); + l->ld_ops->ldo_process_config(env, l, lcfg); + OBD_FREE(lcfg, lustre_cfg_len(lcfg->lcfg_bufcount, + lcfg->lcfg_buflens)); + } + if (mgs->mgs_configs_dir) { dt_object_put(env, mgs->mgs_configs_dir); mgs->mgs_configs_dir = NULL; @@ -231,8 +251,9 @@ int mgs_fs_cleanup(const struct lu_env *env, struct mgs_device *mgs) mgs->mgs_nidtbl_dir = NULL; } if (mgs->mgs_obd->u.obt.obt_nodemap_config_file != NULL) { - struct nm_config_file *ncf = mgs->mgs_obd->u.obt.obt_nodemap_config_file; + struct nm_config_file *ncf; + ncf = mgs->mgs_obd->u.obt.obt_nodemap_config_file; nm_config_file_deregister_mgs(env, ncf); mgs->mgs_obd->u.obt.obt_nodemap_config_file = NULL; }