When initialing przs with invalid data in buffer(no PERSISTENT_RAM_SIG), function call path is like this:
ramoops_init_prz -> | |-> persistent_ram_new -> persistent_ram_post_init -> persistent_ram_zap | |--> persistent_ram_zap As we can see, persistent_ram_zap() is called twice. We can avoid this by removing it in ramoops_init_prz(), and only call it in persistent_ram_post_init(). Signed-off-by: Peng Wang <wangpen...@xiaomi.com> --- fs/pstore/ram.c | 2 -- fs/pstore/ram_core.c | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c index f4fd2e7..d2a3932 100644 --- a/fs/pstore/ram.c +++ b/fs/pstore/ram.c @@ -639,8 +639,6 @@ static int ramoops_init_prz(const char *name, return err; } - persistent_ram_zap(*prz); - *paddr += sz; return 0; diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c index 0792595..3ab4f34 100644 --- a/fs/pstore/ram_core.c +++ b/fs/pstore/ram_core.c @@ -504,15 +504,14 @@ static int persistent_ram_post_init(struct persistent_ram_zone *prz, u32 sig, pr_debug("found existing buffer, size %zu, start %zu\n", buffer_size(prz), buffer_start(prz)); persistent_ram_save_old(prz); - return 0; } } else { pr_debug("no valid data in buffer (sig = 0x%08x)\n", prz->buffer->sig); + prz->buffer->sig = sig; } /* Rewind missing or invalid memory area. */ - prz->buffer->sig = sig; persistent_ram_zap(prz); return 0; -- 1.9.1