yaffs_find_gc_block is used to find a suitable block to gc,but the first
“for” loop that finding a prioritised block may have error.
for (i = dev->internal_start_block;
i <= dev->internal_end_block && !selected; i++) {
if (bi->gc_prioritise) {
prioritised_exist = 1;
if (bi->block_state == YAFFS_BLOCK_STATE_FULL &&
yaffs_block_ok_for_gc(dev, bi)) {
selected = i;
prioritised = 1;
}
}
For dev->internal_start_block may start from 0 and if block 0 could be gc .
then select=0 so loop continues and passed block. As a result block 0 may
seldom be gc or never be.
If I’m not right please correct me.
---
Regards,
Ezio