aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/lightnvm/pblk-recovery.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/lightnvm/pblk-recovery.c b/drivers/lightnvm/pblk-recovery.c
index 017874e03253..357e52980f2f 100644
--- a/drivers/lightnvm/pblk-recovery.c
+++ b/drivers/lightnvm/pblk-recovery.c
@@ -93,10 +93,24 @@ static int pblk_recov_l2p_from_emeta(struct pblk *pblk, struct pblk_line *line)
93static void pblk_update_line_wp(struct pblk *pblk, struct pblk_line *line, 93static void pblk_update_line_wp(struct pblk *pblk, struct pblk_line *line,
94 u64 written_secs) 94 u64 written_secs)
95{ 95{
96 struct pblk_line_mgmt *l_mg = &pblk->l_mg;
96 int i; 97 int i;
97 98
98 for (i = 0; i < written_secs; i += pblk->min_write_pgs) 99 for (i = 0; i < written_secs; i += pblk->min_write_pgs)
99 pblk_alloc_page(pblk, line, pblk->min_write_pgs); 100 __pblk_alloc_page(pblk, line, pblk->min_write_pgs);
101
102 spin_lock(&l_mg->free_lock);
103 if (written_secs > line->left_msecs) {
104 /*
105 * We have all data sectors written
106 * and some emeta sectors written too.
107 */
108 line->left_msecs = 0;
109 } else {
110 /* We have only some data sectors written. */
111 line->left_msecs -= written_secs;
112 }
113 spin_unlock(&l_mg->free_lock);
100} 114}
101 115
102static u64 pblk_sec_in_open_line(struct pblk *pblk, struct pblk_line *line) 116static u64 pblk_sec_in_open_line(struct pblk *pblk, struct pblk_line *line)