aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/pblk-core.c
diff options
context:
space:
mode:
authorJavier González <jg@lightnvm.io>2017-06-30 11:56:40 -0400
committerJens Axboe <axboe@kernel.dk>2017-06-30 13:08:18 -0400
commitee8d5c1ad54e48ec44b6ae9cf91144fcab6ebf83 (patch)
treecd5e6be51067d2eb47fa42c031a723644593d94f /drivers/lightnvm/pblk-core.c
parentde54e703a4229e4688eb77b32b1c27861384e22a (diff)
lightnvm: pblk: remove target using async. I/Os
When removing a pblk instance, pad the current line using asynchronous I/O. This reduces the removal time from ~1 minute in the worst case to a couple of seconds. Signed-off-by: Javier González <javier@cnexlabs.com> Signed-off-by: Matias Bjørling <matias@cnexlabs.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/lightnvm/pblk-core.c')
-rw-r--r--drivers/lightnvm/pblk-core.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
index 74b8d9db05e1..e6f42cddc8ec 100644
--- a/drivers/lightnvm/pblk-core.c
+++ b/drivers/lightnvm/pblk-core.c
@@ -273,9 +273,10 @@ static void pblk_flush_writer(struct pblk *pblk)
273{ 273{
274 pblk_rb_flush(&pblk->rwb); 274 pblk_rb_flush(&pblk->rwb);
275 do { 275 do {
276 if (!pblk_rb_read_count(&pblk->rwb)) 276 if (!pblk_rb_sync_count(&pblk->rwb))
277 break; 277 break;
278 278
279 pblk_write_kick(pblk);
279 schedule(); 280 schedule();
280 } while (1); 281 } while (1);
281} 282}
@@ -1350,6 +1351,7 @@ void pblk_pipeline_stop(struct pblk *pblk)
1350 return; 1351 return;
1351 } 1352 }
1352 1353
1354 flush_workqueue(pblk->bb_wq);
1353 pblk_line_close_meta_sync(pblk); 1355 pblk_line_close_meta_sync(pblk);
1354 1356
1355 spin_lock(&l_mg->free_lock); 1357 spin_lock(&l_mg->free_lock);
@@ -1547,6 +1549,7 @@ void pblk_line_close_meta_sync(struct pblk *pblk)
1547 } 1549 }
1548 1550
1549 pblk_wait_for_meta(pblk); 1551 pblk_wait_for_meta(pblk);
1552 flush_workqueue(pblk->close_wq);
1550} 1553}
1551 1554
1552static void pblk_line_should_sync_meta(struct pblk *pblk) 1555static void pblk_line_should_sync_meta(struct pblk *pblk)