Re: [Yaffs] Disadvantage of using yaffs checkpointing?

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Charles Manning
Date:  
To: yaffs
CC: Pranay Kumar
Subject: Re: [Yaffs] Disadvantage of using yaffs checkpointing?
On Tuesday 29 May 2012 17:09:49 peterlingoal wrote:
> Hi Charles,
>
> We have some NAND currently running a old YAFFS driver (with
> YAFFS_CHECKPOINT_VERSION 4), and we would like to upgrade to the latest
> (with YAFFS_CHECKPOINT_VERSION 7). Will there be any compatible problem and
> is there any procedure needs to be taken?


You don't need to do anything.

The new code will see the version mismatch, ignore the checkpoint and rescan.

-- Charles

>
> thanks,
> Peter
>
> On Tue, May 22, 2012 at 11:36 AM, peterlingoal

<>wrote:
> > Thanks Charles, the patch works.
> >
> > On Tue, May 22, 2012 at 7:25 AM, Charles Manning

<>wrote:
> >> On Tuesday 22 May 2012 10:12:35 Charles Manning wrote:
> >> > On Tuesday 22 May 2012 00:31:25 peterlingoal wrote:
> >> > > Hi Charles:
> >> > >
> >> > > following is a proposed patch that check for block state after
> >> > > discovering a check point block, and continues search if the block
> >>
> >> state
> >>
> >> > > is DEAD: From b08b8c5fc21c2820f66454968be3a5115477fc96 Mon Sep 17
> >> > > 00:00:00 2001 From: Peter Lin <>
> >> > > Date: Mon, 21 May 2012 20:25:55 +0800
> >> > > Subject: [PATCH] yaffs: ignore checkpt if it is in bad block
> >> > >
> >> > > ---
> >> > > yaffs_checkptrw.c | 11 +++++++++++
> >> > > 1 files changed, 11 insertions(+), 0 deletions(-)
> >> > >
> >> > > diff --git a/yaffs_checkptrw.c b/yaffs_checkptrw.c
> >> > > index 997a618..0d63e74 100644
> >> > > --- a/yaffs_checkptrw.c
> >> > > +++ b/yaffs_checkptrw.c
> >> > > @@ -13,6 +13,8 @@
> >> > >
> >> > > #include "yaffs_checkptrw.h"
> >> > > #include "yaffs_getblockinfo.h"
> >> > > +#include "yaffs_nand.h"
> >> > > +#include "yaffs_guts.h"
> >> > >
> >> > > static int yaffs2_checkpt_space_ok(struct yaffs_dev *dev)
> >> > > {
> >> > > @@ -117,6 +119,15 @@ static void yaffs2_checkpt_find_block(struct
> >> > > yaffs_dev *dev)
> >> > > tags.ecc_result);
> >> > >
> >> > > if (tags.seq_number == YAFFS_SEQUENCE_CHECKPOINT_DATA) {
> >> > > + enum yaffs_block_state state = 0;
> >> > > + u32 seq_number = 0;
> >> > > + yaffs_query_init_block_state(dev, i, &state, &seq_number);
> >> > > + if( YAFFS_BLOCK_STATE_DEAD == state )
> >> > > + {
> >> > > + yaffs_trace(YAFFS_TRACE_CHECKPOINT,
> >> > > + "ignore bad checkpt block %d", i);
> >> > > + continue;
> >> > > + }
> >> >
> >> > This approach won't always work
> >> > yaffs_querey_init_block_state() applies a block offset which is not
> >> > set
> >>
> >> up
> >>
> >> > properly yet. Instead you need to use the raw functions during
> >>
> >> checkpoint
> >>
> >> > reading:
> >> >
> >> > +                       dev->param.query_block_fn(dev, i, &state,
> >> > &seq); +                       if (state == YAFFS_BLOCK_STATE_DEAD)
> >> > +                               continue;

> >> >
> >> > > /* Right kind of block */
> >> > > dev->checkpt_next_block = tags.obj_id;
> >> > > dev->checkpt_cur_block = i;
> >> >
> >> > I have a fix for this that should be pushed to yaffs2 git today.
> >>
> >> Pushed.
> >>
> >>
> >> http://yaffs.net/gitweb?p=yaffs2.git;a=commitdiff;h=d9cae0a277c62c660e48
> >>02d3b8745500583273da
> >>
> >> > I am also adding a further check to the checkpointing.
> >> >
> >> > Currently the checkpoint data has various checks in it, but none that
> >> > checks for dropped or stale data during the reading. Each checkpoint
> >>
> >> record
> >>
> >> > is framed and there is a checksum at the end which do provide a level
> >> > of checking.
> >> >
> >> > I have written some code, now under test, which does further checks on
> >> > a chunk-by-chunk basis. This should be checked in today.
> >>
> >> This has also been pushed.
> >>
> >>
> >> -- CHarles
> >>
> >>
> >> _______________________________________________
> >> yaffs mailing list
> >>
> >> http://lists.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs