timothy-tests: Fix paths for wrongly failing tests
[yaffs2.git] / yaffs_verify.c
index 87e39c886ea40f8a96eb38328776ef4222fb390a..7a341a283079f0d98a84f566f4d86fac3193a8fd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
  *
- * Copyright (C) 2002-2010 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
  *   for Toby Churchill Ltd and Brightstar Engineering
  *
  * Created by Charles Manning <charles@aleph1.co.uk>
 
 int yaffs_skip_verification(struct yaffs_dev *dev)
 {
-       dev = dev;
+       (void) dev;
        return !(yaffs_trace_mask &
                 (YAFFS_TRACE_VERIFY | YAFFS_TRACE_VERIFY_FULL));
 }
 
 static int yaffs_skip_full_verification(struct yaffs_dev *dev)
 {
-       dev = dev;
+       (void) dev;
        return !(yaffs_trace_mask & (YAFFS_TRACE_VERIFY_FULL));
 }
 
 static int yaffs_skip_nand_verification(struct yaffs_dev *dev)
 {
-       dev = dev;
+       (void) dev;
        return !(yaffs_trace_mask & (YAFFS_TRACE_VERIFY_NAND));
 }
 
 static const char * const block_state_name[] = {
        "Unknown",
-       "Needs scanning",
+       "Needs scan",
        "Scanning",
        "Empty",
        "Allocating",
@@ -66,7 +66,7 @@ void yaffs_verify_blk(struct yaffs_dev *dev, struct yaffs_block_info *bi, int n)
        switch (bi->block_state) {
        case YAFFS_BLOCK_STATE_UNKNOWN:
        case YAFFS_BLOCK_STATE_SCANNING:
-       case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
+       case YAFFS_BLOCK_STATE_NEEDS_SCAN:
                yaffs_trace(YAFFS_TRACE_VERIFY,
                        "Block %d has bad run-state %s",
                        n, block_state_name[bi->block_state]);
@@ -76,11 +76,11 @@ void yaffs_verify_blk(struct yaffs_dev *dev, struct yaffs_block_info *bi, int n)
 
        actually_used = bi->pages_in_use - bi->soft_del_pages;
 
-       if (bi->pages_in_use < 0
-           || bi->pages_in_use > dev->param.chunks_per_block
-           || bi->soft_del_pages < 0
-           || bi->soft_del_pages > dev->param.chunks_per_block
-           || actually_used < 0 || actually_used > dev->param.chunks_per_block)
+       if (bi->pages_in_use < 0 ||
+           bi->pages_in_use > (int)dev->param.chunks_per_block ||
+           bi->soft_del_pages < 0 ||
+           bi->soft_del_pages > (int)dev->param.chunks_per_block ||
+           actually_used < 0 || actually_used > (int)dev->param.chunks_per_block)
                yaffs_trace(YAFFS_TRACE_VERIFY,
                        "Block %d has illegal values pages_in_used %d soft_del_pages %d",
                        n, bi->pages_in_use, bi->soft_del_pages);
@@ -110,8 +110,8 @@ void yaffs_verify_collected_blk(struct yaffs_dev *dev,
 
 void yaffs_verify_blocks(struct yaffs_dev *dev)
 {
-       int i;
-       int state_count[YAFFS_NUMBER_OF_BLOCK_STATES];
+       u32 i;
+       u32 state_count[YAFFS_NUMBER_OF_BLOCK_STATES];
        int illegal_states = 0;
 
        if (yaffs_skip_verification(dev))
@@ -149,7 +149,7 @@ void yaffs_verify_blocks(struct yaffs_dev *dev)
                        dev->blocks_in_checkpt,
                        state_count[YAFFS_BLOCK_STATE_CHECKPOINT]);
 
-       if (dev->n_erased_blocks != state_count[YAFFS_BLOCK_STATE_EMPTY])
+       if (dev->n_erased_blocks != (int)state_count[YAFFS_BLOCK_STATE_EMPTY])
                yaffs_trace(YAFFS_TRACE_VERIFY,
                        "Erased block count wrong dev %d count %d",
                        dev->n_erased_blocks,
@@ -201,7 +201,7 @@ void yaffs_verify_oh(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh,
                        tags->obj_id, oh->parent_obj_id);
 
        if (parent_check && obj->parent &&
-           oh->parent_obj_id != obj->parent->obj_id &&
+           oh->parent_obj_id !=  obj->parent->obj_id &&
            (oh->parent_obj_id != YAFFS_OBJECTID_UNLINKED ||
             obj->parent->obj_id != YAFFS_OBJECTID_DELETED))
                yaffs_trace(YAFFS_TRACE_VERIFY,
@@ -216,17 +216,19 @@ void yaffs_verify_oh(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh,
 
        if (tags->obj_id > 1 && ((u8) (oh->name[0])) == 0xff)   /* Junk name */
                yaffs_trace(YAFFS_TRACE_VERIFY,
-                       "Obj %d header name is 0xFF",
+                       "Obj %d header name is 0xff",
                        obj->obj_id);
 }
 
 void yaffs_verify_file(struct yaffs_obj *obj)
 {
-       int required_depth;
-       int actual_depth;
-       u32 last_chunk;
        u32 x;
-       u32 i;
+       int required_depth;
+       int last_chunk;
+       u32 offset_in_chunk;
+       u32 the_chunk;
+
+       int i;
        struct yaffs_dev *dev;
        struct yaffs_ext_tags tags;
        struct yaffs_tnode *tn;
@@ -241,9 +243,11 @@ void yaffs_verify_file(struct yaffs_obj *obj)
        dev = obj->my_dev;
        obj_id = obj->obj_id;
 
+
        /* Check file size is consistent with tnode depth */
-       last_chunk =
-           obj->variant.file_variant.file_size / dev->data_bytes_per_chunk + 1;
+       yaffs_addr_to_chunk(dev, obj->variant.file_variant.file_size,
+                               &last_chunk, &offset_in_chunk);
+       last_chunk++;
        x = last_chunk >> YAFFS_TNODES_LEVEL0_BITS;
        required_depth = 0;
        while (x > 0) {
@@ -251,8 +255,6 @@ void yaffs_verify_file(struct yaffs_obj *obj)
                required_depth++;
        }
 
-       actual_depth = obj->variant.file_variant.top_level;
-
        /* Check that the chunks in the tnode tree are all correct.
         * We do this by scanning through the tnode tree and
         * checking the tags for every chunk match.
@@ -264,17 +266,18 @@ void yaffs_verify_file(struct yaffs_obj *obj)
        for (i = 1; i <= last_chunk; i++) {
                tn = yaffs_find_tnode_0(dev, &obj->variant.file_variant, i);
 
-               if (tn) {
-                       u32 the_chunk = yaffs_get_group_base(dev, tn, i);
-                       if (the_chunk > 0) {
-                               yaffs_rd_chunk_tags_nand(dev, the_chunk, NULL,
-                                                        &tags);
-                               if (tags.obj_id != obj_id || tags.chunk_id != i)
-                                       yaffs_trace(YAFFS_TRACE_VERIFY,
-                                               "Object %d chunk_id %d NAND mismatch chunk %d tags (%d:%d)",
-                                               obj_id, i, the_chunk,
-                                               tags.obj_id, tags.chunk_id);
-                       }
+               if (!tn)
+                       continue;
+
+               the_chunk = yaffs_get_group_base(dev, tn, i);
+               if (the_chunk > 0) {
+                       yaffs_rd_chunk_tags_nand(dev, the_chunk, NULL,
+                                                &tags);
+                       if (tags.obj_id != obj_id || tags.chunk_id != (u32)i)
+                               yaffs_trace(YAFFS_TRACE_VERIFY,
+                                       "Object %d chunk_id %d NAND mismatch chunk %d tags (%d:%d)",
+                                       obj_id, i, the_chunk,
+                                       tags.obj_id, tags.chunk_id);
                }
        }
 }
@@ -347,7 +350,7 @@ void yaffs_verify_obj(struct yaffs_obj *obj)
        if (chunk_valid && !yaffs_skip_nand_verification(dev)) {
                struct yaffs_ext_tags tags;
                struct yaffs_obj_hdr *oh;
-               u8 *buffer = yaffs_get_temp_buffer(dev, __LINE__);
+               u8 *buffer = yaffs_get_temp_buffer(dev);
 
                oh = (struct yaffs_obj_hdr *)buffer;
 
@@ -355,7 +358,7 @@ void yaffs_verify_obj(struct yaffs_obj *obj)
 
                yaffs_verify_oh(obj, oh, &tags, 1);
 
-               yaffs_release_temp_buffer(dev, buffer, __LINE__);
+               yaffs_release_temp_buffer(dev, buffer);
        }
 
        /* Verify it has a parent */
@@ -366,8 +369,8 @@ void yaffs_verify_obj(struct yaffs_obj *obj)
        }
 
        /* Verify parent is a directory */
-       if (obj->parent
-           && obj->parent->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+       if (obj->parent &&
+           obj->parent->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
                yaffs_trace(YAFFS_TRACE_VERIFY,
                        "Obj %d's parent is not a directory (type %d)",
                        obj->obj_id, obj->parent->variant_type);
@@ -464,12 +467,26 @@ void yaffs_verify_dir(struct yaffs_obj *directory)
 {
        struct list_head *lh;
        struct yaffs_obj *list_obj;
+       struct yaffs_dev *dev;
 
        if (!directory) {
                BUG();
                return;
        }
 
+       dev = directory->my_dev;
+
+       if (!dev) {
+               BUG();
+               return;
+       }
+
+       if (directory == dev->root_dir ||
+           directory == dev->lost_n_found ||
+           directory == dev->unlinked_dir ||
+           directory == dev->del_dir)
+               return;
+
        if (yaffs_skip_full_verification(directory->my_dev))
                return;
 
@@ -518,7 +535,6 @@ void yaffs_verify_free_chunks(struct yaffs_dev *dev)
 
 int yaffs_verify_file_sane(struct yaffs_obj *in)
 {
-       in = in;
+       (void) in;
        return YAFFS_OK;
 }
-