diff mbox

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

Message ID 1309459537-312-3-git-send-email-robotboy@chromium.org
State Accepted
Headers show

Commit Message

Anton staaf June 30, 2011, 6:45 p.m. UTC
Previously reading 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.

Signed-off-by: Anton Staaf <robotboy@chromium.org>
Cc: Andy Fleming <afleming@freescale.com>
Cc: Detlev Zundel <dzu@denx.de>
---
 fs/ext2/dev.c |   42 +++++++++++++++---------------------------
 1 files changed, 15 insertions(+), 27 deletions(-)

Comments

Detlev Zundel July 1, 2011, 1:30 p.m. UTC | #1
Hi Anton,

> Previously reading 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.
>
> Signed-off-by: Anton Staaf <robotboy@chromium.org>
> Cc: Andy Fleming <afleming@freescale.com>
> Cc: Detlev Zundel <dzu@denx.de>

Acked-by: Detlev Zundel <dzu@denx.de>
Wolfgang Denk July 28, 2011, 1:36 p.m. UTC | #2
Dear Anton Staaf,

In message <1309459537-312-3-git-send-email-robotboy@chromium.org> you wrote:
> Previously reading 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.
> 
> Signed-off-by: Anton Staaf <robotboy@chromium.org>
> Cc: Andy Fleming <afleming@freescale.com>
> Cc: Detlev Zundel <dzu@denx.de>
> ---
>  fs/ext2/dev.c |   42 +++++++++++++++---------------------------
>  1 files changed, 15 insertions(+), 27 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk
diff mbox

Patch

diff --git a/fs/ext2/dev.c b/fs/ext2/dev.c
index 4365b3b..78851d0 100644
--- a/fs/ext2/dev.c
+++ b/fs/ext2/dev.c
@@ -53,7 +53,7 @@  int ext2fs_set_blk_dev(block_dev_desc_t *rbdd, int part)
 int ext2fs_devread(int sector, int byte_offset, int byte_len, char *buf)
 {
 	char sec_buf[SECTOR_SIZE];
-	unsigned block_len;
+	unsigned sectors;
 
 	/*
 	 *  Check partition boundaries
@@ -98,35 +98,23 @@  int ext2fs_devread(int sector, int byte_offset, int byte_len, char *buf)
 		sector++;
 	}
 
-	if (byte_len == 0)
-		return 1;
-
 	/*  read sector aligned part */
-	block_len = byte_len & ~(SECTOR_SIZE - 1);
-
-	if (block_len == 0) {
-		u8 p[SECTOR_SIZE];
-
-		block_len = SECTOR_SIZE;
-		ext2fs_block_dev_desc->block_read(ext2fs_block_dev_desc->dev,
-						  part_info.start + sector,
-						  1, (unsigned long *)p);
-		memcpy(buf, p, byte_len);
-		return 1;
-	}
+	sectors = byte_len / SECTOR_SIZE;
+
+	if (sectors > 0) {
+		if (ext2fs_block_dev_desc->block_read(
+			ext2fs_block_dev_desc->dev,
+			part_info.start + sector,
+			sectors,
+			(unsigned long *) buf) != sectors) {
+			printf(" ** %s read error - block\n", __func__);
+			return 0;
+		}
 
-	if (ext2fs_block_dev_desc->block_read(ext2fs_block_dev_desc->dev,
-					      part_info.start + sector,
-					      block_len / SECTOR_SIZE,
-					      (unsigned long *) buf) !=
-	    block_len / SECTOR_SIZE) {
-		printf(" ** %s read error - block\n", __func__);
-		return 0;
+		buf += sectors * SECTOR_SIZE;
+		byte_len -= sectors * SECTOR_SIZE;
+		sector += sectors;
 	}
-	block_len = byte_len & ~(SECTOR_SIZE - 1);
-	buf += block_len;
-	byte_len -= block_len;
-	sector += block_len / SECTOR_SIZE;
 
 	if (byte_len != 0) {
 		/* read rest of data which are not in whole sector */