diff options
author | Kees Cook <keescook@chromium.org> | 2017-05-19 15:29:10 -0700 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2017-05-31 10:13:44 -0700 |
commit | c7f3c595f6ff7a1cfbf7ac782722bf5173e27775 (patch) | |
tree | 7adaa468343cb5d9a45ce738d1fee91ca22dc489 /fs | |
parent | e581ca813a40a4ee53c862d8f6303f486c4b4c34 (diff) | |
download | op-kernel-dev-c7f3c595f6ff7a1cfbf7ac782722bf5173e27775.zip op-kernel-dev-c7f3c595f6ff7a1cfbf7ac782722bf5173e27775.tar.gz |
pstore: Populate pstore record->time field
The current time will be initially available in the record->time field
for all pstore_read() and pstore_write() calls. Backends can either
update the field during read(), or use the field during write() instead
of fetching time themselves.
Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/pstore/platform.c | 6 | ||||
-rw-r--r-- | fs/pstore/ram.c | 16 |
2 files changed, 11 insertions, 11 deletions
diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index 7798041..96fbff7 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -480,6 +480,12 @@ void pstore_record_init(struct pstore_record *record, memset(record, 0, sizeof(*record)); record->psi = psinfo; + + /* Report zeroed timestamp if called before timekeeping has resumed. */ + if (__getnstimeofday(&record->time)) { + record->time.tv_sec = 0; + record->time.tv_nsec = 0; + } } /* diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c index 5cb022c..7125b39 100644 --- a/fs/pstore/ram.c +++ b/fs/pstore/ram.c @@ -27,7 +27,6 @@ #include <linux/module.h> #include <linux/version.h> #include <linux/pstore.h> -#include <linux/time.h> #include <linux/io.h> #include <linux/ioport.h> #include <linux/platform_device.h> @@ -356,20 +355,15 @@ out: } static size_t ramoops_write_kmsg_hdr(struct persistent_ram_zone *prz, - bool compressed) + struct pstore_record *record) { char *hdr; - struct timespec timestamp; size_t len; - /* Report zeroed timestamp if called before timekeeping has resumed. */ - if (__getnstimeofday(×tamp)) { - timestamp.tv_sec = 0; - timestamp.tv_nsec = 0; - } hdr = kasprintf(GFP_ATOMIC, RAMOOPS_KERNMSG_HDR "%lu.%lu-%c\n", - (long)timestamp.tv_sec, (long)(timestamp.tv_nsec / 1000), - compressed ? 'C' : 'D'); + record->time.tv_sec, + record->time.tv_nsec / 1000, + record->compressed ? 'C' : 'D'); WARN_ON_ONCE(!hdr); len = hdr ? strlen(hdr) : 0; persistent_ram_write(prz, hdr, len); @@ -440,7 +434,7 @@ static int notrace ramoops_pstore_write(struct pstore_record *record) prz = cxt->dprzs[cxt->dump_write_cnt]; /* Build header and append record contents. */ - hlen = ramoops_write_kmsg_hdr(prz, record->compressed); + hlen = ramoops_write_kmsg_hdr(prz, record); size = record->size; if (size + hlen > prz->buffer_size) size = prz->buffer_size - hlen; |