This patch adds support for an array of debugfs general (not soft_iface specific) attributes. With this change it will be possible to add more general attributes by simply appending them to the array without touching the rest of the code.
Reported-by: Marek Lindner lindner_marek@yahoo.de Signed-off-by: Antonio Quartulli ordex@autistici.org Acked-by: Sven Eckelmann sven@narfation.org ---
v2: - fixed kernel-doc v3: - added report-by
debugfs.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/debugfs.c b/debugfs.c index 3f679cb..6f58ddd 100644 --- a/debugfs.c +++ b/debugfs.c @@ -323,7 +323,17 @@ struct batadv_debuginfo batadv_debuginfo_##_name = { \ } \ };
+/* the following attributes are general and therefore they will be directly + * placed in the BATADV_DEBUGFS_SUBDIR subdirectory of debugfs + */ static BATADV_DEBUGINFO(routing_algos, S_IRUGO, batadv_algorithms_open); + +static struct batadv_debuginfo *batadv_general_debuginfos[] = { + &batadv_debuginfo_routing_algos, + NULL, +}; + +/* The following attributes are per soft interface */ static BATADV_DEBUGINFO(originators, S_IRUGO, batadv_originators_open); static BATADV_DEBUGINFO(gateways, S_IRUGO, batadv_gateways_open); static BATADV_DEBUGINFO(transtable_global, S_IRUGO, @@ -358,7 +368,7 @@ static struct batadv_debuginfo *batadv_mesh_debuginfos[] = {
void batadv_debugfs_init(void) { - struct batadv_debuginfo *bat_debug; + struct batadv_debuginfo **bat_debug; struct dentry *file;
batadv_debugfs = debugfs_create_dir(BATADV_DEBUGFS_SUBDIR, NULL); @@ -366,17 +376,23 @@ void batadv_debugfs_init(void) batadv_debugfs = NULL;
if (!batadv_debugfs) - goto out; + goto err;
- bat_debug = &batadv_debuginfo_routing_algos; - file = debugfs_create_file(bat_debug->attr.name, - S_IFREG | bat_debug->attr.mode, - batadv_debugfs, NULL, &bat_debug->fops); - if (!file) - pr_err("Can't add debugfs file: %s\n", bat_debug->attr.name); + for (bat_debug = batadv_general_debuginfos; *bat_debug; ++bat_debug) { + file = debugfs_create_file(((*bat_debug)->attr).name, + S_IFREG | ((*bat_debug)->attr).mode, + batadv_debugfs, NULL, + &(*bat_debug)->fops); + if (!file) { + pr_err("Can't add general debugfs file: %s\n", + ((*bat_debug)->attr).name); + goto err; + } + }
-out: return; +err: + debugfs_remove_recursive(batadv_debugfs); }
void batadv_debugfs_destroy(void)
Different versions of the batman-adv module may use the same compatibility version, but this is not understandable at runtime (the only way is to parse the kernel log and fetch the batman-adv advertisement message on loading). The user may want to know whether two nodes using different versions can communicate or not. For this purpose the module has to export this value through debugfs.
Reported-by: Moritz Warning moritzwarning@web.de Signed-off-by: Antonio Quartulli ordex@autistici.org --- debugfs.c | 12 ++++++++++++ main.c | 12 ++++++++++++ main.h | 1 + 3 files changed, 25 insertions(+)
diff --git a/debugfs.c b/debugfs.c index 6f58ddd..ae79b19 100644 --- a/debugfs.c +++ b/debugfs.c @@ -245,6 +245,16 @@ static int batadv_algorithms_open(struct inode *inode, struct file *file) return single_open(file, batadv_algo_seq_print_text, NULL); }
+/** + * batadv_compat_open - Prepare file handler for printing of the compat version + * @inode: inode which was opened + * @file: file handle to be initialized + */ +static int batadv_compat_open(struct inode *inode, struct file *file) +{ + return single_open(file, batadv_compat_seq_print_text, NULL); +} + static int batadv_originators_open(struct inode *inode, struct file *file) { struct net_device *net_dev = (struct net_device *)inode->i_private; @@ -327,9 +337,11 @@ struct batadv_debuginfo batadv_debuginfo_##_name = { \ * placed in the BATADV_DEBUGFS_SUBDIR subdirectory of debugfs */ static BATADV_DEBUGINFO(routing_algos, S_IRUGO, batadv_algorithms_open); +static BATADV_DEBUGINFO(compat_version, S_IRUGO, batadv_compat_open);
static struct batadv_debuginfo *batadv_general_debuginfos[] = { &batadv_debuginfo_routing_algos, + &batadv_debuginfo_compat_version, NULL, };
diff --git a/main.c b/main.c index dc33a0c..70797de 100644 --- a/main.c +++ b/main.c @@ -420,6 +420,18 @@ int batadv_algo_seq_print_text(struct seq_file *seq, void *offset) return 0; }
+/** + * batadv_compat_seq_print_text - print the compatibility version + * @seq: debugfs table seq_file struct + * @offset: not used + */ +int batadv_compat_seq_print_text(struct seq_file *seq, void *offset) +{ + seq_printf(seq, "%d\n", BATADV_COMPAT_VERSION); + + return 0; +} + static int batadv_param_set_ra(const char *val, const struct kernel_param *kp) { struct batadv_algo_ops *bat_algo_ops; diff --git a/main.h b/main.h index 4d92ce6..2dfcf8c 100644 --- a/main.h +++ b/main.h @@ -176,6 +176,7 @@ void batadv_recv_handler_unregister(uint8_t packet_type); int batadv_algo_register(struct batadv_algo_ops *bat_algo_ops); int batadv_algo_select(struct batadv_priv *bat_priv, char *name); int batadv_algo_seq_print_text(struct seq_file *seq, void *offset); +int batadv_compat_seq_print_text(struct seq_file *seq, void *offset);
/** * enum batadv_dbg_level - available log levels
On Tuesday, October 16, 2012 16:04:40 Antonio Quartulli wrote:
Different versions of the batman-adv module may use the same compatibility version, but this is not understandable at runtime (the only way is to parse the kernel log and fetch the batman-adv advertisement message on loading). The user may want to know whether two nodes using different versions can communicate or not. For this purpose the module has to export this value through debugfs.
Reported-by: Moritz Warning moritzwarning@web.de Signed-off-by: Antonio Quartulli ordex@autistici.org
debugfs.c | 12 ++++++++++++ main.c | 12 ++++++++++++ main.h | 1 + 3 files changed, 25 insertions(+)
Applied in revision 0679ec7.
Thanks, Marek
On Tuesday, October 16, 2012 16:04:39 Antonio Quartulli wrote:
This patch adds support for an array of debugfs general (not soft_iface specific) attributes. With this change it will be possible to add more general attributes by simply appending them to the array without touching the rest of the code.
Reported-by: Marek Lindner lindner_marek@yahoo.de Signed-off-by: Antonio Quartulli ordex@autistici.org Acked-by: Sven Eckelmann sven@narfation.org
v2:
- fixed kernel-doc
v3:
- added report-by
debugfs.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-)
Applied in revision dfb5f80.
Thanks, Marek
b.a.t.m.a.n@lists.open-mesh.org