]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/pstore/ram.c
Merge branch 'cpufreq/arm/linux-next' of git://git.kernel.org/pub/scm/linux/kernel...
[linux.git] / fs / pstore / ram.c
index 8caff834f002668eb79d84d2adf8c108dbc2c640..487ee39b438a75f12631654e3b6cae6aa4f65cff 100644 (file)
@@ -407,6 +407,17 @@ static int notrace ramoops_pstore_write(struct pstore_record *record)
 
        prz = cxt->dprzs[cxt->dump_write_cnt];
 
+       /*
+        * Since this is a new crash dump, we need to reset the buffer in
+        * case it still has an old dump present. Without this, the new dump
+        * will get appended, which would seriously confuse anything trying
+        * to check dump file contents. Specifically, ramoops_read_kmsg_hdr()
+        * expects to find a dump header in the beginning of buffer data, so
+        * we must to reset the buffer values, in order to ensure that the
+        * header will be written to the beginning of the buffer.
+        */
+       persistent_ram_zap(prz);
+
        /* Build header and append record contents. */
        hlen = ramoops_write_kmsg_hdr(prz, record);
        if (!hlen)
@@ -577,6 +588,7 @@ static int ramoops_init_przs(const char *name,
                        dev_err(dev, "failed to request %s mem region (0x%zx@0x%llx): %d\n",
                                name, record_size,
                                (unsigned long long)*paddr, err);
+                       kfree(label);
 
                        while (i > 0) {
                                i--;
@@ -622,6 +634,7 @@ static int ramoops_init_prz(const char *name,
 
                dev_err(dev, "failed to request %s mem region (0x%zx@0x%llx): %d\n",
                        name, sz, (unsigned long long)*paddr, err);
+               kfree(label);
                return err;
        }