[02/10] batman-adv: Suppress debugfs entries for netns's

Message ID 1461875848-11720-3-git-send-email-andrew@lunn.ch (mailing list archive)
State Superseded, archived
Delegated to: Marek Lindner
Headers

Commit Message

Andrew Lunn April 28, 2016, 8:37 p.m. UTC
  Debugfs is not netns aware. It thus has problems when the same
interface name exists in multiple network name spaces.

Work around this by not creating entries for interfaces in name spaces
other than the default name space. This means meshes in network
namespaces cannot be managed via debugfs, but there will soon be a
netlink interface which is netns aware.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
 net/batman-adv/debugfs.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)
  

Comments

Sven Eckelmann April 29, 2016, 6:07 p.m. UTC | #1
On Thursday 28 April 2016 22:37:20 Andrew Lunn wrote:
> Debugfs is not netns aware. It thus has problems when the same
> interface name exists in multiple network name spaces.
> 
> Work around this by not creating entries for interfaces in name spaces
> other than the default name space. This means meshes in network
> namespaces cannot be managed via debugfs, but there will soon be a
> netlink interface which is netns aware.
> 
> Signed-off-by: Andrew Lunn <andrew@lunn.ch>
> ---
[...]
> -__printf(2, 3)
> +_printf(2, 3)
>  static int batadv_fdebug_log(struct batadv_priv_debug_log *debug_log,
>  			     const char *fmt, ...)
>  {

I would really like to give this patch a Reviewed-by but this part seems to be
an accident. It causes build errors:

    $ make CONFIG_BATMAN_ADV_DEBUG=y KERNELPATH=/build_test/linux-build/linux-4.5
    [...]
      CC [M]  /tmp/qemu-batman/batman-adv/net/batman-adv/debugfs.o
    /tmp/qemu-batman/batman-adv/net/batman-adv/debugfs.c:81:9: error: expected declaration specifiers or ‘...’ before numeric constant
     _printf(2, 3)
             ^
    /tmp/qemu-batman/batman-adv/net/batman-adv/debugfs.c:81:12: error: expected declaration specifiers or ‘...’ before numeric constant
     _printf(2, 3)
                ^
    /tmp/qemu-batman/batman-adv/net/batman-adv/debugfs.c: In function ‘batadv_debug_log’:
    /tmp/qemu-batman/batman-adv/net/batman-adv/debugfs.c:114:2: error: implicit declaration of function ‘batadv_fdebug_log’ [-Werror=implicit-function-declaration]
      batadv_fdebug_log(bat_priv->debug_log, "[%10u] %s",
      ^
    /tmp/qemu-batman/batman-adv/net/batman-adv/debugfs.c: At top level:
    /tmp/qemu-batman/batman-adv/net/batman-adv/debugfs.c:68:13: warning: ‘batadv_emit_log_char’ defined but not used [-Wunused-function]
     static void batadv_emit_log_char(struct batadv_priv_debug_log *debug_log,
                 ^

Kind regards,
	Sven
  
Andrew Lunn April 29, 2016, 6:53 p.m. UTC | #2
On Fri, Apr 29, 2016 at 08:07:18PM +0200, Sven Eckelmann wrote:
> On Thursday 28 April 2016 22:37:20 Andrew Lunn wrote:
> > Debugfs is not netns aware. It thus has problems when the same
> > interface name exists in multiple network name spaces.
> > 
> > Work around this by not creating entries for interfaces in name spaces
> > other than the default name space. This means meshes in network
> > namespaces cannot be managed via debugfs, but there will soon be a
> > netlink interface which is netns aware.
> > 
> > Signed-off-by: Andrew Lunn <andrew@lunn.ch>
> > ---
> [...]
> > -__printf(2, 3)
> > +_printf(2, 3)
> >  static int batadv_fdebug_log(struct batadv_priv_debug_log *debug_log,
> >  			     const char *fmt, ...)
> >  {
> 
> I would really like to give this patch a Reviewed-by but this part seems to be
> an accident.

Agreed. This should not be changed.

	Andrew
  

Patch

diff --git a/net/batman-adv/debugfs.c b/net/batman-adv/debugfs.c
index 9529004..c6dd52a 100644
--- a/net/batman-adv/debugfs.c
+++ b/net/batman-adv/debugfs.c
@@ -78,7 +78,7 @@  static void batadv_emit_log_char(struct batadv_priv_debug_log *debug_log,
 		debug_log->log_start = debug_log->log_end - batadv_log_buff_len;
 }
 
-__printf(2, 3)
+_printf(2, 3)
 static int batadv_fdebug_log(struct batadv_priv_debug_log *debug_log,
 			     const char *fmt, ...)
 {
@@ -495,12 +495,16 @@  void batadv_debugfs_destroy(void)
  */
 int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface)
 {
+	struct net *net = dev_net(hard_iface->net_dev);
 	struct batadv_debuginfo **bat_debug;
 	struct dentry *file;
 
 	if (!batadv_debugfs)
 		goto out;
 
+	if (net != &init_net)
+		return 0;
+
 	hard_iface->debug_dir = debugfs_create_dir(hard_iface->net_dev->name,
 						   batadv_debugfs);
 	if (!hard_iface->debug_dir)
@@ -531,6 +535,11 @@  out:
  */
 void batadv_debugfs_del_hardif(struct batadv_hard_iface *hard_iface)
 {
+	struct net *net = dev_net(hard_iface->net_dev);
+
+	if (net != &init_net)
+		return;
+
 	if (batadv_debugfs) {
 		debugfs_remove_recursive(hard_iface->debug_dir);
 		hard_iface->debug_dir = NULL;
@@ -541,11 +550,15 @@  int batadv_debugfs_add_meshif(struct net_device *dev)
 {
 	struct batadv_priv *bat_priv = netdev_priv(dev);
 	struct batadv_debuginfo **bat_debug;
+	struct net *net = dev_net(dev);
 	struct dentry *file;
 
 	if (!batadv_debugfs)
 		goto out;
 
+	if (net != &init_net)
+		return 0;
+
 	bat_priv->debug_dir = debugfs_create_dir(dev->name, batadv_debugfs);
 	if (!bat_priv->debug_dir)
 		goto out;
@@ -582,6 +595,10 @@  out:
 void batadv_debugfs_del_meshif(struct net_device *dev)
 {
 	struct batadv_priv *bat_priv = netdev_priv(dev);
+	struct net *net = dev_net(dev);
+
+	if (net != &init_net)
+		return;
 
 	batadv_debug_log_cleanup(bat_priv);