All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Matias Bjørling" <mb@lightnvm.io>
To: axboe@fb.com
Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Hans Holmberg" <hans.holmberg@cnexlabs.com>,
	"Matias Bjørling" <mb@lightnvm.io>
Subject: [GIT PULL 05/21] lightnvm: pblk: account for write error sectors in emeta
Date: Tue, 11 Dec 2018 20:16:11 +0100	[thread overview]
Message-ID: <20181211191627.15542-6-mb@lightnvm.io> (raw)
In-Reply-To: <20181211191627.15542-1-mb@lightnvm.io>

From: Hans Holmberg <hans.holmberg@cnexlabs.com>

Lines inflicted with write errors lines might be recovered
if they have not been recycled after write error garbage collection.

Ensure that the emeta accounting of valid lbas is correct
for such lines to avoid recovery inconsistencies.

Signed-off-by: Hans Holmberg <hans.holmberg@cnexlabs.com>
Reviewed-by: Javier González <javier@javigon.com>
Signed-off-by: Matias Bjørling <mb@lightnvm.io>
---
 drivers/lightnvm/pblk-write.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/lightnvm/pblk-write.c b/drivers/lightnvm/pblk-write.c
index 3ddd16f47106..750f04b8a227 100644
--- a/drivers/lightnvm/pblk-write.c
+++ b/drivers/lightnvm/pblk-write.c
@@ -105,14 +105,20 @@ static void pblk_complete_write(struct pblk *pblk, struct nvm_rq *rqd,
 }
 
 /* Map remaining sectors in chunk, starting from ppa */
-static void pblk_map_remaining(struct pblk *pblk, struct ppa_addr *ppa)
+static void pblk_map_remaining(struct pblk *pblk, struct ppa_addr *ppa,
+		int rqd_ppas)
 {
 	struct pblk_line *line;
 	struct ppa_addr map_ppa = *ppa;
+	__le64 addr_empty = cpu_to_le64(ADDR_EMPTY);
+	__le64 *lba_list;
 	u64 paddr;
 	int done = 0;
+	int n = 0;
 
 	line = pblk_ppa_to_line(pblk, *ppa);
+	lba_list = emeta_to_lbas(pblk, line->emeta->buf);
+
 	spin_lock(&line->lock);
 
 	while (!done)  {
@@ -121,10 +127,17 @@ static void pblk_map_remaining(struct pblk *pblk, struct ppa_addr *ppa)
 		if (!test_and_set_bit(paddr, line->map_bitmap))
 			line->left_msecs--;
 
+		if (n < rqd_ppas && lba_list[paddr] != addr_empty)
+			line->nr_valid_lbas--;
+
+		lba_list[paddr] = addr_empty;
+
 		if (!test_and_set_bit(paddr, line->invalid_bitmap))
 			le32_add_cpu(line->vsc, -1);
 
 		done = nvm_next_ppa_in_chk(pblk->dev, &map_ppa);
+
+		n++;
 	}
 
 	line->w_err_gc->has_write_err = 1;
@@ -202,7 +215,7 @@ static void pblk_submit_rec(struct work_struct *work)
 
 	pblk_log_write_err(pblk, rqd);
 
-	pblk_map_remaining(pblk, ppa_list);
+	pblk_map_remaining(pblk, ppa_list, rqd->nr_ppas);
 	pblk_queue_resubmit(pblk, c_ctx);
 
 	pblk_up_rq(pblk, c_ctx->lun_bitmap);
-- 
2.17.1


  parent reply	other threads:[~2018-12-11 19:18 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-11 19:16 [GIT PULL 00/21] lightnvm updates for 4.21 Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 01/21] lightnvm: pblk: ignore the smeta oob area scan Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 02/21] lightnvm: Fix uninitialized return value in nvm_get_chunk_meta() Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 03/21] lightnvm: pblk: fix chunk close trace event check Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 04/21] lightnvm: pblk: fix resubmission of overwritten write err lbas Matias Bjørling
2018-12-11 19:16 ` Matias Bjørling [this message]
2018-12-11 19:16 ` [GIT PULL 06/21] lightnvm: pblk: stop writes gracefully when running out of lines Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 07/21] lightnvm: pblk: set conservative threshold for user writes Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 08/21] lightnvm: pblk: remove unused macro Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 09/21] lightnvm: pblk: fix pblk_lines_init error handling path Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 10/21] lightnvm: pblk: remove dead code in pblk_recov_l2p Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 11/21] lightnvm: pblk: fix spelling in comment Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 12/21] lightnvm: pblk: add lock protection to list operations Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 13/21] lightnvm: pblk: add comments wrt locking in recovery path Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 14/21] lightnvm: simplify geometry enumeration Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 15/21] lightnvm: pblk: avoid ref warning on cache creation Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 16/21] lightnvm: pblk: move lba list to partial read context Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 17/21] lightnvm: pblk: add helpers for OOB metadata Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 18/21] lightnvm: dynamic DMA pool entry size Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 19/21] lightnvm: disable interleaved metadata Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 20/21] lightnvm: pblk: support packed metadata Matias Bjørling
2018-12-11 19:16 ` [GIT PULL 21/21] lightnvm: pblk: do not overwrite ppa list with meta list Matias Bjørling
2018-12-11 19:23 ` [GIT PULL 00/21] lightnvm updates for 4.21 Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181211191627.15542-6-mb@lightnvm.io \
    --to=mb@lightnvm.io \
    --cc=axboe@fb.com \
    --cc=hans.holmberg@cnexlabs.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.