diff options
author | Hans Holmberg <hans.holmberg@cnexlabs.com> | 2019-02-11 07:25:02 -0500 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2019-02-11 10:18:07 -0500 |
commit | f9324980d7300f961e9895ad94d5ea71c0fe187e (patch) | |
tree | 2b74f9cda433981e68163dfda4666df16fc0aaa6 /drivers/lightnvm/pblk-init.c | |
parent | 1e9364283764ac93b012739890a30d73e76396db (diff) |
lightnvm: pblk: stop taking the free lock in in pblk_lines_free
pblk_line_meta_free might sleep (it can end up calling vfree, depending
on how we allocate lba lists), and this can lead to a BUG()
if we wake up on a different cpu and release the lock.
As there is no point of grabbing the free lock when pblk has shut down,
remove the lock.
Signed-off-by: Hans Holmberg <hans.holmberg@cnexlabs.com>
Signed-off-by: Matias Bjørling <mb@lightnvm.io>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r-- | drivers/lightnvm/pblk-init.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c index f9a3e47b6a93..eb0135c77805 100644 --- a/drivers/lightnvm/pblk-init.c +++ b/drivers/lightnvm/pblk-init.c | |||
@@ -584,14 +584,12 @@ static void pblk_lines_free(struct pblk *pblk) | |||
584 | struct pblk_line *line; | 584 | struct pblk_line *line; |
585 | int i; | 585 | int i; |
586 | 586 | ||
587 | spin_lock(&l_mg->free_lock); | ||
588 | for (i = 0; i < l_mg->nr_lines; i++) { | 587 | for (i = 0; i < l_mg->nr_lines; i++) { |
589 | line = &pblk->lines[i]; | 588 | line = &pblk->lines[i]; |
590 | 589 | ||
591 | pblk_line_free(line); | 590 | pblk_line_free(line); |
592 | pblk_line_meta_free(l_mg, line); | 591 | pblk_line_meta_free(l_mg, line); |
593 | } | 592 | } |
594 | spin_unlock(&l_mg->free_lock); | ||
595 | 593 | ||
596 | pblk_line_mg_free(pblk); | 594 | pblk_line_mg_free(pblk); |
597 | 595 | ||