History

pstore: Don't allow high traffic options on fragile devices

Some pstore backing devices use on board flash as persistent storage. These have limited numbers of write cycles so it is a poor idea to use them from high frequency operations.

Luck, Tony committed 12 years ago

Commit df36ac11 parent eaadcfe4 files · +10 −2Browse files

Unified · Split

4 files
  1. drivers/acpi/apei/erst.c +1 −0
  2. drivers/firmware/efi/efi-pstore.c +1 −0
  3. fs/pstore/platform.c +5 −2
  4. include/linux/pstore.h +3 −0
drivers/acpi/apei/erst.c+1−0
@@ -942,6 +942,7 @@ static int erst_clearer(enum pstore_type_id type, u64 id, int count, · 941 unmodified lines
942static struct pstore_info erst_info = {942static struct pstore_info erst_info = {
943 .owner = THIS_MODULE,943 .owner = THIS_MODULE,
944 .name = "erst",944 .name = "erst",
945 .flags = PSTORE_FLAGS_FRAGILE,
945 .open = erst_open_pstore,946 .open = erst_open_pstore,
946 .close = erst_close_pstore,947 .close = erst_close_pstore,
947 .read = erst_reader,948 .read = erst_reader,
drivers/firmware/efi/efi-pstore.c+1−0
@@ -356,6 +356,7 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count, · 355 unmodified lines
356static struct pstore_info efi_pstore_info = {356static struct pstore_info efi_pstore_info = {
357 .owner = THIS_MODULE,357 .owner = THIS_MODULE,
358 .name = "efi",358 .name = "efi",
359 .flags = PSTORE_FLAGS_FRAGILE,
359 .open = efi_pstore_open,360 .open = efi_pstore_open,
360 .close = efi_pstore_close,361 .close = efi_pstore_close,
361 .read = efi_pstore_read,362 .read = efi_pstore_read,
fs/pstore/platform.c+5−2
@@ -443,8 +443,11 @@ int pstore_register(struct pstore_info *psi) · 442 unmodified lines
443 pstore_get_records(0);443 pstore_get_records(0);
444 444
445 kmsg_dump_register(&pstore_dumper);445 kmsg_dump_register(&pstore_dumper);
446 pstore_register_console();446
447 pstore_register_ftrace();447 if ((psi->flags & PSTORE_FLAGS_FRAGILE) == 0) {
448 pstore_register_console();
449 pstore_register_ftrace();
450 }
448 451
449 if (pstore_update_ms >= 0) {452 if (pstore_update_ms >= 0) {
450 pstore_timer.expires = jiffies +453 pstore_timer.expires = jiffies +
include/linux/pstore.h+3−0
@@ -51,6 +51,7 @@ struct pstore_info { · 50 unmodified lines
51 char *buf;51 char *buf;
52 size_t bufsize;52 size_t bufsize;
53 struct mutex read_mutex; /* serialize open/read/close */53 struct mutex read_mutex; /* serialize open/read/close */
54 int flags;
54 int (*open)(struct pstore_info *psi);55 int (*open)(struct pstore_info *psi);
55 int (*close)(struct pstore_info *psi);56 int (*close)(struct pstore_info *psi);
56 ssize_t (*read)(u64 *id, enum pstore_type_id *type,57 ssize_t (*read)(u64 *id, enum pstore_type_id *type,
@@ -70,6 +71,8 @@ struct pstore_info { · 13 unmodified lines
70 void *data;71 void *data;
71};72};
72 73
74#define PSTORE_FLAGS_FRAGILE 1
75
73#ifdef CONFIG_PSTORE76#ifdef CONFIG_PSTORE
74extern int pstore_register(struct pstore_info *);77extern int pstore_register(struct pstore_info *);
75extern bool pstore_cannot_block_path(enum kmsg_dump_reason reason);78extern bool pstore_cannot_block_path(enum kmsg_dump_reason reason);