[Yaffs] [Yaffs-archive] Re: What's so special about device block 0?

Charles Manning manningc2@actrix.gen.nz
Fri, 18 Jun 2004 14:42:32 +1200


The history of this is that I needed a block number to signify "invalid 
block". The value had to fit in with the use of 16 bits in the chunk grouping 
mechanism etc. I could have used 0xFFFF/0xFFFFFFFFFF but that would have been 
a bit messier in code and 0 was simpler.

Since block 0 is guaranteed to be good on NAND, it is sometimes used as a 
special block to store information. Thus, I decided to use zero as "invalid 
block" and "invalid chunk group".

You can potentially get around this by modifying the flash access code to map 
start(-1) == physical block 0, and this **should** work - perhaps with minor 
tweaks - but I have not tested this.

-- CHarles






On Thursday 17 June 2004 13:34, guxm wrote:
> Further,
> So I think such design is deliberate, strict, or to say correct. The
> dev->startBlock or endBlock is only a digital number. As for which physical
> block we map it to, we can just do it.
>
> Best regards
> GUXM
>
> Hi,
>
> I have the same question. I have tried to modify device.startBlock = 0, But
> I found that there is much code use 0 to check chunkId validation. So I
> have to map logical block n to physical block n-1. That is the
> dev->startBlock(=1) is mapped to physical block 0. It's OK now.
>
> For example:
> yaffs_PutChunkIntoFile()
> {
> 	existingChunk = tn->level0[chunkInInode & YAFFS_TNODES_LEVEL0_MASK];
>
>     ... ...
> 	if(existingChunk == 0)
> 	{
> 		in->nDataChunks++;
> 	}
>
> }
>
> yaffs_DeleteChunk()
> {
>     if( chunkId <= 0 )
>         return;
> }
>
> yaffs_GetObjectName()
> {
> 	else if(obj->chunkId <= 0)
> 	{
> 		char locName[20];
> 		sprintf(locName,"%s%d",YAFFS_LOSTNFOUND_PREFIX,obj->objectId);
> 		strncpy(name,locName,buffSize - 1);
> 	}
> }
>
>
> Best regards
> guxm
>
>
> ======= 2004-06-15 21:39:00 您在来信中写道:=======
>
> >In lots of the source files, the following line of code is used
> >
> ><code>
> >	device.startBlock = 1;  // Don't use block 0
> ></code>
> >
> >Having searched through the docs and sources, I've found no clue why block
> >0 is different that the rest of the device blocks.
> >
> >Please, anyone, enlighten me.
> >
> >Thanks,
> >Jacob Dall
> >
> >
> >
> >--------------------------------------------------------------------------
> >------------- This mailing list is hosted by Toby Churchill open software
> > (www.toby-churchill.org). If mailing list membership is no longer wanted
> > you can remove yourself from the list by sending an email to
> > yaffs-request@toby-churchill.org with the text "unsubscribe" (without the
> > quotes) as the subject.
>
> = = = = = = = = = = = = = = = = = = = =
>
>
>
>
> ---------------------------------------------------------------------------
>------------ This mailing list is hosted by Toby Churchill open software
> (www.toby-churchill.org). If mailing list membership is no longer wanted
> you can remove yourself from the list by sending an email to
> yaffs-request@toby-churchill.org with the text "unsubscribe" (without the
> quotes) as the subject.

---------------------------------------------------------------------------------------
This mailing list is hosted by Toby Churchill open software (www.toby-churchill.org).
If mailing list membership is no longer wanted you can remove yourself from the list by 
sending an email to yaffs-request@toby-churchill.org with the text "unsubscribe" 
(without the quotes) as the subject.