| From 42fc16fa1c924bfe45b534f1a859a66182ef586d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 19 Jun 2020 20:47:27 +0000 |
| Subject: loop: be paranoid on exit and prevent new additions / removals |
| |
| From: Luis Chamberlain <mcgrof@kernel.org> |
| |
| [ Upstream commit 200f93377220504c5e56754823e7adfea6037f1a ] |
| |
| Be pedantic on removal as well and hold the mutex. |
| This should prevent uses of addition while we exit. |
| |
| Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> |
| Reviewed-by: Ming Lei <ming.lei@redhat.com> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/block/loop.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| diff --git a/drivers/block/loop.c b/drivers/block/loop.c |
| index 418bb4621255a..6b36fc2f4edc7 100644 |
| --- a/drivers/block/loop.c |
| +++ b/drivers/block/loop.c |
| @@ -2333,6 +2333,8 @@ static void __exit loop_exit(void) |
| |
| range = max_loop ? max_loop << part_shift : 1UL << MINORBITS; |
| |
| + mutex_lock(&loop_ctl_mutex); |
| + |
| idr_for_each(&loop_index_idr, &loop_exit_cb, NULL); |
| idr_destroy(&loop_index_idr); |
| |
| @@ -2340,6 +2342,8 @@ static void __exit loop_exit(void) |
| unregister_blkdev(LOOP_MAJOR, "loop"); |
| |
| misc_deregister(&loop_misc); |
| + |
| + mutex_unlock(&loop_ctl_mutex); |
| } |
| |
| module_init(loop_init); |
| -- |
| 2.25.1 |
| |