[U-Boot] [PATCH 5/5] fs/ext4: Support device block sizes != 512 bytes.
From: Egbert Eich e...@suse.com The 512 byte block size was hard coded in the ext4 file systems. Large harddisks today support bigger block sizes typically 4096 bytes. Signed-off-by: Egbert Eich e...@suse.com --- fs/ext4/dev.c | 52 +-- fs/ext4/ext4_common.c | 26 +++ fs/ext4/ext4_common.h |2 +- fs/ext4/ext4_journal.c |6 +--- fs/ext4/ext4_write.c | 27 fs/ext4/ext4fs.c | 11 + include/ext4fs.h |1 + include/ext_common.h |9 +--- 8 files changed, 68 insertions(+), 66 deletions(-) diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c index 464a67d..c6e9576 100644 --- a/fs/ext4/dev.c +++ b/fs/ext4/dev.c @@ -40,6 +40,7 @@ #include config.h #include ext4fs.h #include ext_common.h +#include ext4_common.h unsigned long part_offset; @@ -48,37 +49,38 @@ static disk_partition_t *part_info; void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info) { + assert(rbdd-blksz == (1 rbdd-log2blksz)); ext4fs_block_dev_desc = rbdd; part_info = info; part_offset = info-start; - get_fs()-total_sect = (info-size * info-blksz) / SECTOR_SIZE; + get_fs()-total_sect = (info-size * info-blksz) get_fs()-dev_desc-log2blksz; get_fs()-dev_desc = rbdd; } int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf) { - ALLOC_CACHE_ALIGN_BUFFER(char, sec_buf, SECTOR_SIZE); unsigned block_len; + ALLOC_CACHE_ALIGN_BUFFER(char, sec_buf, +(ext4fs_block_dev_desc ? ext4fs_block_dev_desc-blksz: 0)); + if (ext4fs_block_dev_desc == NULL) { + printf(** Invalid Block Device Descriptor (NULL)\n); + return 0; + } /* Check partition boundaries */ if ((sector 0) - || ((sector + ((byte_offset + byte_len - 1) SECTOR_BITS)) = + || ((sector + ((byte_offset + byte_len - 1) ext4fs_block_dev_desc-log2blksz)) = part_info-size)) { printf(%s read outside partition %d\n, __func__, sector); return 0; } /* Get the read to the beginning of a partition */ - sector += byte_offset SECTOR_BITS; - byte_offset = SECTOR_SIZE - 1; + sector += byte_offset ext4fs_block_dev_desc-log2blksz; + byte_offset = ext4fs_block_dev_desc-blksz - 1; debug( %d, %d, %d\n, sector, byte_offset, byte_len); - if (ext4fs_block_dev_desc == NULL) { - printf(** Invalid Block Device Descriptor (NULL)\n); - return 0; - } - if (byte_offset != 0) { /* read first part which isn't aligned with start of sector */ if (ext4fs_block_dev_desc- @@ -89,9 +91,9 @@ int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf) return 0; } memcpy(buf, sec_buf + byte_offset, - min(SECTOR_SIZE - byte_offset, byte_len)); - buf += min(SECTOR_SIZE - byte_offset, byte_len); - byte_len -= min(SECTOR_SIZE - byte_offset, byte_len); + min(ext4fs_block_dev_desc-blksz - byte_offset, byte_len)); + buf += min(ext4fs_block_dev_desc-blksz - byte_offset, byte_len); + byte_len -= min(ext4fs_block_dev_desc-blksz - byte_offset, byte_len); sector++; } @@ -99,12 +101,12 @@ int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf) return 1; /* read sector aligned part */ - block_len = byte_len ~(SECTOR_SIZE - 1); + block_len = byte_len ~(ext4fs_block_dev_desc-blksz - 1); if (block_len == 0) { - ALLOC_CACHE_ALIGN_BUFFER(u8, p, SECTOR_SIZE); + ALLOC_CACHE_ALIGN_BUFFER(u8, p, ext4fs_block_dev_desc-blksz); - block_len = SECTOR_SIZE; + block_len = ext4fs_block_dev_desc-blksz; ext4fs_block_dev_desc-block_read(ext4fs_block_dev_desc-dev, part_info-start + sector, 1, (unsigned long *)p); @@ -114,16 +116,16 @@ int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf) if (ext4fs_block_dev_desc-block_read(ext4fs_block_dev_desc-dev, part_info-start + sector, - block_len / SECTOR_SIZE, + block_len ext4fs_block_dev_desc-log2blksz, (unsigned long *) buf) != - block_len / SECTOR_SIZE) { + block_len ext4fs_block_dev_desc-log2blksz) { printf( ** %s read error -
Re: [U-Boot] [PATCH 5/5] fs/ext4: Support device block sizes != 512 bytes.
Dear egbert.e...@googlemail.com, In message 1364285735-2364-6-git-send-email-egbert.e...@gmail.com you wrote: From: Egbert Eich e...@suse.com The 512 byte block size was hard coded in the ext4 file systems. Large harddisks today support bigger block sizes typically 4096 bytes. Signed-off-by: Egbert Eich e...@suse.com --- fs/ext4/dev.c | 52 +-- fs/ext4/ext4_common.c | 26 +++ fs/ext4/ext4_common.h |2 +- fs/ext4/ext4_journal.c |6 +--- fs/ext4/ext4_write.c | 27 fs/ext4/ext4fs.c | 11 + include/ext4fs.h |1 + include/ext_common.h |9 +--- 8 files changed, 68 insertions(+), 66 deletions(-) WARNING: line over 80 characters #139: FILE: fs/ext4/dev.c:56: + get_fs()-total_sect = (info-size * info-blksz) get_fs()-dev_desc-log2blksz; WARNING: line over 80 characters #148: FILE: fs/ext4/dev.c:64: +(ext4fs_block_dev_desc ? ext4fs_block_dev_desc-blksz: 0)); ERROR: spaces required around that ':' (ctx:VxW) #148: FILE: fs/ext4/dev.c:64: +(ext4fs_block_dev_desc ? ext4fs_block_dev_desc-blksz: 0)); ^ WARNING: line over 80 characters #157: FILE: fs/ext4/dev.c:72: + || ((sector + ((byte_offset + byte_len - 1) ext4fs_block_dev_desc-log2blksz)) = WARNING: line over 80 characters #186: FILE: fs/ext4/dev.c:94: + min(ext4fs_block_dev_desc-blksz - byte_offset, byte_len)); WARNING: line over 80 characters #187: FILE: fs/ext4/dev.c:95: + buf += min(ext4fs_block_dev_desc-blksz - byte_offset, byte_len); WARNING: line over 80 characters #188: FILE: fs/ext4/dev.c:96: + byte_len -= min(ext4fs_block_dev_desc-blksz - byte_offset, byte_len); WARNING: line over 80 characters #213: FILE: fs/ext4/dev.c:119: + block_len ext4fs_block_dev_desc-log2blksz, WARNING: line over 80 characters #216: FILE: fs/ext4/dev.c:121: + block_len ext4fs_block_dev_desc-log2blksz) { WARNING: line over 80 characters #279: FILE: fs/ext4/ext4_common.c:106: + size fs-dev_desc-log2blksz, WARNING: line over 80 characters #288: FILE: fs/ext4/ext4_common.c:1471: + return ext4fs_devread(blkno (LOG2_BLOCK_SIZE(data) - get_fs()-dev_desc-log2blksz), WARNING: line over 80 characters #297: FILE: fs/ext4/ext4_common.c:1497: + status = ext4fs_devread(blkno (LOG2_BLOCK_SIZE(data) - fs-dev_desc-log2blksz), blkoff, WARNING: line over 80 characters #306: FILE: fs/ext4/ext4_common.c:1517: + log2_blksz = LOG2_BLOCK_SIZE(ext4fs_root) - get_fs()-dev_desc-log2blksz; ERROR: space prohibited after that open parenthesis '(' #388: FILE: fs/ext4/ext4_write.c:623: + if (!ext4_read_superblock( (char *)fs-sb)) WARNING: line over 80 characters #406: FILE: fs/ext4/ext4_write.c:768: + int log2blocksize = LOG2_BLOCK_SIZE(ext4fs_root) - fs-dev_desc-log2blksz; WARNING: line over 80 characters #415: FILE: fs/ext4/ext4_write.c:797: + delayed_next += blockend fs-dev_desc-log2blksz; WARNING: line over 80 characters #420: FILE: fs/ext4/ext4_write.c:800: + fs-dev_desc-log2blksz), WARNING: line over 80 characters #429: FILE: fs/ext4/ext4_write.c:808: + (blockend fs-dev_desc-log2blksz); WARNING: line over 80 characters #446: FILE: fs/ext4/ext4_write.c:822: +fs-dev_desc-log2blksz), delayed_buf, WARNING: line over 80 characters #464: FILE: fs/ext4/ext4_write.c:923: + file_inode-blockcnt = (blks_reqd_for_file * fs-blksz) fs-dev_desc-log2blksz; WARNING: line over 80 characters #481: FILE: fs/ext4/ext4fs.c:66: + int log2blocksize = LOG2_BLOCK_SIZE(node-data) - fs-dev_desc-log2blksz; WARNING: line over 80 characters #491: FILE: fs/ext4/ext4fs.c:114: + delayed_next += blockend fs-dev_desc-log2blksz; WARNING: line over 80 characters #500: FILE: fs/ext4/ext4fs.c:128: + (blockend fs-dev_desc-log2blksz); WARNING: line over 80 characters #551: FILE: include/ext_common.h:65: + (data-sblock.log2_block_size) + EXT2_MIN_BLOCK_LOG_SIZE) total: 2 errors, 22 warnings, 375 lines checked /home/wd/Mail/U-Boot/7153 has style problems, please review. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de Brain: an