aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/pblk-init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r--drivers/lightnvm/pblk-init.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
index 81c103b341bd..f47e95c0e5da 100644
--- a/drivers/lightnvm/pblk-init.c
+++ b/drivers/lightnvm/pblk-init.c
@@ -1118,23 +1118,25 @@ static void pblk_free(struct pblk *pblk)
1118 kfree(pblk); 1118 kfree(pblk);
1119} 1119}
1120 1120
1121static void pblk_tear_down(struct pblk *pblk) 1121static void pblk_tear_down(struct pblk *pblk, bool graceful)
1122{ 1122{
1123 pblk_pipeline_stop(pblk); 1123 if (graceful)
1124 __pblk_pipeline_flush(pblk);
1125 __pblk_pipeline_stop(pblk);
1124 pblk_writer_stop(pblk); 1126 pblk_writer_stop(pblk);
1125 pblk_rb_sync_l2p(&pblk->rwb); 1127 pblk_rb_sync_l2p(&pblk->rwb);
1126 pblk_rl_free(&pblk->rl); 1128 pblk_rl_free(&pblk->rl);
1127 1129
1128 pr_debug("pblk: consistent tear down\n"); 1130 pr_debug("pblk: consistent tear down (graceful:%d)\n", graceful);
1129} 1131}
1130 1132
1131static void pblk_exit(void *private) 1133static void pblk_exit(void *private, bool graceful)
1132{ 1134{
1133 struct pblk *pblk = private; 1135 struct pblk *pblk = private;
1134 1136
1135 down_write(&pblk_lock); 1137 down_write(&pblk_lock);
1136 pblk_gc_exit(pblk); 1138 pblk_gc_exit(pblk, graceful);
1137 pblk_tear_down(pblk); 1139 pblk_tear_down(pblk, graceful);
1138 1140
1139#ifdef CONFIG_NVM_DEBUG 1141#ifdef CONFIG_NVM_DEBUG
1140 pr_info("pblk exit: L2P CRC: %x\n", pblk_l2p_crc(pblk)); 1142 pr_info("pblk exit: L2P CRC: %x\n", pblk_l2p_crc(pblk));