pstore: Enable compression on normal path (again)
authorNamhyung Kim <namhyung@kernel.org>
Wed, 18 May 2016 12:00:05 +0000 (21:00 +0900)
committerKees Cook <keescook@chromium.org>
Tue, 31 May 2016 19:36:44 +0000 (12:36 -0700)
The commit f0e2efcfd2717 ("pstore: do not use message compression
without lock") added a check to 'is_locked' to avoid breakage in
concurrent accesses.  But it has a side-effect of disabling compression
on normal path since 'is_locked' variable is not set.  As normal path
always takes the lock, it should be initialized to 1.

This also makes the unlock code a bit simpler.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
fs/pstore/platform.c

index e8c17af..ad8ef22 100644 (file)
@@ -284,7 +284,7 @@ static void pstore_dump(struct kmsg_dumper *dumper,
        u64             id;
        unsigned int    part = 1;
        unsigned long   flags = 0;
-       int             is_locked = 0;
+       int             is_locked;
        int             ret;
 
        why = get_reason_str(reason);
@@ -295,8 +295,10 @@ static void pstore_dump(struct kmsg_dumper *dumper,
                        pr_err("pstore dump routine blocked in %s path, may corrupt error record\n"
                                       , in_nmi() ? "NMI" : why);
                }
-       } else
+       } else {
                spin_lock_irqsave(&psinfo->buf_lock, flags);
+               is_locked = 1;
+       }
        oopscount++;
        while (total < kmsg_bytes) {
                char *dst;
@@ -350,10 +352,7 @@ static void pstore_dump(struct kmsg_dumper *dumper,
                total += total_len;
                part++;
        }
-       if (pstore_cannot_block_path(reason)) {
-               if (is_locked)
-                       spin_unlock_irqrestore(&psinfo->buf_lock, flags);
-       } else
+       if (is_locked)
                spin_unlock_irqrestore(&psinfo->buf_lock, flags);
 }