diff options
Diffstat (limited to 'sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch')
-rw-r--r-- | sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch | 356 |
1 files changed, 356 insertions, 0 deletions
diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch new file mode 100644 index 000000000..756975ee9 --- /dev/null +++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch @@ -0,0 +1,356 @@ +From b262846027fbf96a5a80b81cfe86da53ce6e6f9f Mon Sep 17 00:00:00 2001 +From: James Simmons <uja.ornl@gmail.com> +Date: Fri, 3 Jan 2014 09:58:53 -0500 +Subject: [PATCH 03/12] LU-3319 procfs: move mgs proc handling to seq_files + +With 3.10 linux kernel and above proc handling now only +uses struct seq_files. This patch migrates the mgs +layer proc entries over to using seq_files. + +Signed-off-by: James Simmons <uja.ornl@gmail.com> +Change-Id: I1a12dd9b1fc8f139116a8f3a684956a5ba88f055 +--- + lustre/mgs/lproc_mgs.c | 202 +++++++++++++++++++++++----------------------- + lustre/mgs/mgs_handler.c | 5 +- + lustre/mgs/mgs_internal.h | 13 +-- + lustre/mgs/mgs_nids.c | 11 ++- + 4 files changed, 110 insertions(+), 121 deletions(-) + +diff --git a/lustre/mgs/lproc_mgs.c b/lustre/mgs/lproc_mgs.c +index ffa2d0d..f0ea956 100644 +--- a/lustre/mgs/lproc_mgs.c ++++ b/lustre/mgs/lproc_mgs.c +@@ -126,19 +126,110 @@ static int mgsself_srpc_seq_show(struct seq_file *seq, void *v) + + return 0; + } +- + LPROC_SEQ_FOPS_RO(mgsself_srpc); + ++static int mgs_live_seq_show(struct seq_file *seq, void *v) ++{ ++ struct fs_db *fsdb = seq->private; ++ struct mgs_tgt_srpc_conf *srpc_tgt; ++ int i; ++ ++ mutex_lock(&fsdb->fsdb_mutex); ++ ++ seq_printf(seq, "fsname: %s\n", fsdb->fsdb_name); ++ seq_printf(seq, "flags: %#lx gen: %d\n", ++ fsdb->fsdb_flags, fsdb->fsdb_gen); ++ for (i = 0; i < INDEX_MAP_SIZE * 8; i++) ++ if (test_bit(i, fsdb->fsdb_mdt_index_map)) ++ seq_printf(seq, "%s-MDT%04x\n", fsdb->fsdb_name, i); ++ for (i = 0; i < INDEX_MAP_SIZE * 8; i++) ++ if (test_bit(i, fsdb->fsdb_ost_index_map)) ++ seq_printf(seq, "%s-OST%04x\n", fsdb->fsdb_name, i); ++ ++ seq_printf(seq, "\nSecure RPC Config Rules:\n"); ++#if 0 ++ seq_printf(seq, "%s.%s=%s\n", fsdb->fsdb_name, ++ PARAM_SRPC_UDESC, fsdb->fsdb_srpc_fl_udesc ? "yes" : "no"); ++#endif ++ for (srpc_tgt = fsdb->fsdb_srpc_tgt; srpc_tgt; ++ srpc_tgt = srpc_tgt->mtsc_next) { ++ seq_show_srpc_rules(seq, srpc_tgt->mtsc_tgt, ++ &srpc_tgt->mtsc_rset); ++ } ++ seq_show_srpc_rules(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen); ++ ++ lprocfs_rd_ir_state(seq, fsdb); ++ ++ mutex_unlock(&fsdb->fsdb_mutex); ++ return 0; ++} ++ ++static ssize_t mgs_live_seq_write(struct file *file, const char *buf, ++ size_t len, loff_t *off) ++{ ++ struct seq_file *seq = file->private_data; ++ struct fs_db *fsdb = seq->private; ++ ssize_t rc; ++ ++ rc = lprocfs_wr_ir_state(file, buf, len, fsdb); ++ if (rc >= 0) ++ rc = len; ++ return rc; ++} ++LPROC_SEQ_FOPS(mgs_live); ++ ++int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb) ++{ ++ int rc; ++ ++ if (!mgs->mgs_proc_live) ++ return 0; ++ rc = lprocfs_seq_create(mgs->mgs_proc_live, fsdb->fsdb_name, 0644, ++ &mgs_live_fops, fsdb); ++ ++ return 0; ++} ++ ++int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb) ++{ ++ if (!mgs->mgs_proc_live) ++ return 0; ++ ++ /* didn't create the proc file for MGSSELF_NAME */ ++ if (!test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags)) ++ lprocfs_remove_proc_entry(fsdb->fsdb_name, mgs->mgs_proc_live); ++ return 0; ++} ++ ++LPROC_SEQ_FOPS_RO_TYPE(mgs, uuid); ++LPROC_SEQ_FOPS_RO_TYPE(mgs, num_exports); ++LPROC_SEQ_FOPS_RO_TYPE(mgs, hash); ++LPROC_SEQ_FOPS_WO_TYPE(mgs, evict_client); ++LPROC_SEQ_FOPS_RW_TYPE(mgs, ir_timeout); ++ ++struct lprocfs_seq_vars lprocfs_mgs_obd_vars[] = { ++ { .name = "uuid", ++ .fops = &mgs_uuid_fops }, ++ { .name = "num_exports", ++ .fops = &mgs_num_exports_fops }, ++ { .name = "hash_stats", ++ .fops = &mgs_hash_fops }, ++ { .name = "evict_client", ++ .fops = &mgs_evict_client_fops }, ++ { .name = "ir_timeout", ++ .fops = &mgs_ir_timeout_fops }, ++ { 0 } ++}; ++ + int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name) + { + struct obd_device *obd = mgs->mgs_obd; + struct obd_device *osd_obd = mgs->mgs_bottom->dd_lu_dev.ld_obd; + int osd_len = strlen(osd_name) - strlen("-osd"); + int rc; +- struct lprocfs_static_vars lvars; + +- lprocfs_mgs_init_vars(&lvars); +- rc = lprocfs_obd_setup(obd, lvars.obd_vars); ++ obd->obd_vars = lprocfs_mgs_obd_vars; ++ rc = lprocfs_seq_obd_setup(obd); + if (rc != 0) + GOTO(out, rc); + +@@ -152,17 +243,17 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name) + if (rc != 0) + GOTO(out, rc); + +- mgs->mgs_proc_live = lprocfs_register("live", obd->obd_proc_entry, +- NULL, NULL); ++ mgs->mgs_proc_live = lprocfs_seq_register("live", obd->obd_proc_entry, ++ NULL, NULL); + if (IS_ERR(mgs->mgs_proc_live)) { + rc = PTR_ERR(mgs->mgs_proc_live); + mgs->mgs_proc_live = NULL; + GOTO(out, rc); + } + +- obd->obd_proc_exports_entry = lprocfs_register("exports", +- obd->obd_proc_entry, +- NULL, NULL); ++ obd->obd_proc_exports_entry = lprocfs_seq_register("exports", ++ obd->obd_proc_entry, ++ NULL, NULL); + if (IS_ERR(obd->obd_proc_exports_entry)) { + rc = PTR_ERR(obd->obd_proc_exports_entry); + obd->obd_proc_exports_entry = NULL; +@@ -215,7 +306,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs) + + if (mgs->mgs_proc_live != NULL) { + /* Should be no live entries */ +- LASSERT(mgs->mgs_proc_live->subdir == NULL); + lprocfs_remove(&mgs->mgs_proc_live); + mgs->mgs_proc_live = NULL; + } +@@ -226,92 +316,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs) + lprocfs_free_md_stats(obd); + } + +-static int mgs_live_seq_show(struct seq_file *seq, void *v) +-{ +- struct fs_db *fsdb = seq->private; +- struct mgs_tgt_srpc_conf *srpc_tgt; +- int i; +- +- mutex_lock(&fsdb->fsdb_mutex); +- +- seq_printf(seq, "fsname: %s\n", fsdb->fsdb_name); +- seq_printf(seq, "flags: %#lx gen: %d\n", +- fsdb->fsdb_flags, fsdb->fsdb_gen); +- for (i = 0; i < INDEX_MAP_SIZE * 8; i++) +- if (test_bit(i, fsdb->fsdb_mdt_index_map)) +- seq_printf(seq, "%s-MDT%04x\n", fsdb->fsdb_name, i); +- for (i = 0; i < INDEX_MAP_SIZE * 8; i++) +- if (test_bit(i, fsdb->fsdb_ost_index_map)) +- seq_printf(seq, "%s-OST%04x\n", fsdb->fsdb_name, i); +- +- seq_printf(seq, "\nSecure RPC Config Rules:\n"); +-#if 0 +- seq_printf(seq, "%s.%s=%s\n", fsdb->fsdb_name, +- PARAM_SRPC_UDESC, fsdb->fsdb_srpc_fl_udesc ? "yes" : "no"); +-#endif +- for (srpc_tgt = fsdb->fsdb_srpc_tgt; srpc_tgt; +- srpc_tgt = srpc_tgt->mtsc_next) { +- seq_show_srpc_rules(seq, srpc_tgt->mtsc_tgt, +- &srpc_tgt->mtsc_rset); +- } +- seq_show_srpc_rules(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen); +- +- lprocfs_rd_ir_state(seq, fsdb); +- +- mutex_unlock(&fsdb->fsdb_mutex); +- return 0; +-} +- +-static ssize_t mgs_live_seq_write(struct file *file, const char *buf, +- size_t len, loff_t *off) +-{ +- struct seq_file *seq = file->private_data; +- struct fs_db *fsdb = seq->private; +- ssize_t rc; +- +- rc = lprocfs_wr_ir_state(file, buf, len, fsdb); +- if (rc >= 0) +- rc = len; +- return rc; +-} +-LPROC_SEQ_FOPS(mgs_live); +- +-int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb) +-{ +- int rc; +- +- if (!mgs->mgs_proc_live) +- return 0; +- rc = lprocfs_seq_create(mgs->mgs_proc_live, fsdb->fsdb_name, 0644, +- &mgs_live_fops, fsdb); +- +- return 0; +-} +- +-int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb) +-{ +- if (!mgs->mgs_proc_live) +- return 0; +- +- /* didn't create the proc file for MGSSELF_NAME */ +- if (!test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags)) +- lprocfs_remove_proc_entry(fsdb->fsdb_name, mgs->mgs_proc_live); +- return 0; +-} +- +-struct lprocfs_vars lprocfs_mgs_obd_vars[] = { +- { "uuid", lprocfs_rd_uuid, 0, 0 }, +- { "num_exports", lprocfs_rd_num_exports, 0, 0 }, +- { "hash_stats", lprocfs_obd_rd_hash, 0, 0 }, +- { "evict_client", 0, lprocfs_wr_evict_client, 0 }, +- { "ir_timeout", lprocfs_rd_ir_timeout, lprocfs_wr_ir_timeout, 0 }, +- { 0 } +-}; +- +-struct lprocfs_vars lprocfs_mgs_module_vars[] = { +- { 0 } +-}; +- + void mgs_counter_incr(struct obd_export *exp, int opcode) + { + lprocfs_counter_incr(exp->exp_obd->obd_stats, opcode); +@@ -329,10 +333,4 @@ void mgs_stats_counter_init(struct lprocfs_stats *stats) + lprocfs_counter_init(stats, LPROC_MGS_TARGET_REG, 0, "tgtreg", "reqs"); + lprocfs_counter_init(stats, LPROC_MGS_TARGET_DEL, 0, "tgtdel", "reqs"); + } +- +-void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars) +-{ +- lvars->module_vars = lprocfs_mgs_module_vars; +- lvars->obd_vars = lprocfs_mgs_obd_vars; +-} + #endif +diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c +index 5be9040..4bb842c 100644 +--- a/lustre/mgs/mgs_handler.c ++++ b/lustre/mgs/mgs_handler.c +@@ -1434,12 +1434,9 @@ static struct obd_ops mgs_obd_device_ops = { + + static int __init mgs_init(void) + { +- struct lprocfs_static_vars lvars; +- +- lprocfs_mgs_init_vars(&lvars); + return class_register_type(&mgs_obd_device_ops, NULL, NULL, + #ifndef HAVE_ONLY_PROCFS_SEQ +- lvars.module_vars, ++ NULL, + #endif + LUSTRE_MGS_NAME, &mgs_device_type); + } +diff --git a/lustre/mgs/mgs_internal.h b/lustre/mgs/mgs_internal.h +index ca2846e..d3baacd 100644 +--- a/lustre/mgs/mgs_internal.h ++++ b/lustre/mgs/mgs_internal.h +@@ -229,10 +229,10 @@ int mgs_get_ir_logs(struct ptlrpc_request *req); + int lprocfs_wr_ir_state(struct file *file, const char *buffer, + unsigned long count, void *data); + int lprocfs_rd_ir_state(struct seq_file *seq, void *data); +-int lprocfs_wr_ir_timeout(struct file *file, const char *buffer, +- unsigned long count, void *data); +-int lprocfs_rd_ir_timeout(char *page, char **start, off_t off, int count, +- int *eof, void *data); ++ssize_t ++lprocfs_ir_timeout_seq_write(struct file *file, const char *buffer, ++ size_t count, loff_t *off); ++int lprocfs_ir_timeout_seq_show(struct seq_file *seq, void *data); + void mgs_fsc_cleanup(struct obd_export *exp); + void mgs_fsc_cleanup_by_fsdb(struct fs_db *fsdb); + int mgs_fsc_attach(const struct lu_env *env, struct obd_export *exp, +@@ -250,7 +250,6 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name); + void lproc_mgs_cleanup(struct mgs_device *mgs); + int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb); + int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb); +-void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars); + #else + static inline int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name) + {return 0;} +@@ -260,10 +259,6 @@ static inline int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb) + {return 0;} + static inline int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb) + {return 0;} +-static void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars) +-{ +- memset(lvars, 0, sizeof(*lvars)); +-} + #endif + + /* mgs/lproc_mgs.c */ +diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c +index a2bae59..3248387 100644 +--- a/lustre/mgs/mgs_nids.c ++++ b/lustre/mgs/mgs_nids.c +@@ -838,15 +838,14 @@ int lprocfs_rd_ir_state(struct seq_file *seq, void *data) + return 0; + } + +-int lprocfs_rd_ir_timeout(char *page, char **start, off_t off, int count, +- int *eof, void *data) ++int lprocfs_ir_timeout_seq_show(struct seq_file *m, void *data) + { +- *eof = 1; +- return snprintf(page, count, "%d\n", ir_timeout); ++ return lprocfs_uint_seq_show(m, &ir_timeout); + } + +-int lprocfs_wr_ir_timeout(struct file *file, const char *buffer, +- unsigned long count, void *data) ++ssize_t ++lprocfs_ir_timeout_seq_write(struct file *file, const char *buffer, ++ size_t count, loff_t *off) + { + return lprocfs_wr_uint(file, buffer, count, &ir_timeout); + } +-- +1.8.5.3 + |