On 14 August 2015 at 10:23, Michal Suchanek <hramr...@gmail.com> wrote: > 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 <hramr...@gmail.com> > --- > 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 e0ae9cf..246fac7 100644 > --- a/drivers/mtd/spi-nor/spi-nor.c > +++ b/drivers/mtd/spi-nor/spi-nor.c > @@ -738,14 +738,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; > + > + BUG_ON(ret > len); > + *retlen += ret;
Is *retlen initialized to 0 anywhere? Andrew Murray > + 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.1.4 > > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/