/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * * Copyright (C) 2002 Cluster File Systems, Inc. * * This file is part of Lustre, http://www.lustre.org. * * Lustre is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. * * Lustre is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Lustre; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ #define DEBUG_SUBSYSTEM S_CLASS #include #include /* * Common STATUS namespace */ int rd_uuid(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device* dev = (struct obd_device*)data; return snprintf(page, count, "%s\n", dev->obd_uuid); } int rd_stripesize(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device *dev = (struct obd_device*)data; struct lov_desc *desc = &dev->u.lov.desc; return snprintf(page, count, LPU64"\n", desc->ld_default_stripe_size); } int rd_stripeoffset(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device* dev = (struct obd_device*)data; struct lov_obd* lov = &dev->u.lov; return snprintf(page, count, LPU64"\n", lov->desc.ld_default_stripe_offset); } int rd_stripetype(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device* dev = (struct obd_device*)data; struct lov_obd* lov = &dev->u.lov; return snprintf(page, count, "%u\n", lov->desc.ld_pattern); } int rd_stripecount(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device* dev = (struct obd_device*)data; struct lov_obd* lov = &dev->u.lov; return snprintf(page, count, "%u\n", lov->desc.ld_default_stripe_count); } int rd_numobd(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device *dev = (struct obd_device*)data; struct lov_obd *lov = &dev->u.lov; return snprintf(page, count, "%u\n", lov->desc.ld_tgt_count); } int rd_activeobd(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device* dev = (struct obd_device*)data; struct lov_obd* lov = &dev->u.lov; return snprintf(page, count, "%u\n", lov->desc.ld_active_tgt_count); } int rd_blksize(char *page, char **start, off_t off, int count, int *eof, void *data) { return 0; } int rd_kbtotal(char *page, char **start, off_t off, int count, int *eof, void *data) { return 0; } int rd_kbfree(char *page, char **start, off_t off, int count, int *eof, void *data) { return 0; } int rd_filestotal(char *page, char **start, off_t off, int count, int *eof, void *data) { return 0; } int rd_filesfree(char* page, char **start, off_t off, int count, int *eof, void *data) { return 0; } int rd_filegroups(char* page, char **start, off_t off, int count, int *eof, void *data) { return 0; } int rd_target(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device* dev = (struct obd_device*)data; int len = 0, i = 0; struct lov_obd* lov = &dev->u.lov; struct lov_tgt_desc* tgts = lov->tgts; while (i < lov->desc.ld_tgt_count) { len += snprintf(&page[len], count - len, "%d: %s %sACTIVE\n", i, tgts->uuid, tgts->active ? "" : "IN"); i++; tgts++; } return len; } int rd_mdc(char* page, char **start, off_t off, int count, int *eof, void *data) { struct obd_device* dev = (struct obd_device*)data; int len = 0; struct lov_obd* lov = &dev->u.lov; len += snprintf(page, count, "%s\n", lov->mdcobd->obd_uuid); return len; } struct lprocfs_vars status_var_nm_1[] = { {"status/uuid", rd_uuid, 0, 0}, {"status/stripesize",rd_stripesize, 0, 0}, {"status/stripeoffset",rd_stripeoffset, 0, 0}, {"status/stripecount",rd_stripecount, 0, 0}, {"status/stripetype", rd_stripetype, 0, 0}, {"status/numobd",rd_numobd, 0, 0}, {"status/activeobd", rd_activeobd, 0, 0}, {"status/filestotal", rd_filestotal, 0, 0}, {"status/filesfree", rd_filesfree, 0, 0}, {"status/filegroups", rd_filegroups, 0, 0}, {"status/blocksize", rd_blksize, 0, 0}, {"status/kbytestotal", rd_kbtotal, 0, 0}, {"status/kbytesfree", rd_kbfree, 0, 0}, {"status/target_obd", rd_target, 0, 0}, {"status/target_mdc", rd_mdc, 0, 0}, {0} }; int rd_numrefs(char *page, char **start, off_t off, int count, int *eof, void *data) { struct obd_type* class = (struct obd_type*)data; return snprintf(page, count, "%d\n", class->typ_refcnt); } struct lprocfs_vars status_class_var[]={ {"status/num_refs", rd_numrefs, 0, 0}, {0} };