timothy-tests: Fix paths for wrongly failing tests
[yaffs2.git] / yaffs_tagsmarshall.c
index bbc228bb87f8d097ce53aa702d82fdbca2b91541..4a120d86825a4405969d73b251655bf527581c8a 100644 (file)
@@ -9,6 +9,10 @@
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
+ *
+ * This file handles the marshalling (ie internal<-->external structure
+ * translation between the internal tags and the stored tags in Yaffs2-style
+ * tags storage.
  */
 
 #include "yaffs_guts.h"
@@ -43,12 +47,12 @@ static int yaffs_tags_marshall_write(struct yaffs_dev *dev,
                    (struct yaffs_packed_tags2_tags_only *)(data +
                                                        dev->
                                                        data_bytes_per_chunk);
-               yaffs_pack_tags2_tags_only(pt2tp, tags);
+               yaffs_pack_tags2_tags_only(dev, pt2tp, tags);
        } else {
-               yaffs_pack_tags2(&pt, tags, !dev->param.no_tags_ecc);
+               yaffs_pack_tags2(dev, &pt, tags, !dev->param.no_tags_ecc);
        }
 
-       retval = dev->param.drv_write_chunk_fn(dev, nand_chunk,
+       retval = dev->drv.drv_write_chunk_fn(dev, nand_chunk,
                        data, dev->param.total_bytes_per_chunk,
                        (dev->param.inband_tags) ? NULL : packed_tags_ptr,
                        (dev->param.inband_tags) ? 0 : packed_tags_size);
@@ -84,12 +88,12 @@ static int yaffs_tags_marshall_read(struct yaffs_dev *dev,
        }
 
        if (dev->param.inband_tags || (data && !tags))
-               retval = dev->param.drv_read_chunk_fn(dev, nand_chunk,
+               retval = dev->drv.drv_read_chunk_fn(dev, nand_chunk,
                                        data, dev->param.total_bytes_per_chunk,
                                        NULL, 0,
                                        &ecc_result);
        else if (tags)
-               retval = dev->param.drv_read_chunk_fn(dev, nand_chunk,
+               retval = dev->drv.drv_read_chunk_fn(dev, nand_chunk,
                                        data, dev->param.total_bytes_per_chunk,
                                        spare_buffer, packed_tags_size,
                                        &ecc_result);
@@ -97,17 +101,20 @@ static int yaffs_tags_marshall_read(struct yaffs_dev *dev,
                BUG();
 
 
+       if (retval == YAFFS_FAIL)
+               return YAFFS_FAIL;
+
        if (dev->param.inband_tags) {
                if (tags) {
                        struct yaffs_packed_tags2_tags_only *pt2tp;
                        pt2tp =
                                (struct yaffs_packed_tags2_tags_only *)
                                &data[dev->data_bytes_per_chunk];
-                       yaffs_unpack_tags2_tags_only(tags, pt2tp);
+                       yaffs_unpack_tags2_tags_only(dev, tags, pt2tp);
                }
        } else if (tags) {
                memcpy(packed_tags_ptr, spare_buffer, packed_tags_size);
-               yaffs_unpack_tags2(tags, &pt, !dev->param.no_tags_ecc);
+               yaffs_unpack_tags2(dev, tags, &pt, !dev->param.no_tags_ecc);
        }
 
        if (local_data)
@@ -118,7 +125,7 @@ static int yaffs_tags_marshall_read(struct yaffs_dev *dev,
                dev->n_ecc_unfixed++;
        }
 
-       if (tags && ecc_result == -YAFFS_ECC_RESULT_FIXED) {
+       if (tags && ecc_result == YAFFS_ECC_RESULT_FIXED) {
                if (tags->ecc_result <= YAFFS_ECC_RESULT_NO_ERROR)
                        tags->ecc_result = YAFFS_ECC_RESULT_FIXED;
                dev->n_ecc_fixed++;
@@ -139,7 +146,7 @@ static int yaffs_tags_marshall_query_block(struct yaffs_dev *dev, int block_no,
        yaffs_trace(YAFFS_TRACE_MTD, "yaffs_tags_marshall_query_block %d",
                        block_no);
 
-       retval = dev->param.drv_check_bad_fn(dev, block_no);
+       retval = dev->drv.drv_check_bad_fn(dev, block_no);
 
        if (retval== YAFFS_FAIL) {
                yaffs_trace(YAFFS_TRACE_MTD, "block is bad");
@@ -174,7 +181,7 @@ static int yaffs_tags_marshall_query_block(struct yaffs_dev *dev, int block_no,
 
 static int yaffs_tags_marshall_mark_bad(struct yaffs_dev *dev, int block_no)
 {
-       return dev->param.drv_mark_bad_fn(dev, block_no);
+       return dev->drv.drv_mark_bad_fn(dev, block_no);
 
 }
 
@@ -184,16 +191,16 @@ void yaffs_tags_marshall_install(struct yaffs_dev *dev)
        if (!dev->param.is_yaffs2)
                return;
 
-       if (!dev->param.write_chunk_tags_fn)
-               dev->param.write_chunk_tags_fn = yaffs_tags_marshall_write;
+       if (!dev->tagger.write_chunk_tags_fn)
+               dev->tagger.write_chunk_tags_fn = yaffs_tags_marshall_write;
 
-       if (!dev->param.read_chunk_tags_fn)
-               dev->param.read_chunk_tags_fn = yaffs_tags_marshall_read;
+       if (!dev->tagger.read_chunk_tags_fn)
+               dev->tagger.read_chunk_tags_fn = yaffs_tags_marshall_read;
 
-       if (!dev->param.query_block_fn)
-               dev->param.query_block_fn = yaffs_tags_marshall_query_block;
+       if (!dev->tagger.query_block_fn)
+               dev->tagger.query_block_fn = yaffs_tags_marshall_query_block;
 
-       if (!dev->param.mark_bad_fn)
-               dev->param.mark_bad_fn = yaffs_tags_marshall_mark_bad;
+       if (!dev->tagger.mark_bad_fn)
+               dev->tagger.mark_bad_fn = yaffs_tags_marshall_mark_bad;
 
 }