From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukasz Majewski Date: Mon, 24 Jun 2019 11:32:04 +0200 Subject: [U-Boot] [PATCH] ext4: fix calculating inode blkcount for non-512 blocksize filesystems In-Reply-To: <20190621133251.451-1-m.szyprowski@samsung.com> References: <20190621133251.451-1-m.szyprowski@samsung.com> Message-ID: <20190624113204.66ded47a@jawa> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Fri, 21 Jun 2019 15:32:51 +0200 Marek Szyprowski wrote: > The block count entry in the EXT4 filesystem disk structures uses > standard 512-bytes units for most of the typical files. The only > exception are HUGE files, which use the filesystem block size, but > those are not supported by uboot's EXT4 implementation anyway. This > patch fixes the EXT4 code to use proper unit count for inode block > count. This fixes errors reported by fsck.ext4 on disks with > non-standard (i.e. 4KiB, in case of new flash drives) PHYSICAL block > size after using 'ext4write' uboot's command. > > Signed-off-by: Marek Szyprowski > --- > fs/ext4/ext4_common.c | 2 +- > fs/ext4/ext4_write.c | 2 +- > include/ext_common.h | 1 + > 3 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c > index 464c33d0d74..8a142e2e6a1 100644 > --- a/fs/ext4/ext4_common.c > +++ b/fs/ext4/ext4_common.c > @@ -570,7 +570,7 @@ restart_read: > g_parent_inode->size = > cpu_to_le32(new_size); > new_blockcnt = > le32_to_cpu(g_parent_inode->blockcnt); > - new_blockcnt += fs->sect_perblk; > + new_blockcnt += fs->blksz >> > LOG2_SECTOR_SIZE; g_parent_inode->blockcnt = > cpu_to_le32(new_blockcnt); > if (ext4fs_put_metadata > diff --git a/fs/ext4/ext4_write.c b/fs/ext4/ext4_write.c > index 504d23a8956..3368bd8c005 100644 > --- a/fs/ext4/ext4_write.c > +++ b/fs/ext4/ext4_write.c > @@ -957,7 +957,7 @@ int ext4fs_write(const char *fname, const char > *buffer, ext4fs_allocate_blocks(file_inode, blocks_remaining, > &blks_reqd_for_file); > file_inode->blockcnt = cpu_to_le32((blks_reqd_for_file * > fs->blksz) >> > - fs->dev_desc->log2blksz); > + LOG2_SECTOR_SIZE); > > temp_ptr = zalloc(fs->blksz); > if (!temp_ptr) > diff --git a/include/ext_common.h b/include/ext_common.h > index 17c92f1750b..1c10c504748 100644 > --- a/include/ext_common.h > +++ b/include/ext_common.h > @@ -21,6 +21,7 @@ > #define __EXT_COMMON__ > #include > #define SECTOR_SIZE 0x200 > +#define LOG2_SECTOR_SIZE 9 > > /* Magic value used to identify an ext2 filesystem. */ > #define EXT2_MAGIC 0xEF53 Reviewed-by: Lukasz Majewski Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: