mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 21:57:43 +00:00
ubi: fastmap: Cancel work upon detach
commit6e7d801610
upstream. Ben Hutchings pointed out that29b7a6fa1e
("ubi: fastmap: Don't flush fastmap work on detach") does not really fix the problem, it just reduces the risk to hit the race window where fastmap work races against free()'ing ubi->volumes[]. The correct approach is making sure that no more fastmap work is in progress before we free ubi data structures. So we cancel fastmap work right after the ubi background thread is stopped. By setting ubi->thread_enabled to zero we make sure that no further work tries to wake the thread. Fixes:29b7a6fa1e
("ubi: fastmap: Don't flush fastmap work on detach") Fixes:74cdaf2400
("UBI: Fastmap: Fix memory leaks while closing the WL sub-system") Cc: stable@vger.kernel.org Cc: Ben Hutchings <ben.hutchings@codethink.co.uk> Cc: Martin Townsend <mtownsend1973@gmail.com> Signed-off-by: Richard Weinberger <richard@nod.at> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
db04f92b65
commit
b24d90f4d6
2 changed files with 4 additions and 3 deletions
|
@ -1082,6 +1082,9 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway)
|
|||
if (ubi->bgt_thread)
|
||||
kthread_stop(ubi->bgt_thread);
|
||||
|
||||
#ifdef CONFIG_MTD_UBI_FASTMAP
|
||||
cancel_work_sync(&ubi->fm_work);
|
||||
#endif
|
||||
ubi_debugfs_exit_dev(ubi);
|
||||
uif_close(ubi);
|
||||
|
||||
|
|
|
@ -1505,6 +1505,7 @@ int ubi_thread(void *u)
|
|||
}
|
||||
|
||||
dbg_wl("background thread \"%s\" is killed", ubi->bgt_name);
|
||||
ubi->thread_enabled = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1514,9 +1515,6 @@ int ubi_thread(void *u)
|
|||
*/
|
||||
static void shutdown_work(struct ubi_device *ubi)
|
||||
{
|
||||
#ifdef CONFIG_MTD_UBI_FASTMAP
|
||||
flush_work(&ubi->fm_work);
|
||||
#endif
|
||||
while (!list_empty(&ubi->works)) {
|
||||
struct ubi_work *wrk;
|
||||
|
||||
|
|
Loading…
Reference in a new issue