Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2128312imm; Mon, 28 May 2018 02:07:50 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJhfOlQjht4i6ieLY3KuO+9spqmvhrZRPpwjKC1Y+kg/MyO3eDDEDPD37ITdHqC7dThgv+Q X-Received: by 2002:a62:3e9a:: with SMTP id y26-v6mr1584624pfj.98.1527498470045; Mon, 28 May 2018 02:07:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527498470; cv=none; d=google.com; s=arc-20160816; b=aMzLIT/F/0OIk/3EaHFzS0z3lL+sS33hXVDmN7ZaQPtpviO1Yfgiig1FDoX9+T6HBz nEu6T3Ehcwc9Hn+uA/uUGAs5JkyYi35l0SW3ERIgV02/4epkBTAdtYO5V68QzV6/LZt6 zWoz/ZQm7z8fXwu0eZyC5R5ahVfaqUrvI7I/0HgFkeb/Cevy0j5BjxgZGLIj3+zeFQvf mwFBLIlr1zr1Mky6cBKMlFw67tkxi9CcD8OZU1XRTtBR/IuoZPiTJlKbJGwnzqIJpNLE fMG6f/ZvPU+cSBvTISVvpLDq79+eKqFB/UeyepcjeaOu5HUtI+K6zQAph6XVDCp1w6Wy difQ== 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=RN5moMV+ZbEEFpOtXfFzpcxZRT78lcIqk+wDqgiJwgU=; b=TmdkfrlxE8Cdbg9PbYX5JqbloxYdiAaumg+oxlmwbTlu1QoOKkgbXZrRDQrAX5aabT 10p8XYsFGKTgsiZFPtq0xLdQ1BJUsZo089lPBgBkD+l9bNDYs8v3vFMpQ7rZfhWpJGqf YhgM42FJ3oHBCTlobrkyxw9C0niBK3XSpVymx7HVbc3BXu5cozRANS2uqs+MuH+aZxsZ g4xByNrk3XKfvjLniAycCxhU+G8SS+cW98nrDNy9nHp4LK5/bVPssCg8eL5xmREtJ4d7 XWHf4eVL2EpXxl3jI6/r4mplRHFpKJsjUq+IqnIR6LWg1Lu7xmf3rBmlcqDx1LVpbHhO 3bZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lightnvm-io.20150623.gappssmtp.com header.s=20150623 header.b=sgl7B6wc; 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 k21-v6si1653055pgn.504.2018.05.28.02.07.35; Mon, 28 May 2018 02:07:50 -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=sgl7B6wc; 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 S1754210AbeE1JGh (ORCPT + 99 others); Mon, 28 May 2018 05:06:37 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:35416 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754161AbeE1I64 (ORCPT ); Mon, 28 May 2018 04:58:56 -0400 Received: by mail-wm0-f68.google.com with SMTP id o78-v6so30147827wmg.0 for ; Mon, 28 May 2018 01:58:55 -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=RN5moMV+ZbEEFpOtXfFzpcxZRT78lcIqk+wDqgiJwgU=; b=sgl7B6wc3jZ7uOgpaubFe6ihblCFh++tqZOp+heZs5iCr0tcLW1jrhAtfgmxPIbkNu lfoVIyLTFYaAS6XXKjxUM6hIZ28kkzFU5kJH45Do61EMXxhdA4CJFUwa77lfGLVT0fd/ 96vttsrHwfjaXqogsYPRrCZ9S0nuXwVKMSWNGKuOBXUc2rwJmI663p4/m8VfpBP3m3vX kDWdaXKUVCrC1IzfxRMX268frZPCEj53dQeHbHVLPE2Fuh1eRpnjtice7MWSx/dS2T+1 KWOkfkbGe46tryJ0tDGnCi9krgRR7GQpxJZe3gccpITwP8jHA42f3+zR+unxRpU1IG/W JHxQ== 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=RN5moMV+ZbEEFpOtXfFzpcxZRT78lcIqk+wDqgiJwgU=; b=tpvyH+whwsFTWf/Z5hGiuvsYf1SwQaK3fnWI2w4Pe1BM7RW2+hePc7LwdeW4r6zu1Z nn8dEgBOn2wD/ggPNWaT1rpNUitpcXcraeqpz2Cwx5SihFR8tcKKiY1kWRVbM19oJLUs RuDj8ki8EvW2SlQ+7SKcIv0h3OpXVvSaOxXhBtJBwKy7mPh+Iz8IacpxbdH7QAhH1enY 7Ynm1zZCSp0O5rxLXEwlDe0TMicM3F2tKaRvP1sCQl8oYcpfMj28c38zGbc+nyKqwd5b nXQKg83RvSoY55RuPUT0N2zYl48kmUc4SBt9llOKJRLGEVkG0Utk5oX3IpC0nd7ufDMV ESag== X-Gm-Message-State: ALKqPwcmPD3AFfDTax91zPhZ+DOWHcwUeSqa9lVRl9yI8Q4LBsC4VdkS hI5j2wfRVO9h6l9I7+JL/KqA7Q== X-Received: by 2002:a2e:9047:: with SMTP id n7-v6mr7726575ljg.50.1527497934650; Mon, 28 May 2018 01:58:54 -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 u2-v6sm5777848lji.4.2018.05.28.01.58.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 May 2018 01:58:53 -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, =?UTF-8?q?Javier=20Gonz=C3=A1lez?= , =?UTF-8?q?Javier=20Gonz=C3=A1lez?= , =?UTF-8?q?Matias=20Bj=C3=B8rling?= Subject: [GIT PULL 04/20] lightnvm: pblk: improve error msg on corrupted LBAs Date: Mon, 28 May 2018 10:58:25 +0200 Message-Id: <20180528085841.26684-5-mb@lightnvm.io> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180528085841.26684-1-mb@lightnvm.io> References: <20180528085841.26684-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: Javier González In the event of a mismatch between the read LBA and the metadata pointer reported by the device, improve the error message to be able to detect the offending physical address (PPA) mapped to the corrupted LBA. Signed-off-by: Javier González Signed-off-by: Matias Bjørling --- drivers/lightnvm/pblk-read.c | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/drivers/lightnvm/pblk-read.c b/drivers/lightnvm/pblk-read.c index 1f699c09e0ea..b201fc486adb 100644 --- a/drivers/lightnvm/pblk-read.c +++ b/drivers/lightnvm/pblk-read.c @@ -113,10 +113,11 @@ static int pblk_submit_read_io(struct pblk *pblk, struct nvm_rq *rqd) return NVM_IO_OK; } -static void pblk_read_check_seq(struct pblk *pblk, void *meta_list, - sector_t blba, int nr_lbas) +static void pblk_read_check_seq(struct pblk *pblk, struct nvm_rq *rqd, + sector_t blba) { - struct pblk_sec_meta *meta_lba_list = meta_list; + struct pblk_sec_meta *meta_lba_list = rqd->meta_list; + int nr_lbas = rqd->nr_ppas; int i; for (i = 0; i < nr_lbas; i++) { @@ -125,17 +126,27 @@ static void pblk_read_check_seq(struct pblk *pblk, void *meta_list, if (lba == ADDR_EMPTY) continue; - WARN(lba != blba + i, "pblk: corrupted read LBA\n"); + if (lba != blba + i) { +#ifdef CONFIG_NVM_DEBUG + struct ppa_addr *p; + + p = (nr_lbas == 1) ? &rqd->ppa_list[i] : &rqd->ppa_addr; + print_ppa(&pblk->dev->geo, p, "seq", i); +#endif + pr_err("pblk: corrupted read LBA (%llu/%llu)\n", + lba, (u64)blba + i); + WARN_ON(1); + } } } /* * There can be holes in the lba list. */ -static void pblk_read_check_rand(struct pblk *pblk, void *meta_list, - u64 *lba_list, int nr_lbas) +static void pblk_read_check_rand(struct pblk *pblk, struct nvm_rq *rqd, + u64 *lba_list, int nr_lbas) { - struct pblk_sec_meta *meta_lba_list = meta_list; + struct pblk_sec_meta *meta_lba_list = rqd->meta_list; int i, j; for (i = 0, j = 0; i < nr_lbas; i++) { @@ -145,14 +156,25 @@ static void pblk_read_check_rand(struct pblk *pblk, void *meta_list, if (lba == ADDR_EMPTY) continue; - meta_lba = le64_to_cpu(meta_lba_list[j++].lba); + meta_lba = le64_to_cpu(meta_lba_list[j].lba); if (lba != meta_lba) { +#ifdef CONFIG_NVM_DEBUG + struct ppa_addr *p; + int nr_ppas = rqd->nr_ppas; + + p = (nr_ppas == 1) ? &rqd->ppa_list[j] : &rqd->ppa_addr; + print_ppa(&pblk->dev->geo, p, "seq", j); +#endif pr_err("pblk: corrupted read LBA (%llu/%llu)\n", lba, meta_lba); WARN_ON(1); } + + j++; } + + WARN_ONCE(j != rqd->nr_ppas, "pblk: corrupted random request\n"); } static void pblk_read_put_rqd_kref(struct pblk *pblk, struct nvm_rq *rqd) @@ -197,7 +219,7 @@ static void __pblk_end_io_read(struct pblk *pblk, struct nvm_rq *rqd, WARN_ONCE(bio->bi_status, "pblk: corrupted read error\n"); #endif - pblk_read_check_seq(pblk, rqd->meta_list, r_ctx->lba, rqd->nr_ppas); + pblk_read_check_seq(pblk, rqd, r_ctx->lba); bio_put(bio); if (r_ctx->private) @@ -610,7 +632,7 @@ int pblk_submit_read_gc(struct pblk *pblk, struct pblk_gc_rq *gc_rq) goto err_free_bio; } - pblk_read_check_rand(pblk, rqd.meta_list, gc_rq->lba_list, rqd.nr_ppas); + pblk_read_check_rand(pblk, &rqd, gc_rq->lba_list, gc_rq->nr_secs); atomic_dec(&pblk->inflight_io); -- 2.11.0