Messages in this thread | | | Date | Fri, 14 Aug 2015 11:02:07 +0100 | Subject | Re: [PATCH v4 7/7] mtd: spi-nor: add read loop | From | Andrew Murray <> |
| |
On 14 August 2015 at 10:23, Michal Suchanek <hramrach@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 <hramrach@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/
| |