yaffs: More clean up
[yaffs2.git] / yaffs_guts.c
index aa4b0d64ee72ec506bb05096d7ed0de5dd13c184..ce7ed7ebb870ff3a548781f5d817c782e6d2a69e 100644 (file)
@@ -33,6 +33,8 @@
 #include "yaffs_nameval.h"
 #include "yaffs_allocator.h"
 
+#include "yaffs_attribs.h"
+
 /* Note YAFFS_GC_GOOD_ENOUGH must be <= YAFFS_GC_PASSIVE_THRESHOLD */
 #define YAFFS_GC_GOOD_ENOUGH 2
 #define YAFFS_GC_PASSIVE_THRESHOLD 4
@@ -69,7 +71,6 @@ static struct yaffs_obj *yaffs_new_obj(struct yaffs_dev *dev, int number,
 static int yaffs_apply_xattrib_mod(struct yaffs_obj *obj, char *buffer, struct yaffs_xattr_mod *xmod);
 
 static void yaffs_remove_obj_from_dir(struct yaffs_obj *obj);
-static int yaffs_check_structures(void);
 static int yaffs_generic_obj_del(struct yaffs_obj *in);
 
 static int yaffs_check_chunk_erased(struct yaffs_dev *dev,
@@ -1136,15 +1137,15 @@ static struct yaffs_obj *yaffs_alloc_empty_obj(struct yaffs_dev *dev)
                obj->my_dev = dev;
                obj->hdr_chunk = 0;
                obj->variant_type = YAFFS_OBJECT_TYPE_UNKNOWN;
-               YINIT_LIST_HEAD(&(obj->hard_links));
-               YINIT_LIST_HEAD(&(obj->hash_link));
-               YINIT_LIST_HEAD(&obj->siblings);
+               INIT_LIST_HEAD(&(obj->hard_links));
+               INIT_LIST_HEAD(&(obj->hash_link));
+               INIT_LIST_HEAD(&obj->siblings);
 
 
                /* Now make the directory sane */
                if (dev->root_dir) {
                        obj->parent = dev->root_dir;
-                       ylist_add(&(obj->siblings), &dev->root_dir->variant.dir_variant.children);
+                       list_add(&(obj->siblings), &dev->root_dir->variant.dir_variant.children);
                }
 
                /* Add it to the lost and found directory.
@@ -1189,8 +1190,8 @@ static void yaffs_unhash_obj(struct yaffs_obj *obj)
        struct yaffs_dev *dev = obj->my_dev;
 
        /* If it is still linked into the bucket list, free from the list */
-       if (!ylist_empty(&obj->hash_link)) {
-               ylist_del_init(&obj->hash_link);
+       if (!list_empty(&obj->hash_link)) {
+               list_del_init(&obj->hash_link);
                bucket = yaffs_hash_fn(obj->obj_id);
                dev->obj_bucket[bucket].count--;
        }
@@ -1207,7 +1208,7 @@ static void yaffs_free_obj(struct yaffs_obj *obj)
                YBUG();
        if (obj->parent)
                YBUG();
-       if (!ylist_empty(&obj->siblings))
+       if (!list_empty(&obj->siblings))
                YBUG();
 
 
@@ -1243,7 +1244,7 @@ static void yaffs_init_tnodes_and_objs(struct yaffs_dev *dev)
        yaffs_init_raw_tnodes_and_objs(dev);
 
        for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
-               YINIT_LIST_HEAD(&dev->obj_bucket[i].list);
+               INIT_LIST_HEAD(&dev->obj_bucket[i].list);
                dev->obj_bucket[i].count = 0;
        }
 }
@@ -1281,7 +1282,7 @@ static int yaffs_new_obj_id(struct yaffs_dev *dev)
         */
 
        int found = 0;
-       struct ylist_head *i;
+       struct list_head *i;
 
        u32 n = (u32) bucket;
 
@@ -1291,9 +1292,9 @@ static int yaffs_new_obj_id(struct yaffs_dev *dev)
                found = 1;
                n += YAFFS_NOBJECT_BUCKETS;
                if (1 || dev->obj_bucket[bucket].count > 0) {
-                       ylist_for_each(i, &dev->obj_bucket[bucket].list) {
+                       list_for_each(i, &dev->obj_bucket[bucket].list) {
                                /* If there is already one in the list */
-                               if (i && ylist_entry(i, struct yaffs_obj,
+                               if (i && list_entry(i, struct yaffs_obj,
                                                hash_link)->obj_id == n) {
                                        found = 0;
                                }
@@ -1309,20 +1310,20 @@ static void yaffs_hash_obj(struct yaffs_obj *in)
        int bucket = yaffs_hash_fn(in->obj_id);
        struct yaffs_dev *dev = in->my_dev;
 
-       ylist_add(&in->hash_link, &dev->obj_bucket[bucket].list);
+       list_add(&in->hash_link, &dev->obj_bucket[bucket].list);
        dev->obj_bucket[bucket].count++;
 }
 
 struct yaffs_obj *yaffs_find_by_number(struct yaffs_dev *dev, u32 number)
 {
        int bucket = yaffs_hash_fn(number);
-       struct ylist_head *i;
+       struct list_head *i;
        struct yaffs_obj *in;
 
-       ylist_for_each(i, &dev->obj_bucket[bucket].list) {
+       list_for_each(i, &dev->obj_bucket[bucket].list) {
                /* Look if it is in the list */
                if (i) {
-                       in = ylist_entry(i, struct yaffs_obj, hash_link);
+                       in = list_entry(i, struct yaffs_obj, hash_link);
                        if (in->obj_id == number) {
 
                                /* Don't tell the VFS about this one if it is defered free */
@@ -1367,30 +1368,20 @@ struct yaffs_obj *yaffs_new_obj(struct yaffs_dev *dev, int number,
                the_obj->obj_id = number;
                yaffs_hash_obj(the_obj);
                the_obj->variant_type = type;
-#ifdef CONFIG_YAFFS_WINCE
-               yfsd_win_file_time_now(the_obj->win_atime);
-               the_obj->win_ctime[0] = the_obj->win_mtime[0] =
-                   the_obj->win_atime[0];
-               the_obj->win_ctime[1] = the_obj->win_mtime[1] =
-                   the_obj->win_atime[1];
-
-#else
+               yaffs_load_current_time(the_obj,1,1);
 
-               the_obj->yst_atime = the_obj->yst_mtime =
-                   the_obj->yst_ctime = Y_CURRENT_TIME;
-#endif
                switch (type) {
                case YAFFS_OBJECT_TYPE_FILE:
                        the_obj->variant.file_variant.file_size = 0;
                        the_obj->variant.file_variant.scanned_size = 0;
-                       the_obj->variant.file_variant.shrink_size = 0xFFFFFFFF; /* max u32 */
+                       the_obj->variant.file_variant.shrink_size = ~0;/* max */
                        the_obj->variant.file_variant.top_level = 0;
                        the_obj->variant.file_variant.top = tn;
                        break;
                case YAFFS_OBJECT_TYPE_DIRECTORY:
-                       YINIT_LIST_HEAD(&the_obj->variant.dir_variant.
+                       INIT_LIST_HEAD(&the_obj->variant.dir_variant.
                                        children);
-                       YINIT_LIST_HEAD(&the_obj->variant.dir_variant.
+                       INIT_LIST_HEAD(&the_obj->variant.dir_variant.
                                        dirty);
                        break;
                case YAFFS_OBJECT_TYPE_SYMLINK:
@@ -1492,18 +1483,8 @@ static struct yaffs_obj *yaffs_create_obj(enum yaffs_obj_type type,
 
                in->yst_mode = mode;
 
-#ifdef CONFIG_YAFFS_WINCE
-               yfsd_win_file_time_now(in->win_atime);
-               in->win_ctime[0] = in->win_mtime[0] = in->win_atime[0];
-               in->win_ctime[1] = in->win_mtime[1] = in->win_atime[1];
+               yaffs_attribs_init(in, gid, uid, rdev);
 
-#else
-               in->yst_atime = in->yst_mtime = in->yst_ctime = Y_CURRENT_TIME;
-
-               in->yst_rdev = rdev;
-               in->yst_uid = uid;
-               in->yst_gid = gid;
-#endif
                in->n_data_chunks = 0;
 
                yaffs_set_obj_name(in, name);
@@ -1522,7 +1503,7 @@ static struct yaffs_obj *yaffs_create_obj(enum yaffs_obj_type type,
                                equiv_obj;
                        in->variant.hardlink_variant.equiv_id =
                                equiv_obj->obj_id;
-                       ylist_add(&in->hard_links, &equiv_obj->hard_links);
+                       list_add(&in->hard_links, &equiv_obj->hard_links);
                        break;
                case YAFFS_OBJECT_TYPE_FILE:
                case YAFFS_OBJECT_TYPE_DIRECTORY:
@@ -1665,7 +1646,7 @@ int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR *old_name,
        dev = old_dir->my_dev;
 
 #ifdef CONFIG_YAFFS_CASE_INSENSITIVE
-       /* Special case for case insemsitive systems (eg. WinCE).
+       /* Special case for case insemsitive systems.
         * While look-up is case insensitive, the name isn't.
         * Therefore we might want to change x.txt to X.txt
        */
@@ -1686,7 +1667,7 @@ int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR *old_name,
                existing_target = yaffs_find_by_name(new_dir, new_name);
                if (existing_target &&
                        existing_target->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY &&
-                       !ylist_empty(&existing_target->variant.dir_variant.children)) {
+                       !list_empty(&existing_target->variant.dir_variant.children)) {
                        /* There is a target that is a non-empty directory, so we fail */
                        return YAFFS_FAIL;      /* EEXIST or ENOTEMPTY */
                } else if (existing_target && existing_target != obj) {
@@ -2946,21 +2927,8 @@ int yaffs_update_oh(struct yaffs_obj *in, const YCHAR *name, int force,
                oh->yst_mode = in->yst_mode;
                oh->shadows_obj = oh->inband_shadowed_obj_id = shadows;
 
-#ifdef CONFIG_YAFFS_WINCE
-               oh->win_atime[0] = in->win_atime[0];
-               oh->win_ctime[0] = in->win_ctime[0];
-               oh->win_mtime[0] = in->win_mtime[0];
-               oh->win_atime[1] = in->win_atime[1];
-               oh->win_ctime[1] = in->win_ctime[1];
-               oh->win_mtime[1] = in->win_mtime[1];
-#else
-               oh->yst_uid = in->yst_uid;
-               oh->yst_gid = in->yst_gid;
-               oh->yst_atime = in->yst_atime;
-               oh->yst_mtime = in->yst_mtime;
-               oh->yst_ctime = in->yst_ctime;
-               oh->yst_rdev = in->yst_rdev;
-#endif
+               yaffs_load_attribs_oh(oh,in);
+
                if (in->parent)
                        oh->parent_obj_id = in->parent->obj_id;
                else
@@ -3069,13 +3037,13 @@ int yaffs_update_oh(struct yaffs_obj *in, const YCHAR *name, int force,
 }
 
 /*------------------------ Short Operations Cache ----------------------------------------
- *   In many situations where there is no high level buffering (eg WinCE) a lot of
+ *   In many situations where there is no high level buffering  a lot of
  *   reads might be short sequential reads, and a lot of writes may be short
  *   sequential writes. eg. scanning/writing a jpeg file.
- *   In these cases, a short read/write cache can provide a huge perfomance benefit
- *   with dumb-as-a-rock code.
- *   In Linux, the page cache provides read buffering aand the short op cache provides write
- *   buffering.
+ *   In these cases, a short read/write cache can provide a huge perfomance
+ *   benefit with dumb-as-a-rock code.
+ *   In Linux, the page cache provides read buffering and the short op cache 
+ *   provides write buffering.
  *
  *   There are a limited number (~10) of cache chunks per device so that we don't
  *   need a very intelligent search.
@@ -3726,25 +3694,6 @@ int yaffs_resize_file(struct yaffs_obj *in, loff_t new_size)
        return YAFFS_OK;
 }
 
-loff_t yaffs_get_file_size(struct yaffs_obj *obj)
-{
-       YCHAR *alias = NULL;
-       obj = yaffs_get_equivalent_obj(obj);
-
-       switch (obj->variant_type) {
-       case YAFFS_OBJECT_TYPE_FILE:
-               return obj->variant.file_variant.file_size;
-       case YAFFS_OBJECT_TYPE_SYMLINK:
-               alias = obj->variant.symlink_variant.alias;
-               if(!alias)
-                       return 0;
-               return yaffs_strnlen(alias,YAFFS_MAX_ALIAS_LENGTH);
-       default:
-               return 0;
-       }
-}
-
-
 
 int yaffs_flush_file(struct yaffs_obj *in, int update_time, int data_sync)
 {
@@ -3754,15 +3703,8 @@ int yaffs_flush_file(struct yaffs_obj *in, int update_time, int data_sync)
                if(data_sync) /* Only sync data */
                        ret_val=YAFFS_OK;
                else {
-                       if (update_time) {
-#ifdef CONFIG_YAFFS_WINCE
-                               yfsd_win_file_time_now(in->win_mtime);
-#else
-
-                               in->yst_mtime = Y_CURRENT_TIME;
-
-#endif
-                       }
+                       if (update_time)
+                               yaffs_load_current_time(in,0,0);
 
                        ret_val = (yaffs_update_oh(in, NULL, 0, 0, 0, NULL) >=
                                0) ? YAFFS_OK : YAFFS_FAIL;
@@ -3870,7 +3812,7 @@ int yaffs_del_file(struct yaffs_obj *in)
 static int yaffs_is_non_empty_dir(struct yaffs_obj *obj)
 {
        return (obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) &&
-               !(ylist_empty(&obj->variant.dir_variant.children));
+               !(list_empty(&obj->variant.dir_variant.children));
 }
 
 static int yaffs_del_dir(struct yaffs_obj *obj)
@@ -3896,7 +3838,7 @@ static int yaffs_del_link(struct yaffs_obj *in)
        /* remove this hardlink from the list assocaited with the equivalent
         * object
         */
-       ylist_del_init(&in->hard_links);
+       list_del_init(&in->hard_links);
        return yaffs_generic_obj_del(in);
 }
 
@@ -3908,9 +3850,9 @@ int ret_val = -1;
                ret_val = yaffs_del_file(obj);
                break;
        case YAFFS_OBJECT_TYPE_DIRECTORY:
-               if(!ylist_empty(&obj->variant.dir_variant.dirty)){
+               if(!list_empty(&obj->variant.dir_variant.dirty)){
                        T(YAFFS_TRACE_BACKGROUND, (TSTR("Remove object %d from dirty directories" TENDSTR),obj->obj_id));
-                       ylist_del_init(&obj->variant.dir_variant.dirty);
+                       list_del_init(&obj->variant.dir_variant.dirty);
                }
                return yaffs_del_dir(obj);
                break;
@@ -3944,7 +3886,7 @@ static int yaffs_unlink_worker(struct yaffs_obj *obj)
 
        if (obj->variant_type == YAFFS_OBJECT_TYPE_HARDLINK) {
                return yaffs_del_link(obj);
-       } else if (!ylist_empty(&obj->hard_links)) {
+       } else if (!list_empty(&obj->hard_links)) {
                /* Curve ball: We're unlinking an object that has a hardlink.
                 *
                 * This problem arises because we are not strictly following
@@ -3964,12 +3906,12 @@ static int yaffs_unlink_worker(struct yaffs_obj *obj)
                int ret_val;
                YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
 
-               hl = ylist_entry(obj->hard_links.next, struct yaffs_obj, hard_links);
+               hl = list_entry(obj->hard_links.next, struct yaffs_obj, hard_links);
 
                yaffs_get_obj_name(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
                parent = hl->parent;
 
-               ylist_del_init(&hl->hard_links);
+               list_del_init(&hl->hard_links);
 
                yaffs_add_obj_to_dir(obj->my_dev->unlinked_dir, hl);
 
@@ -3986,7 +3928,7 @@ static int yaffs_unlink_worker(struct yaffs_obj *obj)
                        return yaffs_del_file(obj);
                        break;
                case YAFFS_OBJECT_TYPE_DIRECTORY:
-                       ylist_del_init(&obj->variant.dir_variant.dirty);
+                       list_del_init(&obj->variant.dir_variant.dirty);
                        return yaffs_del_dir(obj);
                        break;
                case YAFFS_OBJECT_TYPE_SYMLINK:
@@ -4078,13 +4020,13 @@ void yaffs_link_fixup(struct yaffs_dev *dev, struct yaffs_obj *hard_list)
                if (in) {
                        /* Add the hardlink pointers */
                        hl->variant.hardlink_variant.equiv_obj = in;
-                       ylist_add(&hl->hard_links, &in->hard_links);
+                       list_add(&hl->hard_links, &in->hard_links);
                } else {
                        /* Todo Need to report/handle this better.
                         * Got a problem... hardlink to a non-existant object
                         */
                        hl->variant.hardlink_variant.equiv_obj = NULL;
-                       YINIT_LIST_HEAD(&hl->hard_links);
+                       INIT_LIST_HEAD(&hl->hard_links);
 
                }
        }
@@ -4096,26 +4038,26 @@ static void yaffs_strip_deleted_objs(struct yaffs_dev *dev)
        /*
        *  Sort out state of unlinked and deleted objects after scanning.
        */
-       struct ylist_head *i;
-       struct ylist_head *n;
+       struct list_head *i;
+       struct list_head *n;
        struct yaffs_obj *l;
 
        if (dev->read_only)
                return;
 
        /* Soft delete all the unlinked files */
-       ylist_for_each_safe(i, n,
+       list_for_each_safe(i, n,
                &dev->unlinked_dir->variant.dir_variant.children) {
                if (i) {
-                       l = ylist_entry(i, struct yaffs_obj, siblings);
+                       l = list_entry(i, struct yaffs_obj, siblings);
                        yaffs_del_obj(l);
                }
        }
 
-       ylist_for_each_safe(i, n,
+       list_for_each_safe(i, n,
                &dev->del_dir->variant.dir_variant.children) {
                if (i) {
-                       l = ylist_entry(i, struct yaffs_obj, siblings);
+                       l = list_entry(i, struct yaffs_obj, siblings);
                        yaffs_del_obj(l);
                }
        }
@@ -4151,8 +4093,8 @@ static void yaffs_fix_hanging_objs(struct yaffs_dev *dev)
        struct yaffs_obj *obj;
        struct yaffs_obj *parent;
        int i;
-       struct ylist_head *lh;
-       struct ylist_head *n;
+       struct list_head *lh;
+       struct list_head *n;
        int depth_limit;
        int hanging;
 
@@ -4165,9 +4107,9 @@ static void yaffs_fix_hanging_objs(struct yaffs_dev *dev)
         */
 
        for (i = 0; i <  YAFFS_NOBJECT_BUCKETS; i++) {
-               ylist_for_each_safe(lh, n, &dev->obj_bucket[i].list) {
+               list_for_each_safe(lh, n, &dev->obj_bucket[i].list) {
                        if (lh) {
-                               obj = ylist_entry(lh, struct yaffs_obj, hash_link);
+                               obj = list_entry(lh, struct yaffs_obj, hash_link);
                                parent= obj->parent;
                                
                                if(yaffs_has_null_parent(dev,obj)){
@@ -4213,15 +4155,15 @@ static void yaffs_fix_hanging_objs(struct yaffs_dev *dev)
 static void yaffs_del_dir_contents(struct yaffs_obj *dir)
 {
        struct yaffs_obj *obj;
-       struct ylist_head *lh;
-       struct ylist_head *n;
+       struct list_head *lh;
+       struct list_head *n;
 
        if(dir->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY)
                YBUG();
        
-       ylist_for_each_safe(lh, n, &dir->variant.dir_variant.children) {
+       list_for_each_safe(lh, n, &dir->variant.dir_variant.children) {
                if (lh) {
-                       obj = ylist_entry(lh, struct yaffs_obj, siblings);
+                       obj = list_entry(lh, struct yaffs_obj, siblings);
                        if(obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY)
                                yaffs_del_dir_contents(obj);
 
@@ -4265,22 +4207,7 @@ static void yaffs_check_obj_details_loaded(struct yaffs_obj *in)
                oh = (struct yaffs_obj_hdr *) chunk_data;
 
                in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
-               in->win_atime[0] = oh->win_atime[0];
-               in->win_ctime[0] = oh->win_ctime[0];
-               in->win_mtime[0] = oh->win_mtime[0];
-               in->win_atime[1] = oh->win_atime[1];
-               in->win_ctime[1] = oh->win_ctime[1];
-               in->win_mtime[1] = oh->win_mtime[1];
-#else
-               in->yst_uid = oh->yst_uid;
-               in->yst_gid = oh->yst_gid;
-               in->yst_atime = oh->yst_atime;
-               in->yst_mtime = oh->yst_mtime;
-               in->yst_ctime = oh->yst_ctime;
-               in->yst_rdev = oh->yst_rdev;
-
-#endif
+               yaffs_load_attribs(in, oh);
                yaffs_set_obj_name_from_oh(in, oh);
 
                if (in->variant_type == YAFFS_OBJECT_TYPE_SYMLINK) {
@@ -4317,40 +4244,39 @@ static void yaffs_update_parent(struct yaffs_obj *obj)
        struct yaffs_dev *dev;
        if(!obj)
                return;
-#ifndef CONFIG_YAFFS_WINCE
-
        dev = obj->my_dev;
        obj->dirty = 1;
-       obj->yst_mtime = obj->yst_ctime = Y_CURRENT_TIME;
+       yaffs_load_current_time(obj,0,1);
        if(dev->param.defered_dir_update){
-               struct ylist_head *link = &obj->variant.dir_variant.dirty; 
+               struct list_head *link = &obj->variant.dir_variant.dirty; 
        
-               if(ylist_empty(link)){
-                       ylist_add(link,&dev->dirty_dirs);
-                       T(YAFFS_TRACE_BACKGROUND, (TSTR("Added object %d to dirty directories" TENDSTR),obj->obj_id));
+               if(list_empty(link)){
+                       list_add(link,&dev->dirty_dirs);
+                       T(YAFFS_TRACE_BACKGROUND, 
+                       (TSTR("Added object %d to dirty directories" TENDSTR),
+                       obj->obj_id));
                }
 
        } else
                yaffs_update_oh(obj, NULL, 0, 0, 0, NULL);
-#endif
 }
 
 void yaffs_update_dirty_dirs(struct yaffs_dev *dev)
 {
-       struct ylist_head *link;
+       struct list_head *link;
        struct yaffs_obj *obj;
        struct yaffs_dir_var *d_s;
        union yaffs_obj_var *o_v;
 
        T(YAFFS_TRACE_BACKGROUND, (TSTR("Update dirty directories" TENDSTR)));
 
-       while(!ylist_empty(&dev->dirty_dirs)){
+       while(!list_empty(&dev->dirty_dirs)){
                link = dev->dirty_dirs.next;
-               ylist_del_init(link);
+               list_del_init(link);
                
-               d_s=ylist_entry(link,struct yaffs_dir_var,dirty);
-               o_v = ylist_entry(d_s,union yaffs_obj_var,dir_variant);
-               obj = ylist_entry(o_v,struct yaffs_obj,variant);
+               d_s=list_entry(link,struct yaffs_dir_var,dirty);
+               o_v = list_entry(d_s,union yaffs_obj_var,dir_variant);
+               obj = list_entry(o_v,struct yaffs_obj,variant);
 
                T(YAFFS_TRACE_BACKGROUND, (TSTR("Update directory %d" TENDSTR), obj->obj_id));
 
@@ -4373,7 +4299,7 @@ static void yaffs_remove_obj_from_dir(struct yaffs_obj *obj)
                dev->param.remove_obj_fn(obj);
 
 
-       ylist_del_init(&obj->siblings);
+       list_del_init(&obj->siblings);
        obj->parent = NULL;
        
        yaffs_verify_dir(parent);
@@ -4410,7 +4336,7 @@ void yaffs_add_obj_to_dir(struct yaffs_obj *directory,
 
 
        /* Now add it */
-       ylist_add(&obj->siblings, &directory->variant.dir_variant.children);
+       list_add(&obj->siblings, &directory->variant.dir_variant.children);
        obj->parent = directory;
 
        if (directory == obj->my_dev->unlinked_dir
@@ -4429,7 +4355,7 @@ struct yaffs_obj *yaffs_find_by_name(struct yaffs_obj *directory,
 {
        int sum;
 
-       struct ylist_head *i;
+       struct list_head *i;
        YCHAR buffer[YAFFS_MAX_NAME_LENGTH + 1];
 
        struct yaffs_obj *l;
@@ -4454,9 +4380,9 @@ struct yaffs_obj *yaffs_find_by_name(struct yaffs_obj *directory,
 
        sum = yaffs_calc_name_sum(name);
 
-       ylist_for_each(i, &directory->variant.dir_variant.children) {
+       list_for_each(i, &directory->variant.dir_variant.children) {
                if (i) {
-                       l = ylist_entry(i, struct yaffs_obj, siblings);
+                       l = list_entry(i, struct yaffs_obj, siblings);
 
                        if (l->parent != directory)
                                YBUG();
@@ -4658,12 +4584,12 @@ int yaffs_get_obj_length(struct yaffs_obj *obj)
 int yaffs_get_obj_link_count(struct yaffs_obj *obj)
 {
        int count = 0;
-       struct ylist_head *i;
+       struct list_head *i;
 
        if (!obj->unlinked)
                count++;                /* the object itself */
 
-       ylist_for_each(i, &obj->hard_links)
+       list_for_each(i, &obj->hard_links)
                count++;                /* add the hard links; */
 
        return count;
@@ -4717,63 +4643,6 @@ YCHAR *yaffs_get_symlink_alias(struct yaffs_obj *obj)
                return yaffs_clone_str(_Y(""));
 }
 
-#ifndef CONFIG_YAFFS_WINCE
-
-int yaffs_set_attribs(struct yaffs_obj *obj, struct iattr *attr)
-{
-       unsigned int valid = attr->ia_valid;
-
-       if (valid & ATTR_MODE)
-               obj->yst_mode = attr->ia_mode;
-       if (valid & ATTR_UID)
-               obj->yst_uid = attr->ia_uid;
-       if (valid & ATTR_GID)
-               obj->yst_gid = attr->ia_gid;
-
-       if (valid & ATTR_ATIME)
-               obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime);
-       if (valid & ATTR_CTIME)
-               obj->yst_ctime = Y_TIME_CONVERT(attr->ia_ctime);
-       if (valid & ATTR_MTIME)
-               obj->yst_mtime = Y_TIME_CONVERT(attr->ia_mtime);
-
-       if (valid & ATTR_SIZE)
-               yaffs_resize_file(obj, attr->ia_size);
-
-       yaffs_update_oh(obj, NULL, 1, 0, 0, NULL);
-
-       return YAFFS_OK;
-
-}
-int yaffs_get_attribs(struct yaffs_obj *obj, struct iattr *attr)
-{
-       unsigned int valid = 0;
-
-       attr->ia_mode = obj->yst_mode;
-       valid |= ATTR_MODE;
-       attr->ia_uid = obj->yst_uid;
-       valid |= ATTR_UID;
-       attr->ia_gid = obj->yst_gid;
-       valid |= ATTR_GID;
-
-       Y_TIME_CONVERT(attr->ia_atime) = obj->yst_atime;
-       valid |= ATTR_ATIME;
-       Y_TIME_CONVERT(attr->ia_ctime) = obj->yst_ctime;
-       valid |= ATTR_CTIME;
-       Y_TIME_CONVERT(attr->ia_mtime) = obj->yst_mtime;
-       valid |= ATTR_MTIME;
-
-       attr->ia_size = yaffs_get_file_size(obj);
-       valid |= ATTR_SIZE;
-
-       attr->ia_valid = valid;
-
-       return YAFFS_OK;
-}
-
-#endif
-
-
 static int yaffs_do_xattrib_mod(struct yaffs_obj *obj, int set, const YCHAR *name, const void *value, int size, int flags)
 {
        struct yaffs_xattr_mod xmod;
@@ -5006,7 +4875,7 @@ int yaffs_guts_initialise(struct yaffs_dev *dev)
 
        /* Sort out space for inband tags, if required */
        if (dev->param.inband_tags)
-               dev->data_bytes_per_chunk = dev->param.total_bytes_per_chunk - sizeof(yaffs_packed_tags2_tags_only);
+               dev->data_bytes_per_chunk = dev->param.total_bytes_per_chunk - sizeof(struct yaffs_packed_tags2_tags_only);
        else
                dev->data_bytes_per_chunk = dev->param.total_bytes_per_chunk;
 
@@ -5020,13 +4889,6 @@ int yaffs_guts_initialise(struct yaffs_dev *dev)
                return YAFFS_FAIL;
        }
 
-       /* This is really a compilation check. */
-       if (!yaffs_check_structures()) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR("yaffs_check_structures failed\n" TENDSTR)));
-               return YAFFS_FAIL;
-       }
-
        if (dev->is_mounted) {
                T(YAFFS_TRACE_ALWAYS,
                  (TSTR("yaffs: device already mounted\n" TENDSTR)));
@@ -5122,7 +4984,7 @@ int yaffs_guts_initialise(struct yaffs_dev *dev)
        dev->n_erased_blocks = 0;
        dev->gc_disable= 0;
        dev->has_pending_prioritised_gc = 1; /* Assume the worst for now, will get fixed on first GC */
-       YINIT_LIST_HEAD(&dev->dirty_dirs);
+       INIT_LIST_HEAD(&dev->dirty_dirs);
        dev->oldest_dirty_seq = 0;
        dev->oldest_dirty_block = 0;
 
@@ -5350,28 +5212,3 @@ int yaffs_get_n_free_chunks(struct yaffs_dev *dev)
        return n_free;
 
 }
-
-
-/*---------------------------------------- YAFFS test code ----------------------*/
-
-#define yaffs_check_struct(structure, syze, name) \
-       do { \
-               if (sizeof(structure) != syze) { \
-                       T(YAFFS_TRACE_ALWAYS, (TSTR("%s should be %d but is %d\n" TENDSTR),\
-                               name, syze, (int) sizeof(structure))); \
-                       return YAFFS_FAIL; \
-               } \
-       } while (0)
-
-static int yaffs_check_structures(void)
-{
-/*      yaffs_check_struct(struct yaffs_tags,8,"struct yaffs_tags"); */
-/*      yaffs_check_struct(union yaffs_tags_union,8,"union yaffs_tags_union"); */
-/*      yaffs_check_struct(struct yaffs_spare,16,"struct yaffs_spare"); */
-/*     yaffs_check_struct(struct yaffs_tnode, 2 * YAFFS_NTNODES_LEVEL0, "struct yaffs_tnode"); */
-
-#ifndef CONFIG_YAFFS_WINCE
-       yaffs_check_struct(struct yaffs_obj_hdr, 512, "struct yaffs_obj_hdr");
-#endif
-       return YAFFS_OK;
-}