Re: [PATCH v2 -mm 9/9] netconsole: Support dynamic reconfiguration using configfs

2007-07-13 Thread KII Keiichi
Hi Satyam,

 From: Satyam Sharma [EMAIL PROTECTED]
 
 [9/9] netconsole: Support dynamic reconfiguration using configfs
 
 This patch introduces support for dynamic reconfiguration (adding, removing
 and/or modifying parameters of netconsole targets at runtime) using a
 userspace interface exported via configfs. Documentation is also updated
 accordingly.
 
 Issues and brief design overview:
 
 (1) Kernel-initiated creation / destruction of kernel objects is not
 possible with configfs -- the lifetimes of the config items is managed
 exclusively from userspace. But netconsole must support boot/module params
 too, and these are parsed in kernel and hence netpolls must be setup from
 the kernel. Joel Becker suggested to separately manage the lifetimes of
 the two kinds of netconsole_target objects -- those created via configfs
 mkdir(2) from userspace and those specified from the boot/module option
 string. This adds complexity and some redundancy here and also means that
 boot/module param-created targets are not exposed through the configfs
 namespace (and hence cannot be updated / destroyed dynamically). However,
 this saves us from locking / refcounting complexities that would need to
 be introduced in configfs to support kernel-initiated item creation /
 destroy there. Also, this is similar to present behaviour in any case so
 not really a problem.
 
 (2) In configfs, item creation takes place in the call chain of the mkdir(2)
 syscall in the driver subsystem. If we used an ioctl(2) to create / destroy
 objects from userspace, the special userspace program is able to fill out
 the structure to be passed into the ioctl and hence specify attributes such
 as local interface that are required at the time we set up the netpoll.
 For configfs, this information is not available at the time of mkdir(2).
 So, we keep all newly-created targets (via configfs) disabled by default.
 The user is expected to set various attributes appropriately (including the
 local network interface if required) and then write(2) 1 to the enabled
 attribute. Thus, netpoll_setup() is then called on the set parameters in the
 context of _this_ write(2) on the enabled attribute itself. This design
 enables the user to reconfigure existing netconsole targets at runtime to
 be attached to newly-come-up interfaces that may not have existed when
 netconsole was loaded or when the targets were actually created. This all
 enables us to get rid of custom ioctls.
 
 (3) Ultra-paranoid configfs attribute show() and store() operations, with
 sanity and input range checking, using only safe string primitives, and
 compliant with the recommendations in Documentation/filesystems/sysfs.txt.
 
 (4) A new function netpoll_print_options() is created in the netpoll API,
 that just prints out the configured parameters for a netpoll structure.
 netpoll_parse_options() is modified to use that and it is also exported to
 be used from netconsole.
 
 Signed-off-by: Satyam Sharma [EMAIL PROTECTED]
 Cc: Keiichi Kii [EMAIL PROTECTED]
 
Acked-by: Keiichi Kii [EMAIL PROTECTED]

Thanks
--
Keiichi KII
NEC Corporation OSS Platform Development Division
E-mail: [EMAIL PROTECTED]


-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 -mm 9/9] netconsole: Support dynamic reconfiguration using configfs

2007-07-12 Thread Keiichi KII
Hi Satyam,

  struct netconsole_target {
   struct list_headlist;
 +#ifdef   CONFIG_NETCONSOLE_DYNAMIC
 + struct config_item  item;
 + int enabled;
 +#endif
   struct netpoll  np;
  };

