[U-Boot] [PATCH 2/2] ext2: Simplify partial sector access logic

Anton Staaf
2011-06-29T19:23:06Z

On Wed, Jun 29, 2011 at 6:04 AM, Detlev Zundel <dzu@denx.de> wrote:

> Hi Anton,
>
> > Previously reading or writing zero full sectors (reading the end of
> > one sector and the beginning of the next for example) was special
> > cased and involved stack allocating a second sector buffer. This
> > change uses the same code path for this case as well as when there
> > are a non-zero number of full sectors to access. The result is
> > easier to read and reduces the maximum stack used.
>
> It's non-trivial to prove that your change is equivalent and
> unfortunately I do not have enough time to do this. If your tests work,
> than this is certainly a good indication ;) The one thing I'd like to be
> sure is that the previous code looks like it used the stack for whole
> sectors but copied only parts of this to the provided address pointer.
> Your new code looks like it always writes whole sectors to the provided
> pointer. Is this safe even if the caller allocated space without
> overhead for whole sectors?

Thanks for the reviews by the way. My new version of the code still bounces
partial sector reads (both at the beginning and end of the range) through a
stack allocated sector buffer. The portion that is writing directly to the
users buffer is only used for reading the full sectors. The middle section
(in the "if (sectors > 0)" block) is reading only as many sectors as are
specified by (byte_len / SECTOR_SIZE). byte_len, buf and sector at this
point in the function have been updated by the first block that deals with
reading the unaligned start of the data (if it exists).

Also, I have tested this code on a Tegra board using ext2ls and ext2load of
a kernel image.

Thanks,
Anton

Cheers
> Detlev
>
> --
> In God we trust. All others we monitor
> -- NSA motto
> --
> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de
>