[U-Boot] [PATCH 5/8] JFFS2: Optimize building lists during scan
Heiko Schocher invitel
heiko.schocher at invitel.hu
Tue Jun 30 11:13:32 CEST 2015
Hello Mark,
please fix Tom rinis mail address globally for your patchset into
Tom Rini <trini at konsulko.com>
I fixed it for my response manually, thanks!
BTW: You can use patman for creating patches/patchset.
Look into u-boot:tools/patman
Am 29.06.2015 um 07:02 schrieb Mark Tomlinson:
> If the flash is slow, reading less from the flash into buffers makes
> the process faster.
>
> Signed-off-by: Mark Tomlinson <mark.tomlinson at alliedtelesis.co.nz>
> ---
>
> fs/jffs2/jffs2_1pass.c | 24 ++++++++++++++++++++----
> 1 file changed, 20 insertions(+), 4 deletions(-)
Reviewed-by: Heiko Schocher <hs at denx.de>
bye,
Heiko
>
> diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
> index 80210be..10bd7be 100644
> --- a/fs/jffs2/jffs2_1pass.c
> +++ b/fs/jffs2/jffs2_1pass.c
> @@ -1493,7 +1493,7 @@ jffs2_1pass_build_lists(struct part_info * part)
> u32 counterF = 0;
> u32 counterN = 0;
> u32 max_totlen = 0;
> - u32 buf_size = DEFAULT_EMPTY_SCAN_SIZE;
> + u32 buf_size;
> char *buf;
>
> nr_sectors = lldiv(part->size, part->sector_size);
> @@ -1505,7 +1505,7 @@ jffs2_1pass_build_lists(struct part_info * part)
> /* if we are building a list we need to refresh the cache. */
> jffs_init_1pass_list(part);
> pL = (struct b_lists *)part->jffs2_priv;
> - buf = malloc(buf_size);
> + buf = malloc(DEFAULT_EMPTY_SCAN_SIZE);
> puts ("Scanning JFFS2 FS: ");
>
> /* start at the beginning of the partition */
> @@ -1521,6 +1521,8 @@ jffs2_1pass_build_lists(struct part_info * part)
> int ret;
> #endif
>
> + /* Set buf_size to maximum length */
> + buf_size = DEFAULT_EMPTY_SCAN_SIZE;
> WATCHDOG_RESET();
>
> #ifdef CONFIG_JFFS2_SUMMARY
> @@ -1595,6 +1597,10 @@ jffs2_1pass_build_lists(struct part_info * part)
>
> ofs += sector_ofs;
> prevofs = ofs - 1;
> + /* Set buf_size down to the minimum size required.
> + * This prevents reading in chunks of flash data unnecessarily.
> + */
> + buf_size = sizeof(union jffs2_node_union);
>
> scan_more:
> while (ofs < sector_ofs + part->sector_size) {
> @@ -1675,13 +1681,18 @@ jffs2_1pass_build_lists(struct part_info * part)
> case JFFS2_NODETYPE_INODE:
> if (buf_ofs + buf_len < ofs + sizeof(struct
> jffs2_raw_inode)) {
> + buf_len = min_t(uint32_t,
> + sizeof(struct jffs2_raw_inode),
> + sector_ofs +
> + part->sector_size -
> + ofs);
> get_fl_mem((u32)part->offset + ofs,
> buf_len, buf);
> buf_ofs = ofs;
> node = (void *)buf;
> }
> - if (!inode_crc((struct jffs2_raw_inode *) node))
> - break;
> + if (!inode_crc((struct jffs2_raw_inode *)node))
> + break;
>
> if (insert_node(&pL->frag, (u32) part->offset +
> ofs) == NULL) {
> @@ -1698,6 +1709,11 @@ jffs2_1pass_build_lists(struct part_info * part)
> ((struct
> jffs2_raw_dirent *)
> node)->nsize) {
> + buf_len = min_t(uint32_t,
> + node->totlen,
> + sector_ofs +
> + part->sector_size -
> + ofs);
> get_fl_mem((u32)part->offset + ofs,
> buf_len, buf);
> buf_ofs = ofs;
>
More information about the U-Boot
mailing list