X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmgs%2Fmgs_fs.c;h=2ac9764c9d0e1a87e91f539c18ab38c6e00722ca;hb=4960810b94d808965cae9258fb4f7583618a75e9;hp=ff708e08f5b84487edc5e48ee016dfbe7b6280b8;hpb=e67c6e366752611ffd2baeb7cefa24c9f289eb78;p=fs%2Flustre-release.git diff --git a/lustre/mgs/mgs_fs.c b/lustre/mgs/mgs_fs.c index ff708e0..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,14 +58,15 @@ #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 */ @@ -73,24 +74,29 @@ static int mgs_export_stats_init(struct obd_device *obd, struct obd_export *exp, rc = 0; 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, - LPROCFS_STATS_FLAG_NOPERCPU); - if (exp->exp_nid_stats->nid_ldlm_stats == NULL) - GOTO(clean, rc = -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); + 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_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: - lprocfs_exp_cleanup(exp); return rc; } @@ -102,7 +108,7 @@ clean: 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 */ @@ -214,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);