[RESEND][PATCH v4 5/7] efi_pstore: Add a sequence counter to a variable name
[Issue] Currently, a variable name, which identifies each entry, consists of type, id and ctime. But if multiple events happens in a short time, a second/third event may fail to log because efi_pstore can't distinguish each event with current variable name. [Solution] A reasonable way to identify all events precisely is introducing a sequence counter to the variable name. The sequence counter has already supported in a pstore layer with "oopscount". So, this patch adds it to a variable name. Also, it is passed to read/erase callbacks of platform drivers in accordance with the modification of the variable name. a variable name of first event: dump-type0-1-12345678 a variable name of second event: dump-type0-1-12345678 type:0 id:1 ctime:12345678 If multiple events happen in a short time, efi_pstore can't distinguish them because variable names are same among them. it can be distinguishable by adding a sequence counter as follows. a variable name of first event: dump-type0-1-1-12345678 a variable name of Second event: dump-type0-1-2-12345678 type:0 id:1 sequence counter: 1(first event), 2(second event) ctime:12345678 Signed-off-by: Seiji Aguchi Acked-by: Rafael J. Wysocki --- drivers/acpi/apei/erst.c | 12 ++-- drivers/firmware/efivars.c | 23 ++- fs/pstore/inode.c |8 +--- fs/pstore/internal.h |2 +- fs/pstore/platform.c | 11 ++- fs/pstore/ram.c|7 +++ include/linux/pstore.h |8 +--- 7 files changed, 40 insertions(+), 31 deletions(-) diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index 0bd6ae4..6d894bf 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c @@ -931,13 +931,13 @@ static int erst_check_table(struct acpi_table_erst *erst_tab) static int erst_open_pstore(struct pstore_info *psi); static int erst_close_pstore(struct pstore_info *psi); -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi); static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, - u64 *id, unsigned int part, + u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi); -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi); static struct pstore_info erst_info = { @@ -987,7 +987,7 @@ static int erst_close_pstore(struct pstore_info *psi) return 0; } -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi) { @@ -1055,7 +1055,7 @@ out: } static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, - u64 *id, unsigned int part, + u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi) { struct cper_pstore_record *rcd = (struct cper_pstore_record *) @@ -1101,7 +1101,7 @@ static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, return ret; } -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi) { return erst_clear(id); diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c index 3803621..7ad3aae 100644 --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c @@ -658,13 +658,14 @@ static int efi_pstore_close(struct pstore_info *psi) } static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, - struct timespec *timespec, + int *count, struct timespec *timespec, char **buf, struct pstore_info *psi) { efi_guid_t vendor = LINUX_EFI_CRASH_GUID; struct efivars *efivars = psi->data; char name[DUMP_NAME_LEN]; int i; + int cnt; unsigned int part, size; unsigned long time; @@ -674,8 +675,10 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, for (i = 0; i < DUMP_NAME_LEN; i++) { name[i] = efivars->walk_entry->var.VariableName[i]; } - if (sscanf(name, "dump-type%u-%u-%lu", type, , ) == 3) { + if (sscanf(name, "dump-type%u-%u-%d-%lu", + type, , , ) == 4) {
[RESEND][PATCH v4 5/7] efi_pstore: Add a sequence counter to a variable name
[Issue] Currently, a variable name, which identifies each entry, consists of type, id and ctime. But if multiple events happens in a short time, a second/third event may fail to log because efi_pstore can't distinguish each event with current variable name. [Solution] A reasonable way to identify all events precisely is introducing a sequence counter to the variable name. The sequence counter has already supported in a pstore layer with oopscount. So, this patch adds it to a variable name. Also, it is passed to read/erase callbacks of platform drivers in accordance with the modification of the variable name. before applying this patch a variable name of first event: dump-type0-1-12345678 a variable name of second event: dump-type0-1-12345678 type:0 id:1 ctime:12345678 If multiple events happen in a short time, efi_pstore can't distinguish them because variable names are same among them. after applying this patch it can be distinguishable by adding a sequence counter as follows. a variable name of first event: dump-type0-1-1-12345678 a variable name of Second event: dump-type0-1-2-12345678 type:0 id:1 sequence counter: 1(first event), 2(second event) ctime:12345678 Signed-off-by: Seiji Aguchi seiji.agu...@hds.com Acked-by: Rafael J. Wysocki rafael.j.wyso...@intel.com --- drivers/acpi/apei/erst.c | 12 ++-- drivers/firmware/efivars.c | 23 ++- fs/pstore/inode.c |8 +--- fs/pstore/internal.h |2 +- fs/pstore/platform.c | 11 ++- fs/pstore/ram.c|7 +++ include/linux/pstore.h |8 +--- 7 files changed, 40 insertions(+), 31 deletions(-) diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index 0bd6ae4..6d894bf 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c @@ -931,13 +931,13 @@ static int erst_check_table(struct acpi_table_erst *erst_tab) static int erst_open_pstore(struct pstore_info *psi); static int erst_close_pstore(struct pstore_info *psi); -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi); static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, - u64 *id, unsigned int part, + u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi); -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi); static struct pstore_info erst_info = { @@ -987,7 +987,7 @@ static int erst_close_pstore(struct pstore_info *psi) return 0; } -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi) { @@ -1055,7 +1055,7 @@ out: } static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, - u64 *id, unsigned int part, + u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi) { struct cper_pstore_record *rcd = (struct cper_pstore_record *) @@ -1101,7 +1101,7 @@ static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, return ret; } -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi) { return erst_clear(id); diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c index 3803621..7ad3aae 100644 --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c @@ -658,13 +658,14 @@ static int efi_pstore_close(struct pstore_info *psi) } static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, - struct timespec *timespec, + int *count, struct timespec *timespec, char **buf, struct pstore_info *psi) { efi_guid_t vendor = LINUX_EFI_CRASH_GUID; struct efivars *efivars = psi-data; char name[DUMP_NAME_LEN]; int i; + int cnt; unsigned int part, size; unsigned long time; @@ -674,8 +675,10 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, for (i = 0; i DUMP_NAME_LEN; i++) { name[i] = efivars-walk_entry-var.VariableName[i]; } - if (sscanf(name, dump-type%u-%u-%lu, type, part, time) == 3) { +
Re: [PATCH v4 5/7] efi_pstore: Add a sequence counter to a variable name
On Tuesday, October 30, 2012 08:02:54 PM Seiji Aguchi wrote: > > [Issue] > > Currently, a variable name, which identifies each entry, consists of type, id > and ctime. > But if multiple events happens in a short time, a second/third event may fail > to log because > efi_pstore can't distinguish each event with current variable name. > > [Solution] > > A reasonable way to identify all events precisely is introducing a sequence > counter to > the variable name. > > The sequence counter has already supported in a pstore layer with "oopscount". > So, this patch adds it to a variable name. > Also, it is passed to read/erase callbacks of platform drivers in accordance > with > the modification of the variable name. > > > a variable name of first event: dump-type0-1-12345678 > a variable name of second event: dump-type0-1-12345678 > > type:0 > id:1 > ctime:12345678 > > If multiple events happen in a short time, efi_pstore can't distinguish them > because > variable names are same among them. > > > > it can be distinguishable by adding a sequence counter as follows. > > a variable name of first event: dump-type0-1-1-12345678 > a variable name of Second event: dump-type0-1-2-12345678 > > type:0 > id:1 > sequence counter: 1(first event), 2(second event) > ctime:12345678 > > Signed-off-by: Seiji Aguchi Please feel free to add Acked-by: Rafael J. Wysocki for the erst.c change. Thanks! > --- > drivers/acpi/apei/erst.c | 12 ++-- > drivers/firmware/efivars.c | 23 ++- > fs/pstore/inode.c |8 +--- > fs/pstore/internal.h |2 +- > fs/pstore/platform.c | 11 ++- > fs/pstore/ram.c|7 +++ > include/linux/pstore.h |8 +--- > 7 files changed, 40 insertions(+), 31 deletions(-) > > diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c > index 0bd6ae4..6d894bf 100644 > --- a/drivers/acpi/apei/erst.c > +++ b/drivers/acpi/apei/erst.c > @@ -931,13 +931,13 @@ static int erst_check_table(struct acpi_table_erst > *erst_tab) > > static int erst_open_pstore(struct pstore_info *psi); > static int erst_close_pstore(struct pstore_info *psi); > -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, > +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, > struct timespec *time, char **buf, > struct pstore_info *psi); > static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason > reason, > -u64 *id, unsigned int part, > +u64 *id, unsigned int part, int count, > size_t size, struct pstore_info *psi); > -static int erst_clearer(enum pstore_type_id type, u64 id, > +static int erst_clearer(enum pstore_type_id type, u64 id, int count, > struct timespec time, struct pstore_info *psi); > > static struct pstore_info erst_info = { > @@ -987,7 +987,7 @@ static int erst_close_pstore(struct pstore_info *psi) > return 0; > } > > -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, > +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, > struct timespec *time, char **buf, > struct pstore_info *psi) > { > @@ -1055,7 +1055,7 @@ out: > } > > static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason > reason, > -u64 *id, unsigned int part, > +u64 *id, unsigned int part, int count, > size_t size, struct pstore_info *psi) > { > struct cper_pstore_record *rcd = (struct cper_pstore_record *) > @@ -1101,7 +1101,7 @@ static int erst_writer(enum pstore_type_id type, enum > kmsg_dump_reason reason, > return ret; > } > > -static int erst_clearer(enum pstore_type_id type, u64 id, > +static int erst_clearer(enum pstore_type_id type, u64 id, int count, > struct timespec time, struct pstore_info *psi) > { > return erst_clear(id); > diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c > index 3803621..7ad3aae 100644 > --- a/drivers/firmware/efivars.c > +++ b/drivers/firmware/efivars.c > @@ -658,13 +658,14 @@ static int efi_pstore_close(struct pstore_info *psi) > } > > static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, > -struct timespec *timespec, > +int *count, struct timespec *timespec, > char **buf, struct pstore_info *psi) > { > efi_guid_t vendor = LINUX_EFI_CRASH_GUID; > struct efivars *efivars = psi->data; > char name[DUMP_NAME_LEN]; > int i; > + int cnt; > unsigned int part, size; > unsigned long time; > > @@ -674,8 +675,10 @@ static ssize_t efi_pstore_read(u64 *id, enum > pstore_type_id *type, > for (i = 0; i <
[PATCH v4 5/7] efi_pstore: Add a sequence counter to a variable name
[Issue] Currently, a variable name, which identifies each entry, consists of type, id and ctime. But if multiple events happens in a short time, a second/third event may fail to log because efi_pstore can't distinguish each event with current variable name. [Solution] A reasonable way to identify all events precisely is introducing a sequence counter to the variable name. The sequence counter has already supported in a pstore layer with "oopscount". So, this patch adds it to a variable name. Also, it is passed to read/erase callbacks of platform drivers in accordance with the modification of the variable name. a variable name of first event: dump-type0-1-12345678 a variable name of second event: dump-type0-1-12345678 type:0 id:1 ctime:12345678 If multiple events happen in a short time, efi_pstore can't distinguish them because variable names are same among them. it can be distinguishable by adding a sequence counter as follows. a variable name of first event: dump-type0-1-1-12345678 a variable name of Second event: dump-type0-1-2-12345678 type:0 id:1 sequence counter: 1(first event), 2(second event) ctime:12345678 Signed-off-by: Seiji Aguchi --- drivers/acpi/apei/erst.c | 12 ++-- drivers/firmware/efivars.c | 23 ++- fs/pstore/inode.c |8 +--- fs/pstore/internal.h |2 +- fs/pstore/platform.c | 11 ++- fs/pstore/ram.c|7 +++ include/linux/pstore.h |8 +--- 7 files changed, 40 insertions(+), 31 deletions(-) diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index 0bd6ae4..6d894bf 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c @@ -931,13 +931,13 @@ static int erst_check_table(struct acpi_table_erst *erst_tab) static int erst_open_pstore(struct pstore_info *psi); static int erst_close_pstore(struct pstore_info *psi); -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi); static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, - u64 *id, unsigned int part, + u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi); -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi); static struct pstore_info erst_info = { @@ -987,7 +987,7 @@ static int erst_close_pstore(struct pstore_info *psi) return 0; } -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi) { @@ -1055,7 +1055,7 @@ out: } static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, - u64 *id, unsigned int part, + u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi) { struct cper_pstore_record *rcd = (struct cper_pstore_record *) @@ -1101,7 +1101,7 @@ static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, return ret; } -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi) { return erst_clear(id); diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c index 3803621..7ad3aae 100644 --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c @@ -658,13 +658,14 @@ static int efi_pstore_close(struct pstore_info *psi) } static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, - struct timespec *timespec, + int *count, struct timespec *timespec, char **buf, struct pstore_info *psi) { efi_guid_t vendor = LINUX_EFI_CRASH_GUID; struct efivars *efivars = psi->data; char name[DUMP_NAME_LEN]; int i; + int cnt; unsigned int part, size; unsigned long time; @@ -674,8 +675,10 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, for (i = 0; i < DUMP_NAME_LEN; i++) { name[i] = efivars->walk_entry->var.VariableName[i]; } - if (sscanf(name, "dump-type%u-%u-%lu", type, , ) == 3) { + if (sscanf(name, "dump-type%u-%u-%d-%lu", + type, , , ) == 4) {
[PATCH v4 5/7] efi_pstore: Add a sequence counter to a variable name
[Issue] Currently, a variable name, which identifies each entry, consists of type, id and ctime. But if multiple events happens in a short time, a second/third event may fail to log because efi_pstore can't distinguish each event with current variable name. [Solution] A reasonable way to identify all events precisely is introducing a sequence counter to the variable name. The sequence counter has already supported in a pstore layer with oopscount. So, this patch adds it to a variable name. Also, it is passed to read/erase callbacks of platform drivers in accordance with the modification of the variable name. before applying this patch a variable name of first event: dump-type0-1-12345678 a variable name of second event: dump-type0-1-12345678 type:0 id:1 ctime:12345678 If multiple events happen in a short time, efi_pstore can't distinguish them because variable names are same among them. after applying this patch it can be distinguishable by adding a sequence counter as follows. a variable name of first event: dump-type0-1-1-12345678 a variable name of Second event: dump-type0-1-2-12345678 type:0 id:1 sequence counter: 1(first event), 2(second event) ctime:12345678 Signed-off-by: Seiji Aguchi seiji.agu...@hds.com --- drivers/acpi/apei/erst.c | 12 ++-- drivers/firmware/efivars.c | 23 ++- fs/pstore/inode.c |8 +--- fs/pstore/internal.h |2 +- fs/pstore/platform.c | 11 ++- fs/pstore/ram.c|7 +++ include/linux/pstore.h |8 +--- 7 files changed, 40 insertions(+), 31 deletions(-) diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index 0bd6ae4..6d894bf 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c @@ -931,13 +931,13 @@ static int erst_check_table(struct acpi_table_erst *erst_tab) static int erst_open_pstore(struct pstore_info *psi); static int erst_close_pstore(struct pstore_info *psi); -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi); static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, - u64 *id, unsigned int part, + u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi); -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi); static struct pstore_info erst_info = { @@ -987,7 +987,7 @@ static int erst_close_pstore(struct pstore_info *psi) return 0; } -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi) { @@ -1055,7 +1055,7 @@ out: } static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, - u64 *id, unsigned int part, + u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi) { struct cper_pstore_record *rcd = (struct cper_pstore_record *) @@ -1101,7 +1101,7 @@ static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, return ret; } -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi) { return erst_clear(id); diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c index 3803621..7ad3aae 100644 --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c @@ -658,13 +658,14 @@ static int efi_pstore_close(struct pstore_info *psi) } static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, - struct timespec *timespec, + int *count, struct timespec *timespec, char **buf, struct pstore_info *psi) { efi_guid_t vendor = LINUX_EFI_CRASH_GUID; struct efivars *efivars = psi-data; char name[DUMP_NAME_LEN]; int i; + int cnt; unsigned int part, size; unsigned long time; @@ -674,8 +675,10 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, for (i = 0; i DUMP_NAME_LEN; i++) { name[i] = efivars-walk_entry-var.VariableName[i]; } - if (sscanf(name, dump-type%u-%u-%lu, type, part, time) == 3) { + if (sscanf(name, dump-type%u-%u-%d-%lu, +
Re: [PATCH v4 5/7] efi_pstore: Add a sequence counter to a variable name
On Tuesday, October 30, 2012 08:02:54 PM Seiji Aguchi wrote: [Issue] Currently, a variable name, which identifies each entry, consists of type, id and ctime. But if multiple events happens in a short time, a second/third event may fail to log because efi_pstore can't distinguish each event with current variable name. [Solution] A reasonable way to identify all events precisely is introducing a sequence counter to the variable name. The sequence counter has already supported in a pstore layer with oopscount. So, this patch adds it to a variable name. Also, it is passed to read/erase callbacks of platform drivers in accordance with the modification of the variable name. before applying this patch a variable name of first event: dump-type0-1-12345678 a variable name of second event: dump-type0-1-12345678 type:0 id:1 ctime:12345678 If multiple events happen in a short time, efi_pstore can't distinguish them because variable names are same among them. after applying this patch it can be distinguishable by adding a sequence counter as follows. a variable name of first event: dump-type0-1-1-12345678 a variable name of Second event: dump-type0-1-2-12345678 type:0 id:1 sequence counter: 1(first event), 2(second event) ctime:12345678 Signed-off-by: Seiji Aguchi seiji.agu...@hds.com Please feel free to add Acked-by: Rafael J. Wysocki rafael.j.wyso...@intel.com for the erst.c change. Thanks! --- drivers/acpi/apei/erst.c | 12 ++-- drivers/firmware/efivars.c | 23 ++- fs/pstore/inode.c |8 +--- fs/pstore/internal.h |2 +- fs/pstore/platform.c | 11 ++- fs/pstore/ram.c|7 +++ include/linux/pstore.h |8 +--- 7 files changed, 40 insertions(+), 31 deletions(-) diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index 0bd6ae4..6d894bf 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c @@ -931,13 +931,13 @@ static int erst_check_table(struct acpi_table_erst *erst_tab) static int erst_open_pstore(struct pstore_info *psi); static int erst_close_pstore(struct pstore_info *psi); -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi); static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, -u64 *id, unsigned int part, +u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi); -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi); static struct pstore_info erst_info = { @@ -987,7 +987,7 @@ static int erst_close_pstore(struct pstore_info *psi) return 0; } -static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, +static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, int *count, struct timespec *time, char **buf, struct pstore_info *psi) { @@ -1055,7 +1055,7 @@ out: } static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, -u64 *id, unsigned int part, +u64 *id, unsigned int part, int count, size_t size, struct pstore_info *psi) { struct cper_pstore_record *rcd = (struct cper_pstore_record *) @@ -1101,7 +1101,7 @@ static int erst_writer(enum pstore_type_id type, enum kmsg_dump_reason reason, return ret; } -static int erst_clearer(enum pstore_type_id type, u64 id, +static int erst_clearer(enum pstore_type_id type, u64 id, int count, struct timespec time, struct pstore_info *psi) { return erst_clear(id); diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c index 3803621..7ad3aae 100644 --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c @@ -658,13 +658,14 @@ static int efi_pstore_close(struct pstore_info *psi) } static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, -struct timespec *timespec, +int *count, struct timespec *timespec, char **buf, struct pstore_info *psi) { efi_guid_t vendor = LINUX_EFI_CRASH_GUID; struct efivars *efivars = psi-data; char name[DUMP_NAME_LEN]; int i; + int cnt; unsigned int part, size; unsigned long time; @@ -674,8 +675,10 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, for (i = 0; i DUMP_NAME_LEN; i++) {