
Hi,Detlev
2011/4/29 Detlev Zundel dzu@denx.de:
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.
Yes,you are right.
This is only an optimization change.
Maybe this text will help people understand better what the change tries to do.
The patch comments may be enough to explain what my changes is. We can see the code: buf_len = min_t() everywhere the get_fl_mem() called.
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?
It works well in my boards.