3.8.13.15 -stable review patch. If anyone has any objections, please let me know. ------------------ From: Madper Xie <cxie@xxxxxxxxxx> commit fdeadb43fdf1e7d5698c027b555c389174548e5a upstream. Pstore fs expects that backends provide a unique id which could avoid pstore making entries as duplication or denominating entries the same name. So I combine the timestamp, part and count into id. Signed-off-by: Madper Xie <cxie@xxxxxxxxxx> Cc: Seiji Aguchi <seiji.aguchi@xxxxxxx> Signed-off-by: Matt Fleming <matt.fleming@xxxxxxxxx> [ kamal: backport to 3.8 ] Signed-off-by: Kamal Mostafa <kamal@xxxxxxxxxxxxx> --- drivers/firmware/efivars.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c index e3e95dd..e2d4c7a 100644 --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c @@ -1314,6 +1314,12 @@ static int efi_pstore_close(struct pstore_info *psi) return 0; } +static inline u64 generic_id(unsigned long timestamp, + unsigned int part, int count) +{ + return (timestamp * 100 + part) * 1000 + count; +} + static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, int *count, struct timespec *timespec, char **buf, struct pstore_info *psi) @@ -1334,7 +1340,7 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, } if (sscanf(name, "dump-type%u-%u-%d-%lu", type, &part, &cnt, &time) == 4) { - *id = part; + *id = generic_id(time, part, cnt); *count = cnt; timespec->tv_sec = time; timespec->tv_nsec = 0; @@ -1345,7 +1351,7 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, * which doesn't support holding * multiple logs, remains. */ - *id = part; + *id = generic_id(time, part, cnt); *count = 0; timespec->tv_sec = time; timespec->tv_nsec = 0; @@ -1436,9 +1442,11 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count, struct efivars *efivars = psi->data; struct efivar_entry *entry, *found = NULL; int i; + unsigned int part; - sprintf(name, "dump-type%u-%u-%d-%lu", type, (unsigned int)id, count, - time.tv_sec); + do_div(id, 1000); + part = do_div(id, 100); + sprintf(name, "dump-type%u-%u-%d-%lu", type, part, count, time.tv_sec); spin_lock_irq(&efivars->lock); -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html