You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
[PATCH] stop elv_unregister() from rogering other iosched's data, fix locking
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
+9
-15
@@ -675,21 +675,15 @@ void elv_unregister(struct elevator_type *e)
|
||||
/*
|
||||
* Iterate every thread in the process to remove the io contexts.
|
||||
*/
|
||||
read_lock(&tasklist_lock);
|
||||
do_each_thread(g, p) {
|
||||
struct io_context *ioc = p->io_context;
|
||||
if (ioc && ioc->cic) {
|
||||
ioc->cic->exit(ioc->cic);
|
||||
ioc->cic->dtor(ioc->cic);
|
||||
ioc->cic = NULL;
|
||||
}
|
||||
if (ioc && ioc->aic) {
|
||||
ioc->aic->exit(ioc->aic);
|
||||
ioc->aic->dtor(ioc->aic);
|
||||
ioc->aic = NULL;
|
||||
}
|
||||
} while_each_thread(g, p);
|
||||
read_unlock(&tasklist_lock);
|
||||
if (e->ops.trim) {
|
||||
read_lock(&tasklist_lock);
|
||||
do_each_thread(g, p) {
|
||||
task_lock(p);
|
||||
e->ops.trim(p->io_context);
|
||||
task_unlock(p);
|
||||
} while_each_thread(g, p);
|
||||
read_unlock(&tasklist_lock);
|
||||
}
|
||||
|
||||
spin_lock_irq(&elv_list_lock);
|
||||
list_del_init(&e->list);
|
||||
|
||||
Reference in New Issue
Block a user