If CONFIG_NETCONSOLE_DYNAMIC is unset, we can't access to the enabled member.
So, the compile errors occur because the following functions make use of 
the above one.

 +/* Allocate new target (from boot/module param) and setup netpoll for it */
 +static struct netconsole_target *alloc_param_target(char *target_config)
  {
   int err = -ENOMEM;
   struct netconsole_target *nt;
  
 - /* Allocate and initialize with defaults */
 + /*
 +  * Allocate and initialize with defaults.
 +  * Note that these targets get their config_item fields zeroed-out.
 +  */
   nt = kzalloc(sizeof(*nt), GFP_KERNEL);
   if (!nt) {
   printk(KERN_ERR netconsole: failed to allocate memory\n);
 @@ -106,6 +188,8 @@ static struct netconsole_target *alloc_t
   if (err)
   goto fail;
  
 + nt-enabled = 1;
 +
   return nt;
  
  fail:
 @@ -113,13 +197,469 @@ fail:
   return ERR_PTR(err);
  }


 @@ -169,7 +711,8 @@ static void write_msg(struct console *co
  
   spin_lock_irqsave(target_list_lock, flags);
   list_for_each_entry(nt, target_list, list) {
 - if (netif_running(nt-np.dev)) {
 + netconsole_target_get(nt);
 + if (nt-enabled  netif_running(nt-np.dev)) {
   /*
* We nest this inside the for-each-target loop above
* so that we're able to get as much logging out to
 @@ -184,6 +727,7 @@ static void write_msg(struct console *co
   left -= frag;
   }
   }
 + netconsole_target_put(nt);
   }
   spin_unlock_irqrestore(target_list_lock, flags);
  }

I created the following patch for performing some tests.
If there is nothing wrong with the patch, I'm going to continue to test.

Signed-off-by: Keiichi Kii [EMAIL PROTECTED]

Index: mm/drivers/net/netconsole.c
===
--- mm.orig/drivers/net/netconsole.c
+++ mm/drivers/net/netconsole.c
@@ -94,8 +94,8 @@ struct netconsole_target {
struct list_headlist;
 #ifdef CONFIG_NETCONSOLE_DYNAMIC
struct config_item  item;
-   int enabled;
 #endif
+   int enabled;
struct netpoll  np;
 };


Thanks
-- 
Keiichi KII
NEC Corporation OSS Platform Development Division
E-mail: [EMAIL PROTECTED]
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 -mm 9/9] netconsole: Support dynamic reconfiguration using configfs

2007-07-12 Thread Satyam Sharma
Hi,

On Thu, 12 Jul 2007, Keiichi KII wrote:
 Hi Satyam,
 
   struct netconsole_target {
  struct list_headlist;
  +#ifdef CONFIG_NETCONSOLE_DYNAMIC
  +   struct config_item  item;
  +   int enabled;
  +#endif
  struct netpoll  np;
   };
 
 If CONFIG_NETCONSOLE_DYNAMIC is unset, we can't access to the enabled 
 member.
 So, the compile errors occur because the following functions make use of 
 the above one.

Gargh, yes.

 Signed-off-by: Keiichi Kii [EMAIL PROTECTED]
 
 Index: mm/drivers/net/netconsole.c
 ===
 --- mm.orig/drivers/net/netconsole.c
 +++ mm/drivers/net/netconsole.c
 @@ -94,8 +94,8 @@ struct netconsole_target {
 struct list_headlist;
  #ifdef CONFIG_NETCONSOLE_DYNAMIC
 struct config_item  item;
 -   int enabled;
  #endif
 +   int enabled;
 struct netpoll  np;
  };

Yup, enabled should be out of CONFIG_NETCONSOLE_DYNAMIC. I'll include this
change in the next version as well.

Thanks,
Satyam
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 -mm 9/9] netconsole: Support dynamic reconfiguration using configfs

2007-07-10 Thread Satyam Sharma
From: Satyam Sharma [EMAIL PROTECTED]

[9/9] netconsole: Support dynamic reconfiguration using configfs

This patch introduces support for dynamic reconfiguration (adding, removing
and/or modifying parameters of netconsole targets at runtime) using a
userspace interface exported via configfs. Documentation is also updated
accordingly.

Issues and brief design overview:

(1) Kernel-initiated creation / destruction of kernel objects is not
possible with configfs -- the lifetimes of the config items is managed
exclusively from userspace. But netconsole must support boot/module params
too, and these are parsed in kernel and hence netpolls must be setup from
the kernel. Joel Becker suggested to separately manage the lifetimes of
the two kinds of netconsole_target objects -- those created via configfs
mkdir(2) from userspace and those specified from the boot/module option
string. This adds complexity and some redundancy here and also means that
boot/module param-created targets are not exposed through the configfs
namespace (and hence cannot be updated / destroyed dynamically). However,
this saves us from locking / refcounting complexities that would need to
be introduced in configfs to support kernel-initiated item creation /
destroy there. Also, this is similar to present behaviour in any case so
not really a problem.

(2) In configfs, item creation takes place in the call chain of the mkdir(2)
syscall in the driver subsystem. If we used an ioctl(2) to create / destroy
objects from userspace, the special userspace program is able to fill out
the structure to be passed into the ioctl and hence specify attributes such
as local interface that are required at the time we set up the netpoll.
For configfs, this information is not available at the time of mkdir(2).
So, we keep all newly-created targets (via configfs) disabled by default.
The user is expected to set various attributes appropriately (including the
local network interface if required) and then write(2) 1 to the enabled
attribute. Thus, netpoll_setup() is then called on the set parameters in the
context of _this_ write(2) on the enabled attribute itself. This design
enables the user to reconfigure existing netconsole targets at runtime to
be attached to newly-come-up interfaces that may not have existed when
netconsole was loaded or when the targets were actually created. This all
enables us to get rid of custom ioctls.

(3) Ultra-paranoid configfs attribute show() and store() operations, with
sanity and input range checking, using only safe string primitives, and
compliant with the recommendations in Documentation/filesystems/sysfs.txt.

(4) A new function netpoll_print_options() is created in the netpoll API,
that just prints out the configured parameters for a netpoll structure.
netpoll_parse_options() is modified to use that and it is also exported to
be used from netconsole.

Signed-off-by: Satyam Sharma [EMAIL PROTECTED]
Cc: Keiichi Kii [EMAIL PROTECTED]

---

 Documentation/networking/netconsole.txt |   68 +++
 drivers/net/Kconfig |   10
 drivers/net/netconsole.c|  607 ++--
 include/linux/netpoll.h |1
 net/core/netpoll.c  |   44 +-
 5 files changed, 686 insertions(+), 44 deletions(-)

---

diff -ruNp a/Documentation/networking/netconsole.txt 
b/Documentation/networking/netconsole.txt
--- a/Documentation/networking/netconsole.txt   2007-07-10 08:56:16.0 
+0530
+++ b/Documentation/networking/netconsole.txt   2007-07-10 11:07:48.0 
+0530
@@ -3,6 +3,10 @@ started by Ingo Molnar [EMAIL PROTECTED]
 2.6 port and netpoll api by Matt Mackall [EMAIL PROTECTED], Sep 9 2003
 
 Please send bug reports to Matt Mackall [EMAIL PROTECTED]
+and Satyam Sharma [EMAIL PROTECTED]
+
+Introduction:
+=
 
 This module logs kernel printk messages over UDP allowing debugging of
 problem where disk logging fails and serial consoles are impractical.
@@ -13,6 +17,9 @@ the specified interface as soon as possi
 capture of early kernel panics, it does capture most of the boot
 process.
 
+Sender and receiver configuration:
+==
+
 It takes a string configuration parameter netconsole in the
 following format:
 
@@ -46,6 +53,67 @@ address.
 
 The remote host can run either 'netcat -u -l -p port' or syslogd.
 
+Dynamic reconfiguration:
+
+
+Dynamic reconfigurability is a useful addition to netconsole that enables
+remote logging targets to be dynamically added, removed, or have their
+parameters reconfigured at runtime from a configfs-based userspace interface.
+[ Note that the parameters of netconsole targets that were specified/created
+from the boot/module option are not exposed via this interface, and hence
+cannot be modified dynamically. ]
+
+To include this feature, select CONFIG_NETCONSOLE_DYNAMIC when building the
+netconsole module (or kernel, if netconsole is built-in).
+
+Some examples