]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journald: make reading /dev/kmsg optional (#6362)
authorSusant Sahani <ssahani@users.noreply.github.com>
Sat, 15 Jul 2017 11:57:52 +0000 (11:57 +0000)
committerLennart Poettering <lennart@poettering.net>
Sat, 15 Jul 2017 11:57:52 +0000 (13:57 +0200)
Closes #6022

man/journald.conf.xml
src/journal/journald-gperf.gperf
src/journal/journald-kmsg.c
src/journal/journald-server.c
src/journal/journald-server.h

index 209d857234e3987376baa743b14628bdc60249aa..e4dc5862d9051cd255983ab741307621d3bf8a58 100644 (file)
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>ReadKMsg=</varname></term>
+
+        <listitem><para>Takes a boolean value. If enabled (the
+        default), journal reads <filename>/dev/kmsg</filename>
+        messages generated by the kernel.</para></listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><varname>TTYPath=</varname></term>
 
index 654fd76a4bfb821a8738a430db7c6c785db2074f..522ad30cf390287afc849cc3f794d11369e86649 100644 (file)
@@ -18,6 +18,7 @@ struct ConfigPerfItem;
 Journal.Storage,            config_parse_storage,    0, offsetof(Server, storage)
 Journal.Compress,           config_parse_bool,       0, offsetof(Server, compress)
 Journal.Seal,               config_parse_bool,       0, offsetof(Server, seal)
+Journal.ReadKMsg,           config_parse_bool,       0, offsetof(Server, read_kmsg)
 Journal.SyncIntervalSec,    config_parse_sec,        0, offsetof(Server, sync_interval_usec)
 # The following is a legacy name for compatibility
 Journal.RateLimitInterval,  config_parse_sec,        0, offsetof(Server, rate_limit_interval)
index 8afaec0ced1a64a22d48a1e8ef9ad880d61db459..70ea5620624dd4dfdc700592ec6c23f0658ae7b0 100644 (file)
@@ -397,17 +397,26 @@ static int dispatch_dev_kmsg(sd_event_source *es, int fd, uint32_t revents, void
 }
 
 int server_open_dev_kmsg(Server *s) {
+        mode_t mode;
         int r;
 
         assert(s);
 
-        s->dev_kmsg_fd = open("/dev/kmsg", O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+        if (s->read_kmsg)
+                mode = O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY;
+        else
+                mode = O_WRONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY;
+
+        s->dev_kmsg_fd = open("/dev/kmsg", mode);
         if (s->dev_kmsg_fd < 0) {
                 log_full(errno == ENOENT ? LOG_DEBUG : LOG_WARNING,
                          "Failed to open /dev/kmsg, ignoring: %m");
                 return 0;
         }
 
+        if (!s->read_kmsg)
+                return 0;
+
         r = sd_event_add_io(s->event, &s->dev_kmsg_event_source, s->dev_kmsg_fd, EPOLLIN, dispatch_dev_kmsg, s);
         if (r < 0) {
 
index 05a1254d4a95f41c4010c86556712290bc7aa24e..6eb19e88669c1e4105626e37cf1f5c519c46ad4a 100644 (file)
@@ -1915,6 +1915,7 @@ int server_init(Server *s) {
         s->syslog_fd = s->native_fd = s->stdout_fd = s->dev_kmsg_fd = s->audit_fd = s->hostname_fd = s->notify_fd = -1;
         s->compress = true;
         s->seal = true;
+        s->read_kmsg = true;
 
         s->watchdog_usec = USEC_INFINITY;
 
@@ -2051,7 +2052,7 @@ int server_init(Server *s) {
         if (r < 0)
                 return r;
 
-        /* /dev/ksmg */
+        /* /dev/kmsg */
         r = server_open_dev_kmsg(s);
         if (r < 0)
                 return r;
index 203460c50ac756cfda5bf264ea924eac63af87f5..882bcead8d72888146e4b58b2063cb8930b7ec36 100644 (file)
@@ -112,6 +112,7 @@ struct Server {
 
         bool compress;
         bool seal;
+        bool read_kmsg;
 
         bool forward_to_kmsg;
         bool forward_to_syslog;