Parcourir la source

lightnvm: pblk: recover partially written lines correctly

When recovering partially written lines, the valid sector
count must be decreased by the number of padded sectors
in the line.

Update line recovery to take all ADDR_EMPTY(padded) sectors
into account.

Signed-off-by: Hans Holmberg <hans.holmberg@cnexlabs.com>
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Hans Holmberg il y a 7 ans
Parent
commit
92957091e9
1 fichiers modifiés avec 4 ajouts et 4 suppressions
  1. 4 4
      drivers/lightnvm/pblk-recovery.c

+ 4 - 4
drivers/lightnvm/pblk-recovery.c

@@ -133,8 +133,8 @@ static int pblk_recov_l2p_from_emeta(struct pblk *pblk, struct pblk_line *line)
 	struct pblk_emeta *emeta = line->emeta;
 	struct pblk_emeta *emeta = line->emeta;
 	struct line_emeta *emeta_buf = emeta->buf;
 	struct line_emeta *emeta_buf = emeta->buf;
 	__le64 *lba_list;
 	__le64 *lba_list;
-	int data_start;
-	int nr_data_lbas, nr_valid_lbas, nr_lbas = 0;
+	int data_start, data_end;
+	int nr_valid_lbas, nr_lbas = 0;
 	int i;
 	int i;
 
 
 	lba_list = pblk_recov_get_lba_list(pblk, emeta_buf);
 	lba_list = pblk_recov_get_lba_list(pblk, emeta_buf);
@@ -142,10 +142,10 @@ static int pblk_recov_l2p_from_emeta(struct pblk *pblk, struct pblk_line *line)
 		return 1;
 		return 1;
 
 
 	data_start = pblk_line_smeta_start(pblk, line) + lm->smeta_sec;
 	data_start = pblk_line_smeta_start(pblk, line) + lm->smeta_sec;
-	nr_data_lbas = lm->sec_per_line - lm->emeta_sec[0];
+	data_end = lm->sec_per_line - lm->emeta_sec[0];
 	nr_valid_lbas = le64_to_cpu(emeta_buf->nr_valid_lbas);
 	nr_valid_lbas = le64_to_cpu(emeta_buf->nr_valid_lbas);
 
 
-	for (i = data_start; i < nr_data_lbas && nr_lbas < nr_valid_lbas; i++) {
+	for (i = data_start; i < data_end; i++) {
 		struct ppa_addr ppa;
 		struct ppa_addr ppa;
 		int pos;
 		int pos;