Received: by 10.192.165.156 with SMTP id m28csp1099273imm; Wed, 11 Apr 2018 12:23:25 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+BZgb9f3poTL/ycEZWVOkJV1+ARL6tWmd+i4kdFnhHrOPFSKyJwqNHgI566wrdiNpSLB1+ X-Received: by 2002:a17:902:728f:: with SMTP id d15-v6mr6577165pll.119.1523474605795; Wed, 11 Apr 2018 12:23:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523474605; cv=none; d=google.com; s=arc-20160816; b=FtpN8rCI3VfGWNPc7ksOCFtZHmMWLlGP7iJsVVRZxa8Gyb6gLxowry6PKZ8+g3tK9H AMQ4lO5jlJokqHo/z+UwDxVsZfYwzOntEaax11DBfN3Nn4h1em6Mt4uDUHL34qjLqdVb zObPJ7THNnU8KhZrVJtMO+VAthGaObCdndkWAgO+WGn6/WU1IMEDYX5KhbpF6R6CSkth Oftvpwnghl66KxDRqVpUFf9jqKG0BAXBCalbfwOUB4m5Rci3UlQ9EzOTDV4PBsI8vmEF SIRhV4xSOPDwObnjRMm+mfc9OX4/ygG7I5vSTwM1NZQVcomSxJhxCUz93q9XYL1b68Rr TApw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=P488JksD0DhqI89FSbxWoft9hE1NhkHIZu3HmygmRn4=; b=D6SAlm+gN4OKbOYYDmpfheT8udyBvldv4HUG8FFLkj5l0HRMD+Ait6E8zYeY2UvmQL rHtAW16IdLWHwoziuS2AmhrX48SoOTsJTvpskgU5NChBbl4FxHdacRp7Azq7DM/tSGXB TUBazOyD3vUuM/cfTDHnFOn452MZnCMe9WP8G4ji86uUpbnO8Li9Vl7tc0p3sIMNrACa n8oRczY4kMxtNHUYcMjMrygLKp8zEsIK4uIj1/P9PtAvp31Z5dlZ1OrA3mynUG87zfDn f6olCUXw97Ot4aixqAScycBkjLGdKl4+UOiiB17Tx7bmYmHpx5DPXLaKTw+plx/Kk8rq YQJw== ARC-Authentication-Results: i=1; mx.google.com; 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 j11si1092225pgv.713.2018.04.11.12.22.49; Wed, 11 Apr 2018 12:23:25 -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; 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 S935115AbeDKTS1 (ORCPT + 99 others); Wed, 11 Apr 2018 15:18:27 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:40264 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934913AbeDKTEz (ORCPT ); Wed, 11 Apr 2018 15:04:55 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 735B8BAC; Wed, 11 Apr 2018 19:04:53 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Miquel Raynal , Boris Brezillon , Sasha Levin Subject: [PATCH 4.9 268/310] mtd: mtd_oobtest: Handle bitflips during reads Date: Wed, 11 Apr 2018 20:36:47 +0200 Message-Id: <20180411183634.179579250@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180411183622.305902791@linuxfoundation.org> References: <20180411183622.305902791@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Miquel Raynal [ Upstream commit 12663b442e5ac5aa3d6097cd3f287c71ba46d26e ] Reads from NAND devices usually trigger bitflips, this is an expected behavior. While bitflips are under a given threshold, the MTD core returns 0. However, when the number of corrected bitflips is above this same threshold, -EUCLEAN is returned to inform the upper layer that this block is slightly dying and soon the ECC engine will be overtaken so actions should be taken to move the data out of it. This particular condition should not be treated like an error and the test should continue. Signed-off-by: Miquel Raynal Signed-off-by: Boris Brezillon Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/mtd/tests/oobtest.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) --- a/drivers/mtd/tests/oobtest.c +++ b/drivers/mtd/tests/oobtest.c @@ -193,6 +193,9 @@ static int verify_eraseblock(int ebnum) ops.datbuf = NULL; ops.oobbuf = readbuf; err = mtd_read_oob(mtd, addr, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err || ops.oobretlen != use_len) { pr_err("error: readoob failed at %#llx\n", (long long)addr); @@ -227,6 +230,9 @@ static int verify_eraseblock(int ebnum) ops.datbuf = NULL; ops.oobbuf = readbuf; err = mtd_read_oob(mtd, addr, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err || ops.oobretlen != mtd->oobavail) { pr_err("error: readoob failed at %#llx\n", (long long)addr); @@ -286,6 +292,9 @@ static int verify_eraseblock_in_one_go(i /* read entire block's OOB at one go */ err = mtd_read_oob(mtd, addr, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err || ops.oobretlen != len) { pr_err("error: readoob failed at %#llx\n", (long long)addr); @@ -527,6 +536,9 @@ static int __init mtd_oobtest_init(void) pr_info("attempting to start read past end of OOB\n"); pr_info("an error is expected...\n"); err = mtd_read_oob(mtd, addr0, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err) { pr_info("error occurred as expected\n"); err = 0; @@ -571,6 +583,9 @@ static int __init mtd_oobtest_init(void) pr_info("attempting to read past end of device\n"); pr_info("an error is expected...\n"); err = mtd_read_oob(mtd, mtd->size - mtd->writesize, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err) { pr_info("error occurred as expected\n"); err = 0; @@ -615,6 +630,9 @@ static int __init mtd_oobtest_init(void) pr_info("attempting to read past end of device\n"); pr_info("an error is expected...\n"); err = mtd_read_oob(mtd, mtd->size - mtd->writesize, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err) { pr_info("error occurred as expected\n"); err = 0; @@ -684,6 +702,9 @@ static int __init mtd_oobtest_init(void) ops.datbuf = NULL; ops.oobbuf = readbuf; err = mtd_read_oob(mtd, addr, &ops); + if (mtd_is_bitflip(err)) + err = 0; + if (err) goto out; if (memcmpshow(addr, readbuf, writebuf,