yaffs: More clean up
[yaffs2.git] / yaffs_guts.c
index 19a5b39490fc14d0829af2464bfe31aec6b46485..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,
@@ -1367,23 +1368,13 @@ 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;
@@ -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);
@@ -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
        */
@@ -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;
@@ -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,22 +4244,21 @@ 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 list_head *link = &obj->variant.dir_variant.dirty; 
        
                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));
+                       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)
@@ -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;
@@ -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)));
@@ -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;
-}