X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_fs.c;h=862d19ad202aa934cd165e642209080a4d165ec2;hp=5ce28b4f1db005ee9db78fad2adbc3aeb6fbd7af;hb=917655fc2938b90a9c246dd2d58408c42aa1658d;hpb=9d3ad9fba3e244735f0994c3910e9de00e2a7f4d diff --git a/lustre/mdt/mdt_fs.c b/lustre/mdt/mdt_fs.c index 5ce28b4..862d19a 100644 --- a/lustre/mdt/mdt_fs.c +++ b/lustre/mdt/mdt_fs.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -17,17 +15,15 @@ * * 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 - * - * 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. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, 2015, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -37,42 +33,70 @@ * * Lustre Metadata Server (MDS) filesystem interface code */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif + #define DEBUG_SUBSYSTEM S_MDS #include "mdt_internal.h" -int mdt_export_stats_init(struct obd_device *obd, - struct obd_export *exp, - void *localdata) +static const struct file_operations mdt_open_files_seq_fops = { + .owner = THIS_MODULE, + .open = lprocfs_mdt_open_files_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +/** + * Initialize MDT per-export statistics. + * + * This function sets up procfs entries for various MDT export counters. These + * counters are for per-client statistics tracked on the server. + * + * \param[in] obd OBD device + * \param[in] exp OBD export + * \param[in] localdata NID of client + * + * \retval 0 if successful + * \retval negative value on error + */ +int mdt_export_stats_init(struct obd_device *obd, struct obd_export *exp, + void *localdata) { - lnet_nid_t *client_nid = localdata; - int rc, newnid; + lnet_nid_t *client_nid = localdata; + struct nid_stat *stats; + int rc; + ENTRY; + + rc = lprocfs_exp_setup(exp, client_nid); + if (rc != 0) + /* Mask error for already created /proc entries */ + RETURN(rc == -EALREADY ? 0 : rc); + + stats = exp->exp_nid_stats; + stats->nid_stats = lprocfs_alloc_stats(LPROC_MDT_LAST, + LPROCFS_STATS_FLAG_NOPERCPU); + if (stats->nid_stats == NULL) + RETURN(-ENOMEM); + + mdt_stats_counter_init(stats->nid_stats); + + rc = lprocfs_register_stats(stats->nid_proc, "stats", stats->nid_stats); + if (rc != 0) { + lprocfs_free_stats(&stats->nid_stats); + GOTO(out, rc); + } - rc = lprocfs_exp_setup(exp, client_nid, &newnid); - if (rc) { - /* Mask error for already created - * /proc entries */ - if (rc == -EALREADY) - rc = 0; - return rc; - } + rc = lprocfs_nid_ldlm_stats_init(stats); + if (rc != 0) + GOTO(out, rc); - if ((obd->md_stats == NULL) && - (rc = lprocfs_alloc_md_stats(obd, LPROC_MDT_NR))) - 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) - 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); - } - return rc; + rc = lprocfs_seq_create(stats->nid_proc, "open_files", + 0444, &mdt_open_files_seq_fops, stats); + if (rc != 0) { + CWARN("%s: error adding the open_files file: rc = %d\n", + obd->obd_name, rc); + GOTO(out, rc); + } +out: + RETURN(rc); }