From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher invitel Date: Tue, 30 Jun 2015 11:13:32 +0200 Subject: [U-Boot] [PATCH 5/8] JFFS2: Optimize building lists during scan In-Reply-To: <1435554149-18042-6-git-send-email-mark.tomlinson@alliedtelesis.co.nz> References: <1435554149-18042-1-git-send-email-mark.tomlinson@alliedtelesis.co.nz> <1435554149-18042-6-git-send-email-mark.tomlinson@alliedtelesis.co.nz> Message-ID: <55925DBC.2080901@invitel.hu> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Mark, please fix Tom rinis mail address globally for your patchset into Tom Rini 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 > --- > > fs/jffs2/jffs2_1pass.c | 24 ++++++++++++++++++++---- > 1 file changed, 20 insertions(+), 4 deletions(-) Reviewed-by: Heiko Schocher 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; >