diff options
-rw-r--r-- | fs/pstore/platform.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index 16ecca5b72d8..0872b8861d99 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c @@ -667,6 +667,7 @@ int pstore_register(struct pstore_info *psi) pstore_register_pmsg(); } + /* Start watching for new records, if desired. */ if (pstore_update_ms >= 0) { pstore_timer.expires = jiffies + msecs_to_jiffies(pstore_update_ms); @@ -689,6 +690,11 @@ EXPORT_SYMBOL_GPL(pstore_register); void pstore_unregister(struct pstore_info *psi) { + /* Stop timer and make sure all work has finished. */ + pstore_update_ms = -1; + del_timer_sync(&pstore_timer); + flush_work(&pstore_work); + if ((psi->flags & PSTORE_FLAGS_FRAGILE) == 0) { pstore_unregister_pmsg(); pstore_unregister_ftrace(); @@ -786,7 +792,9 @@ static void pstore_timefunc(unsigned long dummy) schedule_work(&pstore_work); } - mod_timer(&pstore_timer, jiffies + msecs_to_jiffies(pstore_update_ms)); + if (pstore_update_ms >= 0) + mod_timer(&pstore_timer, + jiffies + msecs_to_jiffies(pstore_update_ms)); } module_param(backend, charp, 0444); |