* [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 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 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 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