diff options
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r-- | drivers/lightnvm/pblk-init.c | 14 |
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 | ||
1121 | static void pblk_tear_down(struct pblk *pblk) | 1121 | static 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 | ||
1131 | static void pblk_exit(void *private) | 1133 | static 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)); |