Commit 755d66b4 authored by Anton Vorontsov's avatar Anton Vorontsov Committed by Greg Kroah-Hartman

pstore/ram: Factor ramoops_get_next_prz() out of ramoops_pstore_read()

This will help make code clearer when we'll add support for other
message types.

The patch also changes return value from -EINVAL to 0 in case of
end-of-records. The exact value doesn't matter for pstore (it should
be just <= 0), but 0 feels more correct.
Signed-off-by: default avatarAnton Vorontsov <anton.vorontsov@linaro.org>
Acked-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f4c5d242
...@@ -85,6 +85,33 @@ static int ramoops_pstore_open(struct pstore_info *psi) ...@@ -85,6 +85,33 @@ static int ramoops_pstore_open(struct pstore_info *psi)
return 0; return 0;
} }
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)
{
struct persistent_ram_zone *prz;
int i = (*c)++;
if (i >= max)
return NULL;
prz = przs[i];
if (update) {
/* Update old/shadowed buffer. */
persistent_ram_save_old(prz);
if (!persistent_ram_old_size(prz))
return NULL;
}
*typep = type;
*id = i;
return prz;
}
static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type, static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type,
struct timespec *time, struct timespec *time,
char **buf, char **buf,
...@@ -94,20 +121,16 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type, ...@@ -94,20 +121,16 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type,
struct ramoops_context *cxt = psi->data; struct ramoops_context *cxt = psi->data;
struct persistent_ram_zone *prz; struct persistent_ram_zone *prz;
if (cxt->dump_read_cnt >= cxt->max_dump_cnt) prz = ramoops_get_next_prz(cxt->przs, &cxt->dump_read_cnt,
return -EINVAL; cxt->max_dump_cnt, id, type,
PSTORE_TYPE_DMESG, 1);
*id = cxt->dump_read_cnt++; if (!prz)
prz = cxt->przs[*id]; return 0;
/* Only supports dmesg output so far. */
*type = PSTORE_TYPE_DMESG;
/* TODO(kees): Bogus time for the moment. */ /* TODO(kees): Bogus time for the moment. */
time->tv_sec = 0; time->tv_sec = 0;
time->tv_nsec = 0; time->tv_nsec = 0;
/* Update old/shadowed buffer. */
persistent_ram_save_old(prz);
size = persistent_ram_old_size(prz); size = persistent_ram_old_size(prz);
*buf = kmalloc(size, GFP_KERNEL); *buf = kmalloc(size, GFP_KERNEL);
if (*buf == NULL) if (*buf == NULL)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment