|
@@ -67,6 +67,8 @@ int console_printk[4] = {
|
|
|
DEFAULT_CONSOLE_LOGLEVEL, /* default_console_loglevel */
|
|
|
};
|
|
|
|
|
|
+static int saved_console_loglevel = -1;
|
|
|
+
|
|
|
/*
|
|
|
* Low level drivers may need that to know if they can schedule in
|
|
|
* their unblank() callback or not. So let's export it.
|
|
@@ -378,10 +380,15 @@ int do_syslog(int type, char __user *buf, int len)
|
|
|
logged_chars = 0;
|
|
|
break;
|
|
|
case 6: /* Disable logging to console */
|
|
|
+ if (saved_console_loglevel == -1)
|
|
|
+ saved_console_loglevel = console_loglevel;
|
|
|
console_loglevel = minimum_console_loglevel;
|
|
|
break;
|
|
|
case 7: /* Enable logging to console */
|
|
|
- console_loglevel = default_console_loglevel;
|
|
|
+ if (saved_console_loglevel != -1) {
|
|
|
+ console_loglevel = saved_console_loglevel;
|
|
|
+ saved_console_loglevel = -1;
|
|
|
+ }
|
|
|
break;
|
|
|
case 8: /* Set level of messages printed to console */
|
|
|
error = -EINVAL;
|
|
@@ -390,6 +397,8 @@ int do_syslog(int type, char __user *buf, int len)
|
|
|
if (len < minimum_console_loglevel)
|
|
|
len = minimum_console_loglevel;
|
|
|
console_loglevel = len;
|
|
|
+ /* Implicitly re-enable logging to console */
|
|
|
+ saved_console_loglevel = -1;
|
|
|
error = 0;
|
|
|
break;
|
|
|
case 9: /* Number of chars in the log buffer */
|