* 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/
lnet_nid_t *client_nid = localdata;
struct nid_stat *stats;
int rc;
+
ENTRY;
rc = lprocfs_exp_setup(exp, client_nid);
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);
* 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;
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));
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));
/* 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));
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;
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;
}