pstore: Allow the user to explicitly choose a backend

pstore only allows one backend to be registered at present, but the
system may provide several. Add a parameter to allow the user to choose
which backend will be used rather than just relying on load order.

Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
Matthew Garrett 2011-07-21 16:57:55 -04:00 коммит произвёл Tony Luck
Родитель b94fdd077e
Коммит dee28e72b6
3 изменённых файлов: 19 добавлений и 0 удалений

Просмотреть файл

@ -39,3 +39,9 @@ Description: Generic interface to platform dependent persistent storage.
multiple) files based on the record size of the underlying multiple) files based on the record size of the underlying
persistent storage until at least this amount is reached. persistent storage until at least this amount is reached.
Default is 10 Kbytes. Default is 10 Kbytes.
Pstore only supports one backend at a time. If multiple
backends are available, the preferred backend may be
set by passing the pstore.backend= argument to the kernel at
boot time.

Просмотреть файл

@ -2151,6 +2151,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
[HW,MOUSE] Controls Logitech smartscroll autorepeat. [HW,MOUSE] Controls Logitech smartscroll autorepeat.
0 = disabled, 1 = enabled (default). 0 = disabled, 1 = enabled (default).
pstore.backend= Specify the name of the pstore backend to use
pt. [PARIDE] pt. [PARIDE]
See Documentation/blockdev/paride.txt. See Documentation/blockdev/paride.txt.

Просмотреть файл

@ -37,6 +37,8 @@
static DEFINE_SPINLOCK(pstore_lock); static DEFINE_SPINLOCK(pstore_lock);
static struct pstore_info *psinfo; static struct pstore_info *psinfo;
static char *backend;
/* How much of the console log to snapshot */ /* How much of the console log to snapshot */
static unsigned long kmsg_bytes = 10240; static unsigned long kmsg_bytes = 10240;
@ -131,6 +133,12 @@ int pstore_register(struct pstore_info *psi)
spin_unlock(&pstore_lock); spin_unlock(&pstore_lock);
return -EBUSY; return -EBUSY;
} }
if (backend && strcmp(backend, psi->name)) {
spin_unlock(&pstore_lock);
return -EINVAL;
}
psinfo = psi; psinfo = psi;
spin_unlock(&pstore_lock); spin_unlock(&pstore_lock);
@ -208,3 +216,6 @@ int pstore_write(enum pstore_type_id type, char *buf, size_t size)
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(pstore_write); EXPORT_SYMBOL_GPL(pstore_write);
module_param(backend, charp, 0444);
MODULE_PARM_DESC(backend, "Pstore backend to use");