LPROC_SEQ_FOPS_RO(mgs_fs);
+static void seq_show_srpc_rules(struct seq_file *seq, const char *tgtname,
+ struct sptlrpc_rule_set *rset)
+{
+ struct sptlrpc_rule *r;
+ char dirbuf[10];
+ char flvrbuf[40];
+ char *net;
+ int i;
+
+ for (i = 0; i < rset->srs_nrule; i++) {
+ r = &rset->srs_rules[i];
+
+ if (r->sr_netid == LNET_NIDNET(LNET_NID_ANY))
+ net = "default";
+ else
+ net = libcfs_net2str(r->sr_netid);
+
+ if (r->sr_from == LUSTRE_SP_ANY && r->sr_to == LUSTRE_SP_ANY)
+ dirbuf[0] = '\0';
+ else
+ snprintf(dirbuf, sizeof(dirbuf), ".%s2%s",
+ sptlrpc_part2name(r->sr_from),
+ sptlrpc_part2name(r->sr_to));
+
+ sptlrpc_flavor2name(&r->sr_flvr, flvrbuf, sizeof(flvrbuf));
+ seq_printf(seq, "%s.srpc.flavor.%s%s=%s\n", tgtname,
+ net, dirbuf, flvrbuf);
+ }
+}
+
+static int mgsself_srpc_seq_show(struct seq_file *seq, void *v)
+{
+ struct obd_device *obd = seq->private;
+ struct fs_db *fsdb;
+ int rc;
+
+ rc = mgs_find_or_make_fsdb(obd, MGSSELF_NAME, &fsdb);
+ if (rc)
+ return rc;
+
+ down(&fsdb->fsdb_sem);
+ seq_show_srpc_rules(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen);
+ up(&fsdb->fsdb_sem);
+ return 0;
+}
+
+LPROC_SEQ_FOPS_RO(mgsself_srpc);
+
int lproc_mgs_setup(struct obd_device *obd)
{
struct mgs_obd *mgs = &obd->u.mgs;
rc = lprocfs_obd_seq_create(obd, "filesystems", 0444,
&mgs_fs_fops, obd);
+ rc = lprocfs_obd_seq_create(obd, "srpc_rules", 0600,
+ &mgsself_srpc_fops, obd);
mgs->mgs_proc_live = lprocfs_register("live", obd->obd_proc_entry,
NULL, NULL);
return lprocfs_obd_cleanup(obd);
}
-static void seq_show_srpc_rule(struct seq_file *seq, const char *tgtname,
- struct sptlrpc_rule_set *rset)
-{
- struct sptlrpc_rule *r;
- char dirbuf[10];
- char flvrbuf[40];
- char *net;
- int i;
-
- for (i = 0; i < rset->srs_nrule; i++) {
- r = &rset->srs_rules[i];
-
- if (r->sr_netid == LNET_NIDNET(LNET_NID_ANY))
- net = "default";
- else
- net = libcfs_net2str(r->sr_netid);
-
- if (r->sr_from == LUSTRE_SP_ANY && r->sr_to == LUSTRE_SP_ANY)
- dirbuf[0] = '\0';
- else
- snprintf(dirbuf, sizeof(dirbuf), ".%s2%s",
- sptlrpc_part2name(r->sr_from),
- sptlrpc_part2name(r->sr_to));
-
- sptlrpc_flavor2name(&r->sr_flvr, flvrbuf, sizeof(flvrbuf));
- seq_printf(seq, "%s.srpc.flavor.%s%s=%s\n", tgtname,
- net, dirbuf, flvrbuf);
- }
-}
-
static int mgs_live_seq_show(struct seq_file *seq, void *v)
{
struct fs_db *fsdb = seq->private;
#endif
for (srpc_tgt = fsdb->fsdb_srpc_tgt; srpc_tgt;
srpc_tgt = srpc_tgt->mtsc_next) {
- seq_show_srpc_rule(seq, srpc_tgt->mtsc_tgt,
- &srpc_tgt->mtsc_rset);
+ seq_show_srpc_rules(seq, srpc_tgt->mtsc_tgt,
+ &srpc_tgt->mtsc_rset);
}
- seq_show_srpc_rule(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen);
+ seq_show_srpc_rules(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen);
up(&fsdb->fsdb_sem);
return 0;