Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp676924imm; Fri, 1 Jun 2018 07:46:00 -0700 (PDT) X-Google-Smtp-Source: ADUXVKK1sUhAhd+mXXamuCSah1BLBjLAcLeaieDXFAbH4eZPPKzq3XpiVunxuOpBV62JgzD8IQSU X-Received: by 2002:a62:a6dd:: with SMTP id r90-v6mr6143202pfl.60.1527864360103; Fri, 01 Jun 2018 07:46:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527864360; cv=none; d=google.com; s=arc-20160816; b=DZWfSk4+QGH5nJfMWPUJ9VA6hiAWRmaJWM32M3wOJNWQu7H1m/Lr1Vya+4nCEvztnq Y9xSV0ps3YyYB3fA5wKAk06y1o4Rec2Ghh0YjOwpJLn02BFc8lycfFCHjfr9iALM2N/x TNN1l6wSyGHxQ18SgKGzNzNF9Afk0mKQFuBet2gUgSTXbgZZquv98pkjEzFY5KT9FILQ 0l19BJsCundMNURrR6uyUtuiuRWMM0WLGtOEKWbEx8kNhELM6q39jEMetW09g5tBSPWO +5VrhwOb2qwTKzS1JDsWkOAfg5Ite53i3P0MuL5ygKR78VdLZ1BWhX7i6D6Jj0qxOPFX 4d7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=IoMj0i1WwSi3hH6LSz9EQAQwic4BgMJ8z08dFz4WZyM=; b=C1bOlf88UcKlVWg3kBbrXRMDb/oHDMo/sCVmA7vmS5ReyNHvsO/zoP7fQ1Fq4BAS1x Yi3ggOmcJjMN10p7ebL+Z02QbU5mSyE0wXJXybF8BW38eCrSsI8+FQQOuML08BmO2YQY jGI1f9PD1LV0p4Jz5cpx4GiZu7Yx2mtRqo8Y9Uk4VZFa2YpQsF9ZVKg85J8tpPEBN+Uj O5Hvcbp5rB1NP/B7pQLK4JEcdMhPIhoZXDkqALQjtP+xytUjThfDzEPCSz4pnuJbMHNI xo54ALfEaiB6rBLfjHLg6OTrv0wHmAn8NirhiRWaUaJXARKiO6k/N9RHusmM9af4XKdJ XIFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lightnvm-io.20150623.gappssmtp.com header.s=20150623 header.b=lQNaeVpK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b26-v6si15060391pgw.394.2018.06.01.07.45.46; Fri, 01 Jun 2018 07:46:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@lightnvm-io.20150623.gappssmtp.com header.s=20150623 header.b=lQNaeVpK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752437AbeFAOoq (ORCPT + 99 others); Fri, 1 Jun 2018 10:44:46 -0400 Received: from mail-lf0-f65.google.com ([209.85.215.65]:34640 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752429AbeFAOoE (ORCPT ); Fri, 1 Jun 2018 10:44:04 -0400 Received: by mail-lf0-f65.google.com with SMTP id o9-v6so15205626lfk.1 for ; Fri, 01 Jun 2018 07:44:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lightnvm-io.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IoMj0i1WwSi3hH6LSz9EQAQwic4BgMJ8z08dFz4WZyM=; b=lQNaeVpKHmoN6KkuHJPMzWOW49Pm8LUYST+T0cMliB3xkuMXTY+UG4B9thI8dly/Gt 0/O+PvmZXvE3Ivfn4SOGDwUqrrRSaoWQu1b57UOXDxNj4+JV2SrMk1GvCwVu1XEdGZwi 5qU8Dd14ZyEfPtmiOiiObWxxJd6P/OSJLaLaqdr+i/nYyBDRv8sLhraAM7+084NVXmLh QX400NG5nSqXpNDKYPZUnEaEZG4Ccz6XFTKRMb51Aqh4ahLOdnUQavENpmN7yV5+0qiu QJk2/wjsafP04wf8ocIx0qyXQxNuiRAsCmTomJk0I/0KhNZiKLiEnnEZmnVZg6RCaZZ0 BGVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IoMj0i1WwSi3hH6LSz9EQAQwic4BgMJ8z08dFz4WZyM=; b=OIppJzs2yxS1X7tWLEZA2YvHx8/fvwioqAx+rXsdC3agWoDkRo92Jb9396FqOHoBO1 jzJDk8Jx4dLChHKRQgtq/DLJNMjYbOd3+JzfqWLF//IPBzGaY8Rlcahhs/0s0NzEFU4Y XtQ2VIoSVT27X04v9XHSBUGUJuVJwNXunnE3XMJdjC1Sooma68YceVVQkEE5NEe/KWn3 uUUeYNVEvhGcmIXEqXRk/cFttdoCqZZe9S1gSlJdmnYPVIvd1dKg/N2KC4k1gQE3kXb4 2Sck0pJP598sdlrWCW5ReKqjv6QFSc93EnSQb0skjR088SpnhKP3jOsbLSkq59YVxiT2 d8RQ== X-Gm-Message-State: ALKqPwd/nujM6WklSsY/5SxMhnyjTG7nPpvv8aI6gvJpqZiOtdgK2HVs KLM6xCinGAbINUuaD4xYBx1nIQ== X-Received: by 2002:a2e:8759:: with SMTP id q25-v6mr8300968ljj.66.1527864243364; Fri, 01 Jun 2018 07:44:03 -0700 (PDT) Received: from Macroninja.cnexlabs.com (95-166-82-66-cable.dk.customer.tdc.net. [95.166.82.66]) by smtp.gmail.com with ESMTPSA id e65-v6sm356488lff.13.2018.06.01.07.44.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Jun 2018 07:44:02 -0700 (PDT) From: =?UTF-8?q?Matias=20Bj=C3=B8rling?= To: axboe@fb.com Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, javier@cnexlabs.com, igor.j.konopko@intel.com, marcin.dziegielewski@intel.com, Hans Holmberg , =?UTF-8?q?Matias=20Bj=C3=B8rling?= Subject: [GIT PULL 08/10] lightnvm: pblk: only try to recover lines with written smeta Date: Fri, 1 Jun 2018 16:41:12 +0200 Message-Id: <20180601144114.17490-9-mb@lightnvm.io> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180601144114.17490-1-mb@lightnvm.io> References: <20180601144114.17490-1-mb@lightnvm.io> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Hans Holmberg When switching between different lun configurations, there is no guarantee that all lines that contain closed/open chunks have some valid data to recover. Check that the smeta chunk has been written to instead. Also skip bad lines (that does not have enough good chunks). Signed-off-by: Hans Holmberg Signed-off-by: Matias Bjørling --- drivers/lightnvm/pblk-recovery.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/lightnvm/pblk-recovery.c b/drivers/lightnvm/pblk-recovery.c index 788dce87043e..598342833d0d 100644 --- a/drivers/lightnvm/pblk-recovery.c +++ b/drivers/lightnvm/pblk-recovery.c @@ -774,18 +774,30 @@ static void pblk_recov_wa_counters(struct pblk *pblk, } static int pblk_line_was_written(struct pblk_line *line, - struct pblk_line_meta *lm) + struct pblk *pblk) { - int i; - int state_mask = NVM_CHK_ST_OFFLINE | NVM_CHK_ST_FREE; + struct pblk_line_meta *lm = &pblk->lm; + struct nvm_tgt_dev *dev = pblk->dev; + struct nvm_geo *geo = &dev->geo; + struct nvm_chk_meta *chunk; + struct ppa_addr bppa; + int smeta_blk; - for (i = 0; i < lm->blk_per_line; i++) { - if (!(line->chks[i].state & state_mask)) - return 1; - } + if (line->state == PBLK_LINESTATE_BAD) + return 0; - return 0; + smeta_blk = find_first_zero_bit(line->blk_bitmap, lm->blk_per_line); + if (smeta_blk >= lm->blk_per_line) + return 0; + + bppa = pblk->luns[smeta_blk].bppa; + chunk = &line->chks[pblk_ppa_to_pos(geo, bppa)]; + + if (chunk->state & NVM_CHK_ST_FREE) + return 0; + + return 1; } struct pblk_line *pblk_recov_l2p(struct pblk *pblk) @@ -824,7 +836,7 @@ struct pblk_line *pblk_recov_l2p(struct pblk *pblk) line->lun_bitmap = ((void *)(smeta_buf)) + sizeof(struct line_smeta); - if (!pblk_line_was_written(line, lm)) + if (!pblk_line_was_written(line, pblk)) continue; /* Lines that cannot be read are assumed as not written here */ -- 2.11.0