* [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command
@ 2012-11-26 16:13 Lukasz Majewski
2012-11-26 16:13 ` [U-Boot] [PATCH 1/4] fs:ext4:write: Add lldiv and do_div to perform 64-32 bits division Lukasz Majewski
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Lukasz Majewski @ 2012-11-26 16:13 UTC (permalink / raw)
To: u-boot
Several fixes for ext4write command including:
- compiler warnings suppress
- lldiv() and do_div() instead of "plain" / and % operands for 64-32 bits
- Proper initialization of dev_desc
Lukasz Majewski (4):
fs:ext4:write: Add lldiv and do_div to perform 64-32 bits division
fs:ext4:write: Store block device descriptor in file system structure
fs:ext4:fix: Code refactoring to suppress compiler warnings
arm:trats: Adjust Samsung's TRATS config file
fs/ext4/dev.c | 1 +
fs/ext4/ext4_common.c | 14 ++++++++++----
fs/ext4/ext4_journal.c | 3 +--
fs/ext4/ext4fs.c | 8 +++-----
include/configs/trats.h | 5 +++++
5 files changed, 20 insertions(+), 11 deletions(-)
--
1.7.2.3
^ permalink raw reply [flat|nested] 7+ messages in thread* [U-Boot] [PATCH 1/4] fs:ext4:write: Add lldiv and do_div to perform 64-32 bits division 2012-11-26 16:13 [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski @ 2012-11-26 16:13 ` Lukasz Majewski 2012-11-26 16:13 ` [U-Boot] [PATCH 2/4] fs:ext4:write: Store block device descriptor in file system structure Lukasz Majewski ` (3 subsequent siblings) 4 siblings, 0 replies; 7+ messages in thread From: Lukasz Majewski @ 2012-11-26 16:13 UTC (permalink / raw) To: u-boot The ext4write code has been using direct calls to 64-32 division (/ and %). Officially supported u-boot toolchains (eldk-5.[12].x) generate calls to __aeabi_uldivmod(), which is niether defined in the toolchain libs nor u-boot source tree. Due to that, when the ext4write command has been executed, "undefined instruction" execption was generated (since the __aeabi_uldivmod() is not provided). To fix this error, lldiv() for division and do_div() for modulo have been used. Those two functions are recommended for performing 64-32 bit number division in u-boot. Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> --- fs/ext4/ext4fs.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c index 06536ba..80b3b90 100644 --- a/fs/ext4/ext4fs.c +++ b/fs/ext4/ext4fs.c @@ -40,6 +40,7 @@ #include <linux/stat.h> #include <linux/time.h> #include <asm/byteorder.h> +#include <div64.h> #include "ext4_common.h" int ext4fs_symlinknest; @@ -1051,8 +1052,8 @@ int ext4fs_write(const char *fname, unsigned char *buffer, } /* calucalate how many blocks required */ bytes_reqd_for_file = sizebytes; - blks_reqd_for_file = bytes_reqd_for_file / fs->blksz; - if (bytes_reqd_for_file % fs->blksz != 0) { + blks_reqd_for_file = lldiv(bytes_reqd_for_file, fs->blksz); + if (do_div(bytes_reqd_for_file, fs->blksz) != 0) { blks_reqd_for_file++; debug("total bytes for a file %u\n", blks_reqd_for_file); } -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 2/4] fs:ext4:write: Store block device descriptor in file system structure 2012-11-26 16:13 [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski 2012-11-26 16:13 ` [U-Boot] [PATCH 1/4] fs:ext4:write: Add lldiv and do_div to perform 64-32 bits division Lukasz Majewski @ 2012-11-26 16:13 ` Lukasz Majewski 2012-11-26 16:13 ` [U-Boot] [PATCH 3/4] fs:ext4:fix: Code refactoring to suppress compiler warnings Lukasz Majewski ` (2 subsequent siblings) 4 siblings, 0 replies; 7+ messages in thread From: Lukasz Majewski @ 2012-11-26 16:13 UTC (permalink / raw) To: u-boot The device block descriptor (block_dev_desc_t) )shall be stored at ext4 early code (at ext4fs_set_blk_dev in this case) to be available for latter use (like put_ext4()). Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> --- fs/ext4/dev.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c index 1596a92..464a67d 100644 --- a/fs/ext4/dev.c +++ b/fs/ext4/dev.c @@ -52,6 +52,7 @@ void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info) part_info = info; part_offset = info->start; get_fs()->total_sect = (info->size * info->blksz) / SECTOR_SIZE; + get_fs()->dev_desc = rbdd; } int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf) -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 3/4] fs:ext4:fix: Code refactoring to suppress compiler warnings 2012-11-26 16:13 [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski 2012-11-26 16:13 ` [U-Boot] [PATCH 1/4] fs:ext4:write: Add lldiv and do_div to perform 64-32 bits division Lukasz Majewski 2012-11-26 16:13 ` [U-Boot] [PATCH 2/4] fs:ext4:write: Store block device descriptor in file system structure Lukasz Majewski @ 2012-11-26 16:13 ` Lukasz Majewski 2012-12-02 21:13 ` Simon Glass 2012-11-26 16:13 ` [U-Boot] [PATCH 4/4] arm:trats: Adjust Samsung's TRATS config file Lukasz Majewski 2012-12-04 8:49 ` [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski 4 siblings, 1 reply; 7+ messages in thread From: Lukasz Majewski @ 2012-11-26 16:13 UTC (permalink / raw) To: u-boot Several fixes to suppress compiler's (eldk-5.[12].x gcc 4.6) warning [-Wunused-but-set-variable] Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> --- fs/ext4/ext4_common.c | 14 ++++++++++---- fs/ext4/ext4_journal.c | 3 +-- fs/ext4/ext4fs.c | 3 --- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c index 323875f..f12b805 100644 --- a/fs/ext4/ext4_common.c +++ b/fs/ext4/ext4_common.c @@ -378,7 +378,6 @@ void ext4fs_update_parent_dentry(char *filename, int *p_ino, int file_type) struct ext_filesystem *fs = get_fs(); /* directory entry */ struct ext2_dirent *dir; - char *ptr = NULL; char *temp_dir = NULL; zero_buffer = zalloc(fs->blksz); @@ -415,7 +414,6 @@ restart: if (ext4fs_log_journal(root_first_block_buffer, first_block_no_of_root)) goto fail; dir = (struct ext2_dirent *)root_first_block_buffer; - ptr = (char *)dir; totalbytes = 0; while (dir->direntlen > 0) { /* @@ -483,14 +481,12 @@ restart: break; dir = (struct ext2_dirent *)((char *)dir + templength); - ptr = (char *)dir; } /* make a pointer ready for creating next directory entry */ templength = dir->direntlen; totalbytes = totalbytes + templength; dir = (struct ext2_dirent *)((char *)dir + templength); - ptr = (char *)dir; /* get the next available inode number */ inodeno = ext4fs_get_new_inode_no(); @@ -1200,6 +1196,11 @@ static void alloc_double_indirect_block(struct ext2_inode *file_inode, status = ext4fs_devread(di_blockno_parent * fs->sect_perblk, 0, fs->blksz, (char *)di_parent_buffer); + + if (!status) { + printf("%s: Device read error!\n", __func__); + goto fail; + } memset(di_parent_buffer, '\0', fs->blksz); /* @@ -1227,6 +1228,11 @@ static void alloc_double_indirect_block(struct ext2_inode *file_inode, fs->sect_perblk, 0, fs->blksz, (char *)di_child_buff); + + if (!status) { + printf("%s: Device read error!\n", __func__); + goto fail; + } memset(di_child_buff, '\0', fs->blksz); /* filling of actual datablocks for each child */ for (j = 0; j < (fs->blksz / sizeof(int)); j++) { diff --git a/fs/ext4/ext4_journal.c b/fs/ext4/ext4_journal.c index 8a252d6..9f01708 100644 --- a/fs/ext4/ext4_journal.c +++ b/fs/ext4/ext4_journal.c @@ -410,7 +410,7 @@ int ext4fs_check_journal_state(int recovery_flag) int transaction_state = TRANSACTION_COMPLETE; int prev_desc_logical_no = 0; int curr_desc_logical_no = 0; - int ofs, flags, block; + int ofs, flags; struct ext2_inode inode_journal; struct journal_superblock_t *jsb = NULL; struct journal_header_t *jdb = NULL; @@ -453,7 +453,6 @@ int ext4fs_check_journal_state(int recovery_flag) i = be32_to_cpu(jsb->s_first); while (1) { - block = be32_to_cpu(jsb->s_first); blknr = read_allocated_block(&inode_journal, i); memset(temp_buff1, '\0', fs->blksz); ext4fs_devread(blknr * fs->sect_perblk, diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c index 80b3b90..64d8a6d 100644 --- a/fs/ext4/ext4fs.c +++ b/fs/ext4/ext4fs.c @@ -931,7 +931,6 @@ static int ext4fs_write_file(struct ext2_inode *file_inode, int previous_block_number = -1; int delayed_start = 0; int delayed_extent = 0; - int delayed_skipfirst = 0; int delayed_next = 0; char *delayed_buf = NULL; @@ -964,7 +963,6 @@ static int ext4fs_write_file(struct ext2_inode *file_inode, previous_block_number = blknr; delayed_start = blknr; delayed_extent = blockend; - delayed_skipfirst = skipfirst; delayed_buf = buf; delayed_next = blknr + (blockend >> SECTOR_BITS); @@ -973,7 +971,6 @@ static int ext4fs_write_file(struct ext2_inode *file_inode, previous_block_number = blknr; delayed_start = blknr; delayed_extent = blockend; - delayed_skipfirst = skipfirst; delayed_buf = buf; delayed_next = blknr + (blockend >> SECTOR_BITS); -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 3/4] fs:ext4:fix: Code refactoring to suppress compiler warnings 2012-11-26 16:13 ` [U-Boot] [PATCH 3/4] fs:ext4:fix: Code refactoring to suppress compiler warnings Lukasz Majewski @ 2012-12-02 21:13 ` Simon Glass 0 siblings, 0 replies; 7+ messages in thread From: Simon Glass @ 2012-12-02 21:13 UTC (permalink / raw) To: u-boot On Mon, Nov 26, 2012 at 8:13 AM, Lukasz Majewski <l.majewski@samsung.com> wrote: > Several fixes to suppress compiler's (eldk-5.[12].x gcc 4.6) > warning [-Wunused-but-set-variable] > > Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> > Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> This removes the warnings for me on gcc 4.6 and 4.7, and from my reading does not change the function. Acked-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 4/4] arm:trats: Adjust Samsung's TRATS config file 2012-11-26 16:13 [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski ` (2 preceding siblings ...) 2012-11-26 16:13 ` [U-Boot] [PATCH 3/4] fs:ext4:fix: Code refactoring to suppress compiler warnings Lukasz Majewski @ 2012-11-26 16:13 ` Lukasz Majewski 2012-12-04 8:49 ` [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski 4 siblings, 0 replies; 7+ messages in thread From: Lukasz Majewski @ 2012-11-26 16:13 UTC (permalink / raw) To: u-boot - Enable EXT4 command with write at Samsung's TRATS boards - Enable support for EFI partitions Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Cc: Minkyu Kang <mk7.kang@samsung.com> --- include/configs/trats.h | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/include/configs/trats.h b/include/configs/trats.h index 355029e..214c980 100644 --- a/include/configs/trats.h +++ b/include/configs/trats.h @@ -103,6 +103,10 @@ #define CONFIG_CMD_FAT #define CONFIG_FAT_WRITE +/* EXT4 */ +#define CONFIG_CMD_EXT4 +#define CONFIG_CMD_EXT4_WRITE + /* USB Composite download gadget - g_dnl */ #define CONFIG_USBDOWNLOAD_GADGET #define CONFIG_DFU_FUNCTION @@ -207,6 +211,7 @@ #define CONFIG_ENV_OFFSET ((32 - 4) << 10) /* 32KiB - 4KiB */ #define CONFIG_DOS_PARTITION +#define CONFIG_EFI_PARTITION #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_LOAD_ADDR - GENERATED_GBL_DATA_SIZE) #define CONFIG_SYS_CACHELINE_SIZE 32 -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command 2012-11-26 16:13 [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski ` (3 preceding siblings ...) 2012-11-26 16:13 ` [U-Boot] [PATCH 4/4] arm:trats: Adjust Samsung's TRATS config file Lukasz Majewski @ 2012-12-04 8:49 ` Lukasz Majewski 4 siblings, 0 replies; 7+ messages in thread From: Lukasz Majewski @ 2012-12-04 8:49 UTC (permalink / raw) To: u-boot Dear All, > Several fixes for ext4write command including: > - compiler warnings suppress > - lldiv() and do_div() instead of "plain" / and % operands for 64-32 > bits > - Proper initialization of dev_desc > > Lukasz Majewski (4): > fs:ext4:write: Add lldiv and do_div to perform 64-32 bits division > fs:ext4:write: Store block device descriptor in file system > structure fs:ext4:fix: Code refactoring to suppress compiler warnings > arm:trats: Adjust Samsung's TRATS config file > > fs/ext4/dev.c | 1 + > fs/ext4/ext4_common.c | 14 ++++++++++---- > fs/ext4/ext4_journal.c | 3 +-- > fs/ext4/ext4fs.c | 8 +++----- > include/configs/trats.h | 5 +++++ > 5 files changed, 20 insertions(+), 11 deletions(-) > Any comments (despite of Simon's Acked-by on patch 3/4)? -- Best regards, Lukasz Majewski Samsung Poland R&D Center | Linux Platform Group ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-12-04 8:49 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-11-26 16:13 [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski 2012-11-26 16:13 ` [U-Boot] [PATCH 1/4] fs:ext4:write: Add lldiv and do_div to perform 64-32 bits division Lukasz Majewski 2012-11-26 16:13 ` [U-Boot] [PATCH 2/4] fs:ext4:write: Store block device descriptor in file system structure Lukasz Majewski 2012-11-26 16:13 ` [U-Boot] [PATCH 3/4] fs:ext4:fix: Code refactoring to suppress compiler warnings Lukasz Majewski 2012-12-02 21:13 ` Simon Glass 2012-11-26 16:13 ` [U-Boot] [PATCH 4/4] arm:trats: Adjust Samsung's TRATS config file Lukasz Majewski 2012-12-04 8:49 ` [U-Boot] [PATCH 0/4] fs:ext4:fix: Fixes for ext4write command Lukasz Majewski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox