aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netconsole.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-11-04 13:48:30 -0500
committerDavid S. Miller <davem@davemloft.net>2013-11-04 13:48:30 -0500
commit394efd19d5fcae936261bd48e5b33b21897aacf8 (patch)
treec48cf3ddbb07fd87309f1abdf31a27c71330e587 /drivers/net/netconsole.c
parentf421436a591d34fa5279b54a96ac07d70250cc8d (diff)
parentbe408cd3e1fef73e9408b196a79b9934697fe3b1 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/emulex/benet/be.h drivers/net/netconsole.c net/bridge/br_private.h Three mostly trivial conflicts. The net/bridge/br_private.h conflict was a function signature (argument addition) change overlapping with the extern removals from Joe Perches. In drivers/net/netconsole.c we had one change adjusting a printk message whilst another changed "printk(KERN_INFO" into "pr_info(". Lastly, the emulex change was a new inline function addition overlapping with Joe Perches's extern removals. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/netconsole.c')
-rw-r--r--drivers/net/netconsole.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index a8ef4c4b94be..ba2f5e710af1 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -312,6 +312,7 @@ static ssize_t store_enabled(struct netconsole_target *nt,
312 const char *buf, 312 const char *buf,
313 size_t count) 313 size_t count)
314{ 314{
315 unsigned long flags;
315 int enabled; 316 int enabled;
316 int err; 317 int err;
317 318
@@ -326,9 +327,7 @@ static ssize_t store_enabled(struct netconsole_target *nt,
326 return -EINVAL; 327 return -EINVAL;
327 } 328 }
328 329
329 mutex_lock(&nt->mutex);
330 if (enabled) { /* 1 */ 330 if (enabled) { /* 1 */
331
332 /* 331 /*
333 * Skip netpoll_parse_options() -- all the attributes are 332 * Skip netpoll_parse_options() -- all the attributes are
334 * already configured via configfs. Just print them out. 333 * already configured via configfs. Just print them out.
@@ -336,19 +335,22 @@ static ssize_t store_enabled(struct netconsole_target *nt,
336 netpoll_print_options(&nt->np); 335 netpoll_print_options(&nt->np);
337 336
338 err = netpoll_setup(&nt->np); 337 err = netpoll_setup(&nt->np);
339 if (err) { 338 if (err)
340 mutex_unlock(&nt->mutex);
341 return err; 339 return err;
342 }
343
344 pr_info("network logging started\n");
345 340
341 pr_info("netconsole: network logging started\n");
346 } else { /* 0 */ 342 } else { /* 0 */
343 /* We need to disable the netconsole before cleaning it up
344 * otherwise we might end up in write_msg() with
345 * nt->np.dev == NULL and nt->enabled == 1
346 */
347 spin_lock_irqsave(&target_list_lock, flags);
348 nt->enabled = 0;
349 spin_unlock_irqrestore(&target_list_lock, flags);
347 netpoll_cleanup(&nt->np); 350 netpoll_cleanup(&nt->np);
348 } 351 }
349 352
350 nt->enabled = enabled; 353 nt->enabled = enabled;
351 mutex_unlock(&nt->mutex);
352 354
353 return strnlen(buf, count); 355 return strnlen(buf, count);
354} 356}
@@ -559,8 +561,10 @@ static ssize_t netconsole_target_attr_store(struct config_item *item,
559 struct netconsole_target_attr *na = 561 struct netconsole_target_attr *na =
560 container_of(attr, struct netconsole_target_attr, attr); 562 container_of(attr, struct netconsole_target_attr, attr);
561 563
564 mutex_lock(&nt->mutex);
562 if (na->store) 565 if (na->store)
563 ret = na->store(nt, buf, count); 566 ret = na->store(nt, buf, count);
567 mutex_unlock(&nt->mutex);
564 568
565 return ret; 569 return ret;
566} 570}