This changes the ftrace record merging code to be agnostic of pstore/ram, as the first step to making it available as a generic routine for other backends to use, such as pstore/zone. Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx> --- fs/pstore/ram.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c index 7f956053f4e5..672ad80646c5 100644 --- a/fs/pstore/ram.c +++ b/fs/pstore/ram.c @@ -172,8 +172,9 @@ static bool prz_ok(struct persistent_ram_zone *prz) persistent_ram_ecc_string(prz, NULL, 0)); } -static ssize_t ftrace_log_combine(struct persistent_ram_zone *dest, - struct persistent_ram_zone *src) +static +ssize_t ftrace_log_combine(char **dest_log, size_t *dest_log_size, + const char *src_log, size_t src_log_size) { size_t dest_size, src_size, total, dest_off, src_off; size_t dest_idx = 0, src_idx = 0, merged_idx = 0; @@ -181,19 +182,19 @@ static ssize_t ftrace_log_combine(struct persistent_ram_zone *dest, struct pstore_ftrace_record *drec, *srec, *mrec; size_t record_size = sizeof(struct pstore_ftrace_record); - dest_off = dest->old_log_size % record_size; - dest_size = dest->old_log_size - dest_off; + dest_off = *dest_log_size % record_size; + dest_size = *dest_log_size - dest_off; - src_off = src->old_log_size % record_size; - src_size = src->old_log_size - src_off; + src_off = src_log_size % record_size; + src_size = src_log_size - src_off; total = dest_size + src_size; merged_buf = kmalloc(total, GFP_KERNEL); if (!merged_buf) return -ENOMEM; - drec = (struct pstore_ftrace_record *)(dest->old_log + dest_off); - srec = (struct pstore_ftrace_record *)(src->old_log + src_off); + drec = (struct pstore_ftrace_record *)(*dest_log + dest_off); + srec = (struct pstore_ftrace_record *)(src_log + src_off); mrec = (struct pstore_ftrace_record *)(merged_buf); while (dest_size > 0 && src_size > 0) { @@ -217,9 +218,9 @@ static ssize_t ftrace_log_combine(struct persistent_ram_zone *dest, src_size -= record_size; } - kfree(dest->old_log); - dest->old_log = merged_buf; - dest->old_log_size = total; + kfree(*dest_log); + *dest_log = merged_buf; + *dest_log_size = total; return 0; } @@ -295,7 +296,11 @@ static ssize_t ramoops_pstore_read(struct pstore_record *record) tmp_prz->corrected_bytes += prz_next->corrected_bytes; tmp_prz->bad_blocks += prz_next->bad_blocks; - size = ftrace_log_combine(tmp_prz, prz_next); + + size = ftrace_log_combine(&tmp_prz->old_log, + &tmp_prz->old_log_size, + prz_next->old_log, + prz_next->old_log_size); if (size) goto out; } -- 2.20.1 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/