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: Tony Luck <tony.luck@intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
eaadcfeb31
Коммит
df36ac1bc2
|
@ -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,
|
||||||
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)
|
||||||
pstore_get_records(0);
|
pstore_get_records(0);
|
||||||
|
|
||||||
kmsg_dump_register(&pstore_dumper);
|
kmsg_dump_register(&pstore_dumper);
|
||||||
pstore_register_console();
|
|
||||||
pstore_register_ftrace();
|
if ((psi->flags & PSTORE_FLAGS_FRAGILE) == 0) {
|
||||||
|
pstore_register_console();
|
||||||
|
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 {
|
||||||
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 {
|
||||||
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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче