diff options
| author | Javier González <jg@lightnvm.io> | 2017-06-30 11:56:40 -0400 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2017-06-30 13:08:18 -0400 |
| commit | ee8d5c1ad54e48ec44b6ae9cf91144fcab6ebf83 (patch) | |
| tree | cd5e6be51067d2eb47fa42c031a723644593d94f /drivers/lightnvm/pblk-core.c | |
| parent | de54e703a4229e4688eb77b32b1c27861384e22a (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.c | 5 |
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 | ||
| 1552 | static void pblk_line_should_sync_meta(struct pblk *pblk) | 1555 | static void pblk_line_should_sync_meta(struct pblk *pblk) |
