All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Suchanek <hramrach@gmail.com>
To: Heiner Kallweit <hkallweit1@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Brian Norris <computersforpeace@gmail.com>,
	Han Xu <han.xu@freescale.com>, Mark Brown <broonie@kernel.org>,
	Michal Suchanek <hramrach@gmail.com>,
	Boris Brezillon <boris.brezillon@free-electrons.com>,
	Javier Martinez Canillas <javier@osg.samsung.com>,
	Stephen Warren <swarren@nvidia.com>,
	"Andrew F. Davis" <afd@ti.com>, Marek Vasut <marex@denx.de>,
	"Rafał Miłecki" <zajec5@gmail.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Gabor Juhos <juhosg@openwrt.org>,
	"Bean Huo 霍斌斌 " <beanhuo@micron.com>,
	Furquan Shaikh <furquan@google.com>,
	linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-spi@vger.kernel.org,
Subject: [PATCH v5 07/10] mtd: spi-nor: add read loop
Date: 1 Dec 2015 16:51:05 -0000	[thread overview]
Message-ID: <42c51bf17e21a5ae658174000f14035a56b0879b.1448988089.git.hramrach@gmail.com> (raw)
In-Reply-To: <cover.1448988089.git.hramrach@gmail.com>

mtdblock and ubi do not handle the situation when read returns less data
than requested. Loop in spi-nor until buffer is filled or an error is
returned.

Signed-off-by: Michal Suchanek <hramrach@gmail.com>

---
 - use WARN_ON rather than BUG_ON
---
 drivers/mtd/spi-nor/spi-nor.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 115c123..ded79ae 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -907,14 +907,22 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
 	if (ret)
 		return ret;
 
-	ret = nor->read(nor, from, len, buf);
+	while (len) {
+		ret = nor->read(nor, from, len, buf);
+		if (ret <= 0)
+			goto read_err;
+
+		WARN_ON(ret > len);
+		*retlen += ret;
+		buf += ret;
+		from += ret;
+		len -= ret;
+	}
+	ret = 0;
 
+read_err:
 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
-	if (ret < 0)
-		return ret;
-
-	*retlen += ret;
-	return 0;
+	return ret;
 }
 
 static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
-- 
2.6.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Michal Suchanek <hramrach@gmail.com>
To: Heiner Kallweit <hkallweit1@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Brian Norris <computersforpeace@gmail.com>,
	Han Xu <han.xu@freescale.com>, Mark Brown <broonie@kernel.org>,
	Michal Suchanek <hramrach@gmail.com>,
	Boris Brezillon <boris.brezillon@free-electrons.com>,
	Javier Martinez Canillas <javier@osg.samsung.com>,
	Stephen Warren <swarren@nvidia.com>,
	"Andrew F. Davis" <afd@ti.com>, Marek Vasut <marex@denx.de>,
	"Rafał Miłecki" <zajec5@gmail.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Gabor Juhos <juhosg@openwrt.org>,
	"Bean Huo 霍斌斌 " <beanhuo@micron.com>,
	Furquan Shaikh <furquan@google.com>,
	linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-spi@vger.kernel.org,
Subject: [PATCH v5 07/10] mtd: spi-nor: add read loop
Date: 1 Dec 2015 16:51:05 -0000	[thread overview]
Message-ID: <42c51bf17e21a5ae658174000f14035a56b0879b.1448988089.git.hramrach@gmail.com> (raw)
In-Reply-To: <cover.1448988089.git.hramrach@gmail.com>

mtdblock and ubi do not handle the situation when read returns less data
than requested. Loop in spi-nor until buffer is filled or an error is
returned.

Signed-off-by: Michal Suchanek <hramrach@gmail.com>

---
 - use WARN_ON rather than BUG_ON
---
 drivers/mtd/spi-nor/spi-nor.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 115c123..ded79ae 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -907,14 +907,22 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
 	if (ret)
 		return ret;
 
-	ret = nor->read(nor, from, len, buf);
+	while (len) {
+		ret = nor->read(nor, from, len, buf);
+		if (ret <= 0)
+			goto read_err;
+
+		WARN_ON(ret > len);
+		*retlen += ret;
+		buf += ret;
+		from += ret;
+		len -= ret;
+	}
+	ret = 0;
 
+read_err:
 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
-	if (ret < 0)
-		return ret;
-
-	*retlen += ret;
-	return 0;
+	return ret;
 }
 
 static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
-- 
2.6.2

  parent reply	other threads:[~2015-12-01 16:51 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-01 16:51 [PATCH v5 00/10] add error checking to spi-nor read and write Michal Suchanek
2015-12-01 16:51 ` Michal Suchanek
2015-12-01 16:51 ` [PATCH v5 01/10] mtd: spi-nor: change return value of read/write Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek
2015-12-01 16:51 ` [PATCH v5 02/10] mtd: m25p80: return amount of data transferred or error in read/write Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek
2015-12-01 16:51 ` [PATCH v5 04/10] mtd: spi-nor: check return value from read/write Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek
2015-12-01 16:51 ` [PATCH v5 03/10] mtd: fsl-quadspi: return amount of data read/written or error Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek
2015-12-01 16:51 ` Michal Suchanek [this message]
2015-12-01 16:51   ` [PATCH v5 07/10] mtd: spi-nor: add read loop Michal Suchanek
2015-12-01 16:51 ` [PATCH v5 06/10] mtd: spi-nor: simplify write loop Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek
2015-12-01 16:51 ` [PATCH v5 05/10] mtd: spi-nor: stop passing around retlen Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek
2015-12-01 16:51 ` [PATCH v5 08/10] spi: expose master transfer size limitation Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek
2015-12-01 19:58   ` Mark Brown
2015-12-01 19:58     ` Mark Brown
2015-12-01 21:07     ` Heiner Kallweit
2015-12-01 21:07       ` Heiner Kallweit
2015-12-01 21:31       ` Mark Brown
2015-12-01 21:31         ` Mark Brown
2015-12-02  9:55     ` Michal Suchanek
2015-12-02  9:55       ` Michal Suchanek
2015-12-01 23:12   ` Mark Brown
2015-12-02  9:38     ` Michal Suchanek
2015-12-02  9:38       ` Michal Suchanek
2015-12-04 14:30     ` Martin Sperl
2015-12-04 14:30       ` Martin Sperl
2015-12-04 16:45       ` Michal Suchanek
2015-12-04 16:45         ` Michal Suchanek
2015-12-07 20:18       ` Mark Brown
2015-12-07 20:18         ` Mark Brown
2015-12-01 16:51 ` [PATCH v5 10/10] spi: m25p80: read in spi_max_transfer_size chunks Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek
2015-12-01 16:51 ` [PATCH v5 09/10] spi: fsl-espi: expose maximum transfer size limit Michal Suchanek
2015-12-01 16:51   ` Michal Suchanek

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=42c51bf17e21a5ae658174000f14035a56b0879b.1448988089.git.hramrach@gmail.com \
    --to=hramrach@gmail.com \
    --cc=afd@ti.com \
    --cc=beanhuo@micron.com \
    --cc=boris.brezillon@free-electrons.com \
    --cc=broonie@kernel.org \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=furquan@google.com \
    --cc=han.xu@freescale.com \
    --cc=hkallweit1@gmail.com \
    --cc=javier@osg.samsung.com \
    --cc=juhosg@openwrt.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=marex@denx.de \
    --cc=mika.westerberg@linux.intel.com \
    --cc=swarren@nvidia.com \
    --cc=zajec5@gmail.com \
    /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.