Messages in this thread Patch in this message | | | Date | Thu, 17 Nov 2011 10:42:00 -0800 | From | Kees Cook <> | Subject | [PATCH] pstore: gracefully handle NULL pstore_info functions |
| |
If a pstore backend doesn't want to support various portions of the pstore interface, it can just leave those functions NULL instead of creating no-op stubs.
Signed-off-by: Kees Cook <keescook@chromium.org> --- fs/pstore/inode.c | 3 ++- fs/pstore/platform.c | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c index 379a02d..b3b426e 100644 --- a/fs/pstore/inode.c +++ b/fs/pstore/inode.c @@ -80,7 +80,8 @@ static int pstore_unlink(struct inode *dir, struct dentry *dentry) { struct pstore_private *p = dentry->d_inode->i_private; - p->psi->erase(p->type, p->id, p->psi); + if (p->psi->erase) + p->psi->erase(p->type, p->id, p->psi); return simple_unlink(dir, dentry); } diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index f146d89..e12dfd7 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -178,7 +178,8 @@ int pstore_register(struct pstore_info *psi) if (pstore_is_mounted()) pstore_get_records(0); - kmsg_dump_register(&pstore_dumper); + if (psi->write && psi->buf && psi->bufsize) + kmsg_dump_register(&pstore_dumper); pstore_timer.expires = jiffies + PSTORE_INTERVAL; add_timer(&pstore_timer); @@ -203,12 +204,11 @@ void pstore_get_records(int quiet) struct timespec time; int failed = 0, rc; - if (!psi) + if (!psi || !psi->read) return; mutex_lock(&psi->read_mutex); - rc = psi->open(psi); - if (rc) + if (psi->open && psi->open(psi)) goto out; while ((size = psi->read(&id, &type, &time, &buf, psi)) > 0) { @@ -219,7 +219,8 @@ void pstore_get_records(int quiet) if (rc && (rc != -EEXIST || !quiet)) failed++; } - psi->close(psi); + if (psi->close) + psi->close(psi); out: mutex_unlock(&psi->read_mutex); -- 1.7.0.4
| |