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
Subject: Re: [Yaffs] Disadvantage of using yaffs checkpointing?
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=d9cae0a277c62c660e4802d3b8745500583273da

>
> 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