[U-Boot] [PATCH 3/7] JFFS2: Calculate buf_len before we read data from flash

Detlev Zundel dzu at denx.de
Fri Apr 29 15:11:12 CEST 2011


Hi Baidu,

>  1/ We should calculate the buf_len before we call
>  get_fl_mem().

If I read your change correctly, then do you mean the following?

  When we know what we want to read, we can calculate buf_len to be the
  maximum size of the data to be read.  Without this, we usually read
  EMPTY_SCAN_SIZE which is too much.

  This is only an optimization change.

Maybe this text will help people understand better what the change tries
to do.

> diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
> index 8eb77b1..be6ac78 100644
> --- a/fs/jffs2/jffs2_1pass.c
> +++ b/fs/jffs2/jffs2_1pass.c
> @@ -1643,6 +1643,8 @@ 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, buf_size, sector_ofs
> +						+ part->sector_size - ofs);		

I am somewhat uncomfortable that "buf_len" is used in the if condition
before it is recalculated inside.  Are you sure that this cannot lead to
problems, i.e. can buf_len become larger than it was when entering the
condition?

>  					get_fl_mem((u32)part->offset + ofs,
>  						   buf_len, buf);
>  					buf_ofs = ofs;
> @@ -1659,11 +1661,11 @@ jffs2_1pass_build_lists(struct part_info * part)
>  				}
>  				break;
>  			case JFFS2_NODETYPE_DIRENT:
> -				if (buf_ofs + buf_len < ofs + sizeof(struct
> -							jffs2_raw_dirent) +
> -							((struct
> -							 jffs2_raw_dirent *)
> -							node)->nsize) {
> +				if (buf_ofs + buf_len < ofs + 
> +					sizeof(struct jffs2_raw_dirent) + 
> +					((struct jffs2_raw_dirent *)node)->nsize) {
> +					buf_len = min_t(uint32_t, buf_size, sector_ofs
> +						+ part->sector_size - ofs);	

The same question for this case.

Cheers
  Detlev

-- 
 Those who do not understand Unix are condemned to reinvent it,
 poorly.
 - Henry Spencer, University of Toronto Unix hack
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de


More information about the U-Boot mailing list