yaffs: Discard partially written summary data
[yaffs2.git] / yaffs_verify.c
index 1a5ed9a75362e0b06befc70195e1048f1274bbb6..b3e540dd52a3656c223587431bda39b76b56e502 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>
@@ -38,7 +38,7 @@ static int yaffs_skip_nand_verification(struct yaffs_dev *dev)
 
 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 > 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)
                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);
@@ -216,7 +216,7 @@ 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);
 }
 
@@ -225,6 +225,7 @@ void yaffs_verify_file(struct yaffs_obj *obj)
        int required_depth;
        int actual_depth;
        u32 last_chunk;
+       u32 the_chunk;
        u32 x;
        u32 i;
        struct yaffs_dev *dev;
@@ -264,17 +265,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 != 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 +349,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 +357,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 +368,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);
@@ -425,7 +427,7 @@ void yaffs_verify_obj_in_dir(struct yaffs_obj *obj)
 
        if (!obj) {
                yaffs_trace(YAFFS_TRACE_ALWAYS, "No object to verify");
-               YBUG();
+               BUG();
                return;
        }
 
@@ -434,13 +436,13 @@ void yaffs_verify_obj_in_dir(struct yaffs_obj *obj)
 
        if (!obj->parent) {
                yaffs_trace(YAFFS_TRACE_ALWAYS, "Object does not have parent");
-               YBUG();
+               BUG();
                return;
        }
 
        if (obj->parent->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
                yaffs_trace(YAFFS_TRACE_ALWAYS, "Parent is not directory");
-               YBUG();
+               BUG();
        }
 
        /* Iterate through the objects in each hash entry */
@@ -456,7 +458,7 @@ void yaffs_verify_obj_in_dir(struct yaffs_obj *obj)
                yaffs_trace(YAFFS_TRACE_ALWAYS,
                        "Object in directory %d times",
                        count);
-               YBUG();
+               BUG();
        }
 }
 
@@ -466,7 +468,7 @@ void yaffs_verify_dir(struct yaffs_obj *directory)
        struct yaffs_obj *list_obj;
 
        if (!directory) {
-               YBUG();
+               BUG();
                return;
        }
 
@@ -477,7 +479,7 @@ void yaffs_verify_dir(struct yaffs_obj *directory)
                yaffs_trace(YAFFS_TRACE_ALWAYS,
                        "Directory has wrong type: %d",
                        directory->variant_type);
-               YBUG();
+               BUG();
        }
 
        /* Iterate through the objects in each hash entry */
@@ -488,7 +490,7 @@ void yaffs_verify_dir(struct yaffs_obj *directory)
                        yaffs_trace(YAFFS_TRACE_ALWAYS,
                                "Object in directory list has wrong parent %p",
                                list_obj->parent);
-                       YBUG();
+                       BUG();
                }
                yaffs_verify_obj_in_dir(list_obj);
        }
@@ -521,4 +523,3 @@ int yaffs_verify_file_sane(struct yaffs_obj *in)
        in = in;
        return YAFFS_OK;
 }
-