From: Alex Zhuravlev Date: Thu, 25 Oct 2012 09:59:39 +0000 (+0400) Subject: LU-2226 osp: dump statfs data via lprocfs X-Git-Tag: 2.3.55~51 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=496e925db0d4d0be728390398101e4d3a5983086 LU-2226 osp: dump statfs data via lprocfs register another set of vars to be accessed with data=dt device. use existing lprocfs_osd_rd_*() helpers. Signed-off-by: Alex Zhuravlev Change-Id: Ib2fed358866847d8abb0e818c1d40494c0642681 Reviewed-on: http://review.whamcloud.com/4390 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: James Simmons --- diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c index 8488322..ea79310 100644 --- a/lustre/osp/lproc_osp.c +++ b/lustre/osp/lproc_osp.c @@ -402,12 +402,6 @@ static struct lprocfs_vars lprocfs_osp_obd_vars[] = { { "uuid", lprocfs_rd_uuid, 0, 0 }, { "ping", 0, lprocfs_wr_ping, 0, 0, 0222 }, { "connect_flags", lprocfs_rd_connect_flags, 0, 0 }, - { "blocksize", lprocfs_rd_blksize, 0, 0 }, - { "kbytestotal", lprocfs_rd_kbytestotal, 0, 0 }, - { "kbytesfree", lprocfs_rd_kbytesfree, 0, 0 }, - { "kbytesavail", lprocfs_rd_kbytesavail, 0, 0 }, - { "filestotal", lprocfs_rd_filestotal, 0, 0 }, - { "filesfree", lprocfs_rd_filesfree, 0, 0 }, { "ost_server_uuid", lprocfs_rd_server_uuid, 0, 0 }, { "ost_conn_uuid", lprocfs_rd_conn_uuid, 0, 0 }, { "active", osp_rd_active, osp_wr_active, 0 }, @@ -437,6 +431,16 @@ static struct lprocfs_vars lprocfs_osp_obd_vars[] = { { 0 } }; +static struct lprocfs_vars lprocfs_osp_osd_vars[] = { + { "blocksize", lprocfs_osd_rd_blksize, 0, 0 }, + { "kbytestotal", lprocfs_osd_rd_kbytestotal, 0, 0 }, + { "kbytesfree", lprocfs_osd_rd_kbytesfree, 0, 0 }, + { "kbytesavail", lprocfs_osd_rd_kbytesavail, 0, 0 }, + { "filestotal", lprocfs_osd_rd_filestotal, 0, 0 }, + { "filesfree", lprocfs_osd_rd_filesfree, 0, 0 }, + { 0 } +}; + static struct lprocfs_vars lprocfs_osp_module_vars[] = { { "num_refs", lprocfs_rd_numrefs, 0, 0 }, { 0 } @@ -447,5 +451,52 @@ void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars) lvars->module_vars = lprocfs_osp_module_vars; lvars->obd_vars = lprocfs_osp_obd_vars; } + +void osp_lprocfs_init(struct osp_device *osp) +{ + struct obd_device *obd = osp->opd_obd; + struct proc_dir_entry *osc_proc_dir; + int rc; + + obd->obd_proc_entry = lprocfs_register(obd->obd_name, + obd->obd_type->typ_procroot, + lprocfs_osp_osd_vars, + &osp->opd_dt_dev); + if (IS_ERR(obd->obd_proc_entry)) { + CERROR("%s: can't register in lprocfs: %ld\n", + obd->obd_name, PTR_ERR(obd->obd_proc_entry)); + obd->obd_proc_entry = NULL; + return; + } + + rc = lprocfs_add_vars(obd->obd_proc_entry, lprocfs_osp_obd_vars, obd); + if (rc) { + CERROR("%s: can't register in lprocfs: %ld\n", + obd->obd_name, PTR_ERR(obd->obd_proc_entry)); + return; + } + + ptlrpc_lprocfs_register_obd(obd); + + /* for compatibility we link old procfs's OSC entries to osp ones */ + osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc"); + if (osc_proc_dir) { + cfs_proc_dir_entry_t *symlink = NULL; + char *name; + + OBD_ALLOC(name, strlen(obd->obd_name) + 1); + if (name == NULL) + return; + + strcpy(name, obd->obd_name); + if (strstr(name, "osc")) + symlink = lprocfs_add_symlink(name, osc_proc_dir, + "../osp/%s", + obd->obd_name); + OBD_FREE(name, strlen(obd->obd_name) + 1); + osp->opd_symlink = symlink; + } +} + #endif /* LPROCFS */ diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c index 5fcca70..0b463b7 100644 --- a/lustre/osp/osp_dev.c +++ b/lustre/osp/osp_dev.c @@ -402,8 +402,7 @@ out: static int osp_init0(const struct lu_env *env, struct osp_device *m, struct lu_device_type *ldt, struct lustre_cfg *cfg) { - struct lprocfs_static_vars lvars = { 0 }; - struct proc_dir_entry *osc_proc_dir; + struct obd_device *obd; struct obd_import *imp; class_uuid_t uuid; char *src, *ost, *mdt, *osdname = NULL; @@ -411,12 +410,13 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, ENTRY; - m->opd_obd = class_name2obd(lustre_cfg_string(cfg, 0)); - if (m->opd_obd == NULL) { + obd = class_name2obd(lustre_cfg_string(cfg, 0)); + if (obd == NULL) { CERROR("Cannot find obd with name %s\n", lustre_cfg_string(cfg, 0)); RETURN(-ENODEV); } + m->opd_obd = obd; /* There is no record in the MDT configuration for the local disk * device, so we have to extract this from elsewhere in the profile. @@ -438,8 +438,7 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, idx = simple_strtol(ost + 4, &mdt, 16); if (mdt[0] != '-' || idx > INT_MAX || idx < 0) { - CERROR("%s: invalid OST index in '%s'\n", - m->opd_obd->obd_name, src); + CERROR("%s: invalid OST index in '%s'\n", obd->obd_name, src); GOTO(out_fini, rc = -EINVAL); } m->opd_index = idx; @@ -447,8 +446,7 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, idx = ost - src; /* check the fsname length, and after this everything else will fit */ if (idx > MTI_NAME_MAXLEN) { - CERROR("%s: fsname too long in '%s'\n", - m->opd_obd->obd_name, src); + CERROR("%s: fsname too long in '%s'\n", obd->obd_name, src); GOTO(out_fini, rc = -EINVAL); } @@ -465,12 +463,11 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, else strcat(osdname, mdt); strcat(osdname, "-osd"); - CDEBUG(D_HA, "%s: connect to %s (%s)\n", - m->opd_obd->obd_name, osdname, src); + CDEBUG(D_HA, "%s: connect to %s (%s)\n", obd->obd_name, osdname, src); m->opd_dt_dev.dd_lu_dev.ld_ops = &osp_lu_ops; m->opd_dt_dev.dd_ops = &osp_dt_ops; - m->opd_obd->obd_lu_dev = &m->opd_dt_dev.dd_lu_dev; + obd->obd_lu_dev = &m->opd_dt_dev.dd_lu_dev; rc = osp_connect_to_osd(env, m, osdname); if (rc) @@ -480,34 +477,13 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, if (rc) GOTO(out_disconnect, rc); - rc = client_obd_setup(m->opd_obd, cfg); + rc = client_obd_setup(obd, cfg); if (rc) { CERROR("%s: can't setup obd: %d\n", m->opd_obd->obd_name, rc); GOTO(out_ref, rc); } - lprocfs_osp_init_vars(&lvars); - if (lprocfs_obd_setup(m->opd_obd, lvars.obd_vars) == 0) - ptlrpc_lprocfs_register_obd(m->opd_obd); - - /* for compatibility we link old procfs's OSC entries to osp ones */ - osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc"); - if (osc_proc_dir) { - cfs_proc_dir_entry_t *symlink = NULL; - char *name; - - OBD_ALLOC(name, strlen(m->opd_obd->obd_name) + 1); - if (name == NULL) - GOTO(out, rc = -ENOMEM); - - strcpy(name, m->opd_obd->obd_name); - if (strstr(name, "osc")) - symlink = lprocfs_add_symlink(name, osc_proc_dir, - "../osp/%s", - m->opd_obd->obd_name); - OBD_FREE(name, strlen(m->opd_obd->obd_name) + 1); - m->opd_symlink = symlink; - } + osp_lprocfs_init(m); /* * Initialize last id from the storage - will be used in orphan cleanup @@ -537,7 +513,7 @@ static int osp_init0(const struct lu_env *env, struct osp_device *m, ll_generate_random_uuid(uuid); class_uuid_unparse(uuid, &m->opd_cluuid); - imp = m->opd_obd->u.cli.cl_import; + imp = obd->u.cli.cl_import; rc = ptlrpc_init_import(imp); if (rc) @@ -555,10 +531,10 @@ out_precreat: out_last_used: osp_last_used_fini(env, m); out_proc: - ptlrpc_lprocfs_unregister_obd(m->opd_obd); - lprocfs_obd_cleanup(m->opd_obd); - class_destroy_import(m->opd_obd->u.cli.cl_import); - client_obd_cleanup(m->opd_obd); + ptlrpc_lprocfs_unregister_obd(obd); + lprocfs_obd_cleanup(obd); + class_destroy_import(obd->u.cli.cl_import); + client_obd_cleanup(obd); out_ref: ptlrpcd_decref(); out_disconnect: @@ -1033,4 +1009,3 @@ MODULE_DESCRIPTION("Lustre OST Proxy Device ("LUSTRE_OSP_NAME")"); MODULE_LICENSE("GPL"); cfs_module(osp, LUSTRE_VERSION_STRING, osp_mod_init, osp_mod_exit); - diff --git a/lustre/osp/osp_internal.h b/lustre/osp/osp_internal.h index e75c246..900687d 100644 --- a/lustre/osp/osp_internal.h +++ b/lustre/osp/osp_internal.h @@ -305,6 +305,7 @@ void osp_statfs_need_now(struct osp_device *d); /* lproc_osp.c */ void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars); +void osp_lprocfs_init(struct osp_device *osp); /* osp_sync.c */ int osp_sync_declare_add(const struct lu_env *env, struct osp_object *o,