]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
pstore/ram: Simplify ramoops_get_next_prz() arguments
authorJoel Fernandes (Google) <joel@joelfernandes.org>
Sat, 3 Nov 2018 23:38:17 +0000 (16:38 -0700)
committerKees Cook <keescook@chromium.org>
Tue, 4 Dec 2018 00:52:35 +0000 (16:52 -0800)
(1) remove type argument from ramoops_get_next_prz()

Since we store the type of the prz when we initialize it, we no longer
need to pass it again in ramoops_get_next_prz() since we can just use
that to setup the pstore record. So lets remove it from the argument list.

(2) remove max argument from ramoops_get_next_prz()

Looking at the code flow, the 'max' checks are already being done on
the prz passed to ramoops_get_next_prz(). Lets remove it to simplify
this function and reduce its arguments.

(3) further reduce ramoops_get_next_prz() arguments by passing record

Both the id and type fields of a pstore_record are set by
ramoops_get_next_prz(). So we can just pass a pointer to the pstore_record
instead of passing individual elements. This results in cleaner more
readable code and fewer lines.

In addition lets also remove the 'update' argument since we can detect
that. Changes are squashed into a single patch to reduce fixup conflicts.

Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
fs/pstore/ram.c

index b174d0fc009f7fd94f182a530818fe653576ac41..202eaa82bcc63b154aa5d6a755b79448853635b3 100644 (file)
@@ -124,19 +124,17 @@ static int ramoops_pstore_open(struct pstore_info *psi)
 }
 
 static struct persistent_ram_zone *
-ramoops_get_next_prz(struct persistent_ram_zone *przs[], uint *c, uint max,
-                    u64 *id,
-                    enum pstore_type_id *typep, enum pstore_type_id type,
-                    bool update)
+ramoops_get_next_prz(struct persistent_ram_zone *przs[], int id,
+                    struct pstore_record *record)
 {
        struct persistent_ram_zone *prz;
-       int i = (*c)++;
+       bool update = (record->type == PSTORE_TYPE_DMESG);
 
        /* Give up if we never existed or have hit the end. */
-       if (!przs || i >= max)
+       if (!przs)
                return NULL;
 
-       prz = przs[i];
+       prz = przs[id];
        if (!prz)
                return NULL;
 
@@ -147,8 +145,8 @@ ramoops_get_next_prz(struct persistent_ram_zone *przs[], uint *c, uint max,
        if (!persistent_ram_old_size(prz))
                return NULL;
 
-       *typep = type;
-       *id = i;
+       record->type = prz->type;
+       record->id = id;
 
        return prz;
 }
@@ -255,10 +253,8 @@ static ssize_t ramoops_pstore_read(struct pstore_record *record)
 
        /* Find the next valid persistent_ram_zone for DMESG */
        while (cxt->dump_read_cnt < cxt->max_dump_cnt && !prz) {
-               prz = ramoops_get_next_prz(cxt->dprzs, &cxt->dump_read_cnt,
-                                          cxt->max_dump_cnt, &record->id,
-                                          &record->type,
-                                          PSTORE_TYPE_DMESG, 1);
+               prz = ramoops_get_next_prz(cxt->dprzs, cxt->dump_read_cnt++,
+                                          record);
                if (!prz_ok(prz))
                        continue;
                header_length = ramoops_read_kmsg_hdr(persistent_ram_old(prz),
@@ -272,22 +268,18 @@ static ssize_t ramoops_pstore_read(struct pstore_record *record)
                }
        }
 
-       if (!prz_ok(prz))
-               prz = ramoops_get_next_prz(&cxt->cprz, &cxt->console_read_cnt,
-                                          1, &record->id, &record->type,
-                                          PSTORE_TYPE_CONSOLE, 0);
+       if (!prz_ok(prz) && !cxt->console_read_cnt++)
+               prz = ramoops_get_next_prz(&cxt->cprz, 0 /* single */, record);
 
-       if (!prz_ok(prz))
-               prz = ramoops_get_next_prz(&cxt->mprz, &cxt->pmsg_read_cnt,
-                                          1, &record->id, &record->type,
-                                          PSTORE_TYPE_PMSG, 0);
+       if (!prz_ok(prz) && !cxt->pmsg_read_cnt++)
+               prz = ramoops_get_next_prz(&cxt->mprz, 0 /* single */, record);
 
        /* ftrace is last since it may want to dynamically allocate memory. */
        if (!prz_ok(prz)) {
-               if (!(cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU)) {
-                       prz = ramoops_get_next_prz(cxt->fprzs,
-                                       &cxt->ftrace_read_cnt, 1, &record->id,
-                                       &record->type, PSTORE_TYPE_FTRACE, 0);
+               if (!(cxt->flags & RAMOOPS_FLAG_FTRACE_PER_CPU) &&
+                   !cxt->ftrace_read_cnt++) {
+                       prz = ramoops_get_next_prz(cxt->fprzs, 0 /* single */,
+                                                  record);
                } else {
                        /*
                         * Build a new dummy record which combines all the
@@ -303,11 +295,7 @@ static ssize_t ramoops_pstore_read(struct pstore_record *record)
 
                        while (cxt->ftrace_read_cnt < cxt->max_ftrace_cnt) {
                                prz_next = ramoops_get_next_prz(cxt->fprzs,
-                                               &cxt->ftrace_read_cnt,
-                                               cxt->max_ftrace_cnt,
-                                               &record->id,
-                                               &record->type,
-                                               PSTORE_TYPE_FTRACE, 0);
+                                               cxt->ftrace_read_cnt++, record);
 
                                if (!prz_ok(prz_next))
                                        continue;