aboutsummaryrefslogtreecommitdiffstats
path: root/fs/pstore
diff options
context:
space:
mode:
authorLenny Szubowicz <lszubowi@redhat.com>2013-06-28 17:11:33 -0400
committerTony Luck <tony.luck@intel.com>2013-06-28 18:21:52 -0400
commit8e48b1a8ed58595c40f2748c0f2da55b04da2dd6 (patch)
tree4f1e7d8c3397cbdb6dd16ffe04c3f49506df5f00 /fs/pstore
parentbf2883339a33b7544b92ea465b90c3de55082032 (diff)
pstore: Return unique error if backend registration excluded by kernel param
This is patch 1/3 of a patch set that avoids what misleadingly appears to be a error during boot: ERST: Could not register with persistent store This message is displayed if the system has a valid ACPI ERST table and the pstore.backend kernel parameter has been used to disable use of ERST by pstore. But this same message is used for errors that preclude registration. As part of fixing this, return a unique error status from pstore_register if the pstore.backend kernel parameter selects a specific facility other than the requesting facility and check for this condition before any others. This allows the caller to distinquish this benign case from the other failure cases. Also, print an informational console message about which facility successfully registered as the pstore backend. Since there are various kernel parameters, config build options, and boot-time errors that can influence which facility registers with pstore, it's useful to have a positive indication. Signed-off-by: Lenny Szubowicz <lszubowi@redhat.com> Reported-by: Naotaka Hamaguchi <n.hamaguchi@jp.fujitsu.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'fs/pstore')
-rw-r--r--fs/pstore/platform.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
index 86d1038b5a12..b7ffe2bcd9c4 100644
--- a/fs/pstore/platform.c
+++ b/fs/pstore/platform.c
@@ -239,17 +239,15 @@ int pstore_register(struct pstore_info *psi)
239{ 239{
240 struct module *owner = psi->owner; 240 struct module *owner = psi->owner;
241 241
242 if (backend && strcmp(backend, psi->name))
243 return -EPERM;
244
242 spin_lock(&pstore_lock); 245 spin_lock(&pstore_lock);
243 if (psinfo) { 246 if (psinfo) {
244 spin_unlock(&pstore_lock); 247 spin_unlock(&pstore_lock);
245 return -EBUSY; 248 return -EBUSY;
246 } 249 }
247 250
248 if (backend && strcmp(backend, psi->name)) {
249 spin_unlock(&pstore_lock);
250 return -EINVAL;
251 }
252
253 if (!psi->write) 251 if (!psi->write)
254 psi->write = pstore_write_compat; 252 psi->write = pstore_write_compat;
255 psinfo = psi; 253 psinfo = psi;
@@ -274,6 +272,9 @@ int pstore_register(struct pstore_info *psi)
274 add_timer(&pstore_timer); 272 add_timer(&pstore_timer);
275 } 273 }
276 274
275 pr_info("pstore: Registered %s as persistent store backend\n",
276 psi->name);
277
277 return 0; 278 return 0;
278} 279}
279EXPORT_SYMBOL_GPL(pstore_register); 280EXPORT_SYMBOL_GPL(pstore_register);