Commit bd08ec33 authored by Arve Hjønnevåg's avatar Arve Hjønnevåg Committed by Anton Vorontsov

pstore/ram: Restore ecc information block

This was lost when proc/last_kmsg moved to pstore/console-ramoops.
Signed-off-by: default avatarArve Hjønnevåg <arve@android.com>
Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
Acked-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarAnton Vorontsov <anton@enomsg.org>
parent c31ad081
...@@ -136,6 +136,7 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type, ...@@ -136,6 +136,7 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type,
char **buf, struct pstore_info *psi) char **buf, struct pstore_info *psi)
{ {
ssize_t size; ssize_t size;
ssize_t ecc_notice_size;
struct ramoops_context *cxt = psi->data; struct ramoops_context *cxt = psi->data;
struct persistent_ram_zone *prz; struct persistent_ram_zone *prz;
...@@ -156,11 +157,18 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type, ...@@ -156,11 +157,18 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type,
time->tv_nsec = 0; time->tv_nsec = 0;
size = persistent_ram_old_size(prz); size = persistent_ram_old_size(prz);
*buf = kmemdup(persistent_ram_old(prz), size, GFP_KERNEL);
/* ECC correction notice */
ecc_notice_size = persistent_ram_ecc_string(prz, NULL, 0);
*buf = kmalloc(size + ecc_notice_size + 1, GFP_KERNEL);
if (*buf == NULL) if (*buf == NULL)
return -ENOMEM; return -ENOMEM;
return size; memcpy(*buf, persistent_ram_old(prz), size);
persistent_ram_ecc_string(prz, *buf + size, ecc_notice_size + 1);
return size + ecc_notice_size;
} }
static size_t ramoops_write_kmsg_hdr(struct persistent_ram_zone *prz) static size_t ramoops_write_kmsg_hdr(struct persistent_ram_zone *prz)
......
...@@ -235,6 +235,9 @@ ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz, ...@@ -235,6 +235,9 @@ ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz,
{ {
ssize_t ret; ssize_t ret;
if (!prz->ecc_info.ecc_size)
return 0;
if (prz->corrected_bytes || prz->bad_blocks) if (prz->corrected_bytes || prz->bad_blocks)
ret = snprintf(str, len, "" ret = snprintf(str, len, ""
"\n%d Corrected bytes, %d unrecoverable blocks\n", "\n%d Corrected bytes, %d unrecoverable blocks\n",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment