block/rnbd-clt: Avoid flush_workqueue(system_long_wq) usage
Flushing system-wide workqueues is dangerous and will be forbidden. Replace system_long_wq with local rnbd_clt_wq. Link: https://lkml.kernel.org/r/49925af7-78a8-a3dd-bce6-cfc02e1a9236@I-love.SAKURA.ne.jp Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> Signed-off-by: Jack Wang <jinpu.wang@ionos.com> Reviewed-by: Santosh Kumar Pradhan <santosh.pradhan@ionos.com> Link: https://lore.kernel.org/r/20220413123420.66470-1-jinpu.wang@ionos.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
d292dc8068
commit
5ea7c1339e
|
@ -25,6 +25,7 @@ static int rnbd_client_major;
|
|||
static DEFINE_IDA(index_ida);
|
||||
static DEFINE_MUTEX(sess_lock);
|
||||
static LIST_HEAD(sess_list);
|
||||
static struct workqueue_struct *rnbd_clt_wq;
|
||||
|
||||
/*
|
||||
* Maximum number of partitions an instance can have.
|
||||
|
@ -1759,12 +1760,12 @@ static void rnbd_destroy_sessions(void)
|
|||
* procedure takes minutes.
|
||||
*/
|
||||
INIT_WORK(&dev->unmap_on_rmmod_work, unmap_device_work);
|
||||
queue_work(system_long_wq, &dev->unmap_on_rmmod_work);
|
||||
queue_work(rnbd_clt_wq, &dev->unmap_on_rmmod_work);
|
||||
}
|
||||
rnbd_clt_put_sess(sess);
|
||||
}
|
||||
/* Wait for all scheduled unmap works */
|
||||
flush_workqueue(system_long_wq);
|
||||
flush_workqueue(rnbd_clt_wq);
|
||||
WARN_ON(!list_empty(&sess_list));
|
||||
}
|
||||
|
||||
|
@ -1789,6 +1790,14 @@ static int __init rnbd_client_init(void)
|
|||
pr_err("Failed to load module, creating sysfs device files failed, err: %d\n",
|
||||
err);
|
||||
unregister_blkdev(rnbd_client_major, "rnbd");
|
||||
return err;
|
||||
}
|
||||
rnbd_clt_wq = alloc_workqueue("rnbd_clt_wq", 0, 0);
|
||||
if (!rnbd_clt_wq) {
|
||||
pr_err("Failed to load module, alloc_workqueue failed.\n");
|
||||
rnbd_clt_destroy_sysfs_files();
|
||||
unregister_blkdev(rnbd_client_major, "rnbd");
|
||||
err = -ENOMEM;
|
||||
}
|
||||
|
||||
return err;
|
||||
|
@ -1799,6 +1808,7 @@ static void __exit rnbd_client_exit(void)
|
|||
rnbd_destroy_sessions();
|
||||
unregister_blkdev(rnbd_client_major, "rnbd");
|
||||
ida_destroy(&index_ida);
|
||||
destroy_workqueue(rnbd_clt_wq);
|
||||
}
|
||||
|
||||
module_init(rnbd_client_init);
|
||||
|
|
Loading…
Reference in New Issue