X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmgs%2Fmgs_fs.c;h=2ac9764c9d0e1a87e91f539c18ab38c6e00722ca;hb=4960810b94d808965cae9258fb4f7583618a75e9;hp=4b87e84afd64e4670b4f58b974ee24ca491362ce;hpb=feb80fe0c440f7790cc3afa53d048370374a81b1;p=fs%2Flustre-release.git diff --git a/lustre/mgs/mgs_fs.c b/lustre/mgs/mgs_fs.c index 4b87e84..2ac9764 100644 --- a/lustre/mgs/mgs_fs.c +++ b/lustre/mgs/mgs_fs.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -58,35 +58,45 @@ #include #include "mgs_internal.h" -static int mgs_export_stats_init(struct obd_device *obd, struct obd_export *exp, - void *localdata) +int mgs_export_stats_init(struct obd_device *obd, struct obd_export *exp, + int reconnect, void *localdata) + { lnet_nid_t *client_nid = localdata; int rc, newnid; + ENTRY; - rc = lprocfs_exp_setup(exp, client_nid, &newnid); + rc = lprocfs_exp_setup(exp, client_nid, reconnect, &newnid); if (rc) { /* Mask error for already created * /proc entries */ if (rc == -EALREADY) rc = 0; - return rc; + RETURN(rc); } - - if (!obd->md_stats && - lprocfs_alloc_md_stats(obd, LPROC_MGS_LAST)) - return rc; if (newnid) { - /* Always add in ldlm_stats */ - exp->exp_nid_stats->nid_ldlm_stats = - lprocfs_alloc_stats(LDLM_LAST_OPC - LDLM_FIRST_OPC, 0); - if (exp->exp_nid_stats->nid_ldlm_stats == NULL) + struct nid_stat *tmp = exp->exp_nid_stats; + int num_stats = 0; + + num_stats = (sizeof(*obd->obd_type->typ_dt_ops) / sizeof(void *)) + + LPROC_MGS_LAST - 1; + tmp->nid_stats = lprocfs_alloc_stats(num_stats, + LPROCFS_STATS_FLAG_NOPERCPU); + if (tmp->nid_stats == NULL) return -ENOMEM; - lprocfs_init_ldlm_stats(exp->exp_nid_stats->nid_ldlm_stats); - rc = lprocfs_register_stats(exp->exp_nid_stats->nid_proc, - "ldlm_stats", - exp->exp_nid_stats->nid_ldlm_stats); + lprocfs_init_ops_stats(LPROC_MGS_LAST, tmp->nid_stats); + mgs_stats_counter_init(tmp->nid_stats); + rc = lprocfs_register_stats(tmp->nid_proc, "stats", + tmp->nid_stats); + if (rc) + GOTO(clean, rc); + + rc = lprocfs_nid_ldlm_stats_init(tmp); + if (rc) + GOTO(clean, rc); } + RETURN(0); +clean: return rc; } @@ -98,7 +108,7 @@ static int mgs_export_stats_init(struct obd_device *obd, struct obd_export *exp, int mgs_client_add(struct obd_device *obd, struct obd_export *exp, void *localdata) { - return mgs_export_stats_init(obd, exp, localdata); + return 0; } /* Remove client export data from the MGS */ @@ -151,7 +161,8 @@ static struct dentry *mgs_fid2dentry(struct mgs_obd *mgs, /* we didn't find the right inode.. */ CDEBUG(D_INODE, "found wrong generation: inode %lu, link: %lu, " "count: %d, generation %u/%u\n", inode->i_ino, - (unsigned long)inode->i_nlink, atomic_read(&inode->i_count), + (unsigned long)inode->i_nlink, + atomic_read(&inode->i_count), inode->i_generation, gen); l_dput(result); RETURN(ERR_PTR(-ENOENT)); @@ -180,7 +191,7 @@ int mgs_fs_setup(struct obd_device *obd, struct vfsmount *mnt) ENTRY; /* FIXME what's this? Do I need it? */ - rc = cleanup_group_info(); + rc = cfs_cleanup_group_info(); if (rc) RETURN(rc); @@ -209,7 +220,7 @@ int mgs_fs_setup(struct obd_device *obd, struct vfsmount *mnt) /* Need the iopen dir for fid2dentry, required by LLOG_ORIGIN_HANDLE_READ_HEADER */ - dentry = lookup_one_len("__iopen__", current->fs->pwd, + dentry = ll_lookup_one_len("__iopen__", current->fs->pwd, strlen("__iopen__")); if (IS_ERR(dentry)) { rc = PTR_ERR(dentry); @@ -244,16 +255,12 @@ int mgs_fs_cleanup(struct obd_device *obd) push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); if (mgs->mgs_configs_dir) { - /*CERROR("configs dir dcount=%d\n", - atomic_read(&mgs->mgs_configs_dir->d_count));*/ l_dput(mgs->mgs_configs_dir); mgs->mgs_configs_dir = NULL; } - shrink_dcache_parent(mgs->mgs_fid_de); - /*CERROR("fid dir dcount=%d\n", - atomic_read(&mgs->mgs_fid_de->d_count));*/ dput(mgs->mgs_fid_de); + shrink_dcache_sb(mgs->mgs_sb); pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);