It does work (first tests are OK). I will keep you informed if any
failures come up during testing.
Thanks for the work, your help is very much appreciated.
Viktor Babrian
On Tue, 9 Jun 2009, Charles Manning wrote:
> Date: Tue, 9 Jun 2009 12:20:31 +1200
> From: Charles Manning <manningc2@actrix.gen.nz>
> To: yaffs@lists.aleph1.co.uk
> Cc: Babrian Viktor <v@renyi.hu>
> Subject: Re: [Yaffs] power cycle during rm
>
> Please try the fix in cvs
>
> http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2/yaffs_guts.c?r1=1.84&r2=1.85
>
> and see if that works.
>
> Thanks
>
> -- Charles
>
> On Tuesday 09 June 2009 11:22:31 Charles Manning wrote:
>> On Tuesday 09 June 2009 11:11:54 Charles Manning wrote:
>>> Hi All
>>>
>>> I'm looking at fixing the root problem, but for now you can modify the
>>> line maxCopies = (wholeBlock) ? dev->nChunksPerBlock : 10;
>>> to
>>> maxCopies = (1 || wholeBlock) ? dev->nChunksPerBlock : 10;
>>>
>>> That will force a whole block gc.
>>
>> or even simpler... Set
>> wholeBlock = 1;
>> near the top of yaffs_GarbageCollectBlock();
>>
>>> I would not force agressive gc as that causes more impact.
>>>
>>> -- CHarles
>>>
>>> On Monday 08 June 2009 15:05:05 Rong Shen wrote:
>>>> On Sun, Jun 7, 2009 at 8:50 PM, Babrian Viktor<v@renyi.hu> wrote:
>>>>> Hi again,
>>>>>
>>>>> my last questions:
>>>>> - Is it OK to use aggressive garbage collection only? It cleanly
>>>>> solves the issue for me. (my understanding is that it might be slower
>>>>> but it won't do any harm)
>>>>> - is it possible that the root cause of the problem is in some
>>>>> underlaying layer (e.g. nand driver?) Under what circumstances can it
>>>>> happen that the
>>>>
>>>> It looks more like a yaffs2 bug as you have pointed out. softDeletions
>>>> shouldn't be subtracted from nFreeChunks if the block is not fully
>>>> claimed.
>>>>
>>>>> softDeletions of a block gets to the maximum value? Can an
>>>>> interrupted erase
>>>>
>>>> Maximum values, i.e. number of chunks (pages) per block gets maximum,
>>>> in your case 64, when all chunks are soft deleted.
>>>>
>>>>> cause this? And whose responsibility is it to ensure that this does
>>>>> not
>>>>
>>>> hmmm...
>>>>
>>>>> happen? Is it a yaffs issue or nand flash driver issue?
>>>>>
>>>>> Thanks,
>>>>> Viktor Babrian
>>>>
>>>> Rong
>>>>
>>>>> On Fri, 29 May 2009, Babrian Viktor wrote:
>>>>>> Date: Fri, 29 May 2009 16:25:28 +0200 (CEST)
>>>>>> From: Babrian Viktor <v@renyi.hu>
>>>>>> To: yaffs@lists.aleph1.co.uk
>>>>>> Subject: Re: [Yaffs] power cycle during rm
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> the reason why yaffs_GarbageCollectBlock() performs the row:
>>>>>> dev->nFreeChunks -= bi->softDeletions;
>>>>>> 7 times for each block is that yaffs_GarbageCollectBlock() is called
>>>>>> with wholeBlock = 0 and therefore it deals with only 10 chunks of
>>>>>> the block every time it is called (maxCopies = (wholeBlock) ?
>>>>>> dev->nChunksPerBlock : 10). WHen deleting the last chunk of the
>>>>>> block, the block is marked dirty and it gets out from the
>>>>>> 'collecting' state and from that point
>>>>>> yaffs_GarbageCollectBlock() is not called anymore with that given
>>>>>> blocknumber. There are 64 chunks in each block and 64/10 gives 7.
>>>>>> Now something is obviously wrong here.
>>>>>> There are several solutions I see but I do not know the sideeffects
>>>>>> of. Calling yaffs_GarbageCollectBlock() with wholeBlock = 1 only
>>>>>> seems to solve the situation but there must be better solution than
>>>>>> that. Performing the subtraction of bi->softDeletions only at the
>>>>>> end of the function (when the block is not in collecting state)
>>>>>> could also work but it is unclear to me if it leads to unconsistency
>>>>>> or anything. I also do not know why the softDeletions of the given
>>>>>> block is 64 - does that seem correct anyway?
>>>>>>
>>>>>> Please at least confirm whether this hack is OK - I need to make
>>>>>> file operations as reliable as possible. Any other solutions are
>>>>>> welcome of course.
>