X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flov%2Flproc_lov.c;h=7b7a00c08b44aa316faf240f8bbfe1a7766a2ca2;hp=8198dc6177702e74d72fee4d2ebeddf882be605c;hb=a2a0746305449dbd925879b14dc2c0d6040bb8bf;hpb=400b0681017091fab9cef9bd00e0f536e1793dcc diff --git a/lustre/lov/lproc_lov.c b/lustre/lov/lproc_lov.c index 8198dc6..7b7a00c 100644 --- a/lustre/lov/lproc_lov.c +++ b/lustre/lov/lproc_lov.c @@ -21,191 +21,187 @@ */ #define DEBUG_SUBSYSTEM S_CLASS -#include +#include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)) +#include +#endif #include +#include +#include -/* - * Common STATUS namespace - */ +#ifndef LPROCFS +static struct lprocfs_vars lprocfs_module_vars[] = { {0} }; +static struct lprocfs_vars lprocfs_obd_vars[] = { {0} }; +#else -int rd_uuid(char* page, char **start, off_t off, - int count, int *eof, void *data) +static int lov_rd_stripesize(char *page, char **start, off_t off, int count, + int *eof, void *data) { - int len=0; - struct obd_device* dev=(struct obd_device*)data; - len+=snprintf(page, count, "%s\n", dev->obd_uuid); - return len; - + struct obd_device *dev = (struct obd_device *)data; + struct lov_desc *desc; -} -int rd_stripesize(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, LPU64"\n", - (__u64)(lov->desc.ld_default_stripe_size)); - - return len; + LASSERT(dev != NULL); + desc = &dev->u.lov.desc; + *eof = 1; + 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) +static int lov_rd_stripeoffset(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, LPU64"\n", - lov->desc.ld_default_stripe_offset); - return len; + struct obd_device *dev = (struct obd_device *)data; + struct lov_desc *desc; + LASSERT(dev != NULL); + desc = &dev->u.lov.desc; + *eof = 1; + return snprintf(page, count, LPU64"\n", desc->ld_default_stripe_offset); } -int rd_stripetype(char* page, char **start, off_t off, - int count, int *eof, void *data) +static int lov_rd_stripetype(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, LPU64"\n", - (__u64)(lov->desc.ld_pattern)); - return len; + struct obd_device* dev = (struct obd_device*)data; + struct lov_desc *desc; + LASSERT(dev != NULL); + desc = &dev->u.lov.desc; + *eof = 1; + return snprintf(page, count, "%u\n", 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; - int len=0; - struct lov_obd* lov=&dev->u.lov; - len+=snprintf(page, count, LPU64"\n", - (__u64)(lov->desc.ld_default_stripe_count)); - return len; -} -int rd_numobd(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, LPU64"\n", - (__u64)(lov->desc.ld_tgt_count)); - return len; +static int lov_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_desc *desc; + LASSERT(dev != NULL); + desc = &dev->u.lov.desc; + *eof = 1; + return snprintf(page, count, "%u\n", desc->ld_default_stripe_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; - int len=0; - struct lov_obd* lov=&dev->u.lov; - len+=snprintf(page, count, LPU64"\n", - (__u64)(lov->desc.ld_active_tgt_count)); - return len; +static int lov_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_desc *desc; + + LASSERT(dev != NULL); + desc = &dev->u.lov.desc; + *eof = 1; + return snprintf(page, count, "%u\n", desc->ld_tgt_count); } -int rd_blksize(char* page, char **start, off_t off, - int count, int *eof, void *data) +static int lov_rd_activeobd(char *page, char **start, off_t off, int count, + int *eof, void *data) { - return 0; -} + struct obd_device* dev = (struct obd_device*)data; + struct lov_desc *desc; + LASSERT(dev != NULL); + desc = &dev->u.lov.desc; + *eof = 1; + return snprintf(page, count, "%u\n", desc->ld_active_tgt_count); +} -int rd_blktotal(char* page, char **start, off_t off, - int count, int *eof, void *data) +static int lov_rd_mdc(char *page, char **start, off_t off, int count, int *eof, + void *data) { - return 0; + struct obd_device *dev = (struct obd_device*) data; + struct lov_obd *lov; + + LASSERT(dev != NULL); + lov = &dev->u.lov; + *eof = 1; + return snprintf(page, count, "%s\n", lov->mdcobd->obd_uuid.uuid); } -int rd_blkfree(char* page, char **start, off_t off, - int count, int *eof, void *data) +static void *lov_tgt_seq_start(struct seq_file *p, loff_t *pos) { - return 0; + struct obd_device *dev = p->private; + struct lov_obd *lov = &dev->u.lov; + + return (*pos >= lov->desc.ld_tgt_count) ? NULL : &(lov->tgts[*pos]); + } -int rd_kbfree(char* page, char **start, off_t off, - int count, int *eof, void *data) +static void lov_tgt_seq_stop(struct seq_file *p, void *v) { - return 0; } -int rd_numobjects(char* page, char **start, off_t off, - int count, int *eof, void *data) +static void *lov_tgt_seq_next(struct seq_file *p, void *v, loff_t *pos) { - return 0; + struct obd_device *dev = p->private; + struct lov_obd *lov = &dev->u.lov; + + ++*pos; + return (*pos >=lov->desc.ld_tgt_count) ? NULL : &(lov->tgts[*pos]); } -int rd_objfree(char* page, char **start, off_t off, - int count, int *eof, void *data) +static int lov_tgt_seq_show(struct seq_file *p, void *v) { - return 0; -} + struct lov_tgt_desc *tgt = v; + struct obd_device *dev = p->private; + struct lov_obd *lov = &dev->u.lov; + int idx = tgt - &(lov->tgts[0]); + return seq_printf(p, "%d: %s %sACTIVE\n", idx+1, tgt->uuid.uuid, + tgt->active ? "" : "IN"); +} + +struct seq_operations lov_tgt_sops = { + .start = lov_tgt_seq_start, + .stop = lov_tgt_seq_stop, + .next = lov_tgt_seq_next, + .show = lov_tgt_seq_show, +}; -int rd_objgroups(char* page, char **start, off_t off, - int count, int *eof, void *data) +static int lov_target_seq_open(struct inode *inode, struct file *file) { + struct proc_dir_entry *dp = inode->u.generic_ip; + struct seq_file *seq; + int rc = seq_open(file, &lov_tgt_sops); + + if (rc) + return rc; + + seq = file->private_data; + seq->private = dp->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(idesc.ld_tgt_count){ - len+=snprintf(page, count, "%d: %s\n", i, tgts->uuid); - 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 lprocfs_obd_vars[] = { + { "uuid", lprocfs_rd_uuid, 0, 0 }, + { "stripesize", lov_rd_stripesize, 0, 0 }, + { "stripeoffset", lov_rd_stripeoffset, 0, 0 }, + { "stripecount", lov_rd_stripecount, 0, 0 }, + { "stripetype", lov_rd_stripetype, 0, 0 }, + { "numobd", lov_rd_numobd, 0, 0 }, + { "activeobd", lov_rd_activeobd, 0, 0 }, + { "filestotal", lprocfs_rd_filestotal, 0, 0 }, + { "filesfree", lprocfs_rd_filesfree, 0, 0 }, + //{ "filegroups", lprocfs_rd_filegroups, 0, 0 }, + { "blocksize", lprocfs_rd_blksize, 0, 0 }, + { "kbytestotal", lprocfs_rd_kbytestotal, 0, 0 }, + { "kbytesfree", lprocfs_rd_kbytesfree, 0, 0 }, + { "target_mdc", lov_rd_mdc, 0, 0 }, + { 0 } +}; -lprocfs_vars_t status_var_nm_1[]={ - {"status/uuid", rd_uuid, 0}, - {"status/stripesize",rd_stripesize, 0}, - {"status/stripeoffset",rd_stripeoffset, 0}, - {"status/stripecount",rd_stripecount, 0}, - {"status/stripetype", rd_stripetype, 0}, - {"status/numobd",rd_numobd, 0}, - {"status/activeobd", rd_activeobd, 0}, - {"status/objects", rd_numobjects, 0}, - {"status/objectsfree", rd_objfree, 0}, - {"status/objectgroups", rd_objgroups, 0}, - {"status/blocksize", rd_blksize, 0}, - {"status/blockstotal", rd_blktotal, 0}, - {"status/kbytesfree", rd_kbfree, 0}, - {"status/blocksfree", rd_blkfree, 0}, - {"status/target_obd", rd_target, 0}, - {"status/target_mdc", rd_mdc, 0}, - - {0} +static struct lprocfs_vars lprocfs_module_vars[] = { + { "num_refs", lprocfs_rd_numrefs, 0, 0 }, + { 0 } }; -int rd_numdevices(char* page, char **start, off_t off, - int count, int *eof, void *data) -{ - struct obd_type* class=(struct obd_type*)data; - int len=0; - len+=snprintf(page, count, "%d\n", class->typ_refcnt); - return len; -} -lprocfs_vars_t status_class_var[]={ - {"status/num_devices", rd_numdevices, 0}, - {0} +struct file_operations lov_proc_target_fops = { + .open = lov_target_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, }; + +#endif /* LPROCFS */ +LPROCFS_INIT_VARS(lov, lprocfs_module_vars, lprocfs_obd_vars)