[PATCH] ubi: do not re-read the data already read out in retry
Richard Weinberger
richard at nod.at
Fri Aug 21 02:17:56 PDT 2015
Am 21.08.2015 um 09:59 schrieb Dongsheng Yang:
> In ubi_io_read(), we will retry if current reading failed
> to read all data we wanted. But we are doing a full re-do
> in the re-try path. Actually, we can skip the data which
> we have already read out in the last reading.
>
> Signed-off-by: Dongsheng Yang <yangds.fnst at cn.fujitsu.com>
> ---
> drivers/mtd/ubi/io.c | 19 +++++++++++++------
> 1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
> index 5bbd1f0..a3ac643 100644
> --- a/drivers/mtd/ubi/io.c
> +++ b/drivers/mtd/ubi/io.c
> @@ -127,7 +127,7 @@ int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,
> int len)
> {
> int err, retries = 0;
> - size_t read;
> + size_t read, already_read = 0;
> loff_t addr;
>
> dbg_io("read %d bytes from PEB %d:%d", len, pnum, offset);
> @@ -165,6 +165,7 @@ int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,
> addr = (loff_t)pnum * ubi->peb_size + offset;
> retry:
> err = mtd_read(ubi->mtd, addr, len, &read, buf);
> + already_read += read;
Hmm, this change makes me nervous.
Brian, does MTD core guarantee that upon an erroneous mtd_read() the number of "read" bytes
in "buf" are valid?
So, my fear is that this change will introduce new regressions (due faulty MTD drivers, etc..)
without a real gain.
Thanks,
//richard
More information about the linux-mtd
mailing list