lightnvm: pass flag on graceful teardown to targets
If the namespace is unregistered before the LightNVM target is removed (e.g., on hot unplug) it is too late for the target to store any metadata on the device - any attempt to write to the device will fail. In this case, pass on a "gracefull teardown" flag to the target to let it know when this happens. In the case of pblk, we pad the open line (close all open chunks) to improve data retention. In the event of an ungraceful shutdown, avoid this part and just clean up. Signed-off-by: Javier González <javier@cnexlabs.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
此提交包含在:
@@ -649,7 +649,7 @@ fail_free_main_kthread:
|
||||
return ret;
|
||||
}
|
||||
|
||||
void pblk_gc_exit(struct pblk *pblk)
|
||||
void pblk_gc_exit(struct pblk *pblk, bool graceful)
|
||||
{
|
||||
struct pblk_gc *gc = &pblk->gc;
|
||||
|
||||
@@ -663,10 +663,12 @@ void pblk_gc_exit(struct pblk *pblk)
|
||||
if (gc->gc_reader_ts)
|
||||
kthread_stop(gc->gc_reader_ts);
|
||||
|
||||
flush_workqueue(gc->gc_reader_wq);
|
||||
destroy_workqueue(gc->gc_reader_wq);
|
||||
if (graceful) {
|
||||
flush_workqueue(gc->gc_reader_wq);
|
||||
flush_workqueue(gc->gc_line_reader_wq);
|
||||
}
|
||||
|
||||
flush_workqueue(gc->gc_line_reader_wq);
|
||||
destroy_workqueue(gc->gc_reader_wq);
|
||||
destroy_workqueue(gc->gc_line_reader_wq);
|
||||
|
||||
if (gc->gc_writer_ts)
|
||||
|
新增問題並參考
封鎖使用者