pstore/ram: Restore ecc information block
This was lost when proc/last_kmsg moved to pstore/console-ramoops. Signed-off-by: Arve Hjønnevåg <arve@android.com> Signed-off-by: John Stultz <john.stultz@linaro.org> Acked-by: Kees Cook <keescook@chromium.org> Signed-off-by: Anton Vorontsov <anton@enomsg.org>
This commit is contained in:
parent
c31ad081e8
commit
bd08ec33b5
2 changed files with 13 additions and 2 deletions
|
@ -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,
|
||||||
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,
|
||||||
{
|
{
|
||||||
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",
|
||||||
|
|
Loading…
Add table
Reference in a new issue