Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26f9bcad authored by Michal Suchanek's avatar Michal Suchanek Committed by Brian Norris
Browse files

mtd: spi-nor: add read loop



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: default avatarMichal Suchanek <hramrach@gmail.com>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
Tested-by Cyrille Pitchen <cyrille.pitchen@atmel.com>
Acked-by: default avatarMichal Suchanek <hramrach@gmail.com>
Tested-by: default avatarMichal Suchanek <hramrach@gmail.com>
parent e5d05cbd
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -1031,14 +1031,27 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
	if (ret)
		return ret;

	while (len) {
		ret = nor->read(nor, from, len, buf);

	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
		if (ret == 0) {
			/* We shouldn't see 0-length reads */
			ret = -EIO;
			goto read_err;
		}
		if (ret < 0)
		return ret;
			goto read_err;

		WARN_ON(ret > len);
		*retlen += ret;
	return 0;
		buf += ret;
		from += ret;
		len -= ret;
	}
	ret = 0;

read_err:
	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
	return ret;
}

static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,