summaryrefslogtreecommitdiffstats
path: root/fs/pstore
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2017-05-19 15:29:10 -0700
committerKees Cook <keescook@chromium.org>2017-05-31 10:13:44 -0700
commitc7f3c595f6ff7a1cfbf7ac782722bf5173e27775 (patch)
tree7adaa468343cb5d9a45ce738d1fee91ca22dc489 /fs/pstore
parente581ca813a40a4ee53c862d8f6303f486c4b4c34 (diff)
downloadlinux-c7f3c595f6ff7a1cfbf7ac782722bf5173e27775.tar.gz
linux-c7f3c595f6ff7a1cfbf7ac782722bf5173e27775.tar.bz2
linux-c7f3c595f6ff7a1cfbf7ac782722bf5173e27775.zip
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/pstore')
-rw-r--r--fs/pstore/platform.c6
-rw-r--r--fs/pstore/ram.c16
2 files changed, 11 insertions, 11 deletions
diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
index 7798041f3fba..96fbff7b87c8 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 5cb022c8cd33..7125b398d312 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(&timestamp)) {
- 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;