OK, it's all working now. the problem was that nand_read_ecc()
was doing the AUTOPLACE to skip the bad block marker, but the
same AUTOPLACE code did not exist in nand_read_oob(). And when
YAFFS2 calls through its yaffs_mtdif.c layer while its looking for
the right chunk ID, it ends up calling nand_read_oob()
and not nand_read_ecc(). So, I put the same AUTOPLACE code there
and wala, All works. It's a pain having to cobble together new
and old code so as to live in the past (2.4 kernel I mean).
I know its my own darn fault.
This is so FAST compared to JAFFS2. THANK YOU!!!!!
__________________________________
Reed Lawson
IGT Firmware Engineering
(775) 448-0755
> -----Original Message-----
> From: yaffs-bounces@stoneboat.aleph1.co.uk
> [mailto:yaffs-bounces@stoneboat.aleph1.co.uk]
> Sent: Thursday, July 07, 2005 7:26 PM
> To: yaffs@stoneboat.aleph1.co.uk
> Subject: Re: [Yaffs] RE: inadvertently marking all blocks bad?
>
>
> On Friday 08 July 2005 11:59, Lawson.Reed wrote:
> > First of all, My thoughts and prayers are with you in the UK
> > as you recover from this horrific attack on your country,
> > this slaughter of innocent people by those sick terrorist.
> > Just horrible....
>
> I'd like to express my condolances too. I expect the last
> Lions rugby match on
> Saturday here in Kiwi-land will have a more sombre tone than
> the last two.
>
> Anyway, back to YAFFS-biz...
>
> Generally any problems related to massive numbers of lost
> blocks or ones like
> you're having below are due to mtd interfacing rather than
> YAFFS issues per
> se.
>
> With the smaller 512-byte page devices (ie YAFFS1 format
> using YAFFS1 code or
> YAFFS2 code using the compatability layer), YAFFS does all
> the pacement and
> bad block marker handling itself. With the wider range of
> devices supported
> by YAFFS2 this is no longer possible and the mtd must provide
> the bad block
> handling.
>
> It is probably a good thing to disable bad block marking
> during initial
> bring-up to prevent the actual flash from getting hammered.
>
>
> > I wanted to let you know I found part of my problem. I did not have
> > useecc = MTD_NANDECC_AUTOPLACE. I had to do this
> > in my map driver:
> > igt_sn2_mtd->oobinfo.useecc = MTD_NANDECC_AUTOPLACE;
> > just before adding the partition.
>
> This and the problems you mention below are consistent wiuth
> a problem that
> Nick notices in the mtd where it was copying bytes
> incorrectly. I believe
> this has been fixed recently in mtd by Thomas.
>
> Are you running a recent mtd?
>
> >
> > then, I was getting an infinite loop because of this in
> > nand_prepare_oobbuf():
> >
> > for (i = 0, len = 0; len < mtd->oobavail; i++) {
> > int to = ofs + oobsel->oobfree[i][0];
> > int num = oobsel->oobfree[i][1];
> > memcpy (&this->oob_buf[to], fsbuf, num);
> > len += num;
> > fsbuf += num;
> > }
> > my mtd->oobavail was 39 and my oobsel->oobfree[0][1] was 38.
> > but the next one (oobsel->oobfree[1][1]) was 0 making "num"
> > zero so the loop went forever. That's pretty nasty.
> > I change mtd->oobavail to 38 and then it was happy. Humm.
> >
> > However, now I am getting tons of these when I remove a file
> > and copy another one in:
> >
> > page 130 in gc has no object
> > page 131 in gc has no object
> > page 132 in gc has no object
> > page 133 in gc has no object
> > page 134 in gc has no object
> > etc....
> >
> > Any ideas? Is it because I moved the stuff in the oob and now
> > someplace else can't find it? Is this MTD_NANDECC_AUTOPLACE
> > the right thing to set to avoid the zeroing out of the
> > bad block markers? or is there a better way?
>
> Basically these indicate that what was read back from NAND
> was not what got
> written to NAND. There was a bug in the auto-placement stuff
> that was copying
> the tags data incorrectly which would have caused object ids
> etc in the tags
> to get corrupted.
>
> Try the new mtd and see if that fixes things.
>
> -- Charles
>
> _______________________________________________
> yaffs mailing list
> yaffs@stoneboat.aleph1.co.uk
> http://stoneboat.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs
>