Commit df36ac1b authored by Luck, Tony's avatar Luck, Tony Committed by Linus Torvalds

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.
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent eaadcfeb
...@@ -942,6 +942,7 @@ static int erst_clearer(enum pstore_type_id type, u64 id, int count, ...@@ -942,6 +942,7 @@ static int erst_clearer(enum pstore_type_id type, u64 id, int count,
static struct pstore_info erst_info = { static struct pstore_info erst_info = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "erst", .name = "erst",
.flags = PSTORE_FLAGS_FRAGILE,
.open = erst_open_pstore, .open = erst_open_pstore,
.close = erst_close_pstore, .close = erst_close_pstore,
.read = erst_reader, .read = erst_reader,
......
...@@ -356,6 +356,7 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count, ...@@ -356,6 +356,7 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count,
static struct pstore_info efi_pstore_info = { static struct pstore_info efi_pstore_info = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "efi", .name = "efi",
.flags = PSTORE_FLAGS_FRAGILE,
.open = efi_pstore_open, .open = efi_pstore_open,
.close = efi_pstore_close, .close = efi_pstore_close,
.read = efi_pstore_read, .read = efi_pstore_read,
......
...@@ -443,8 +443,11 @@ int pstore_register(struct pstore_info *psi) ...@@ -443,8 +443,11 @@ int pstore_register(struct pstore_info *psi)
pstore_get_records(0); pstore_get_records(0);
kmsg_dump_register(&pstore_dumper); kmsg_dump_register(&pstore_dumper);
if ((psi->flags & PSTORE_FLAGS_FRAGILE) == 0) {
pstore_register_console(); pstore_register_console();
pstore_register_ftrace(); pstore_register_ftrace();
}
if (pstore_update_ms >= 0) { if (pstore_update_ms >= 0) {
pstore_timer.expires = jiffies + pstore_timer.expires = jiffies +
......
...@@ -51,6 +51,7 @@ struct pstore_info { ...@@ -51,6 +51,7 @@ struct pstore_info {
char *buf; char *buf;
size_t bufsize; size_t bufsize;
struct mutex read_mutex; /* serialize open/read/close */ struct mutex read_mutex; /* serialize open/read/close */
int flags;
int (*open)(struct pstore_info *psi); int (*open)(struct pstore_info *psi);
int (*close)(struct pstore_info *psi); int (*close)(struct pstore_info *psi);
ssize_t (*read)(u64 *id, enum pstore_type_id *type, ssize_t (*read)(u64 *id, enum pstore_type_id *type,
...@@ -70,6 +71,8 @@ struct pstore_info { ...@@ -70,6 +71,8 @@ struct pstore_info {
void *data; void *data;
}; };
#define PSTORE_FLAGS_FRAGILE 1
#ifdef CONFIG_PSTORE #ifdef CONFIG_PSTORE
extern int pstore_register(struct pstore_info *); extern int pstore_register(struct pstore_info *);
extern bool pstore_cannot_block_path(enum kmsg_dump_reason reason); extern bool pstore_cannot_block_path(enum kmsg_dump_reason reason);
......
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