Revert "Add handling for unrooted files"
author黄涛 <huangtao@rock-chips.com>
Sat, 30 Jul 2011 14:45:07 +0000 (22:45 +0800)
committer黄涛 <huangtao@rock-chips.com>
Sat, 30 Jul 2011 14:45:07 +0000 (22:45 +0800)
This reverts commit 75e82381df19bcb8bf6681f3fe1a2a8360e6cddc.

fs/yaffs2/Kconfig
fs/yaffs2/yaffs_fs.c
fs/yaffs2/yaffs_guts.c
fs/yaffs2/yaffs_guts.h

index 85844504057cd989e00ec373860dd72aa13bdc40..c0e545b647b1c9e882dda2fdb9de89bb3737bdf2 100644 (file)
@@ -154,11 +154,3 @@ config YAFFS_SHORT_NAMES_IN_RAM
          but makes look-ups faster.
 
          If unsure, say Y.
-
-config YAFFS_EMPTY_LOST_AND_FOUND
-       bool "Empty lost and found on mount"
-       depends on YAFFS_FS
-       default n
-       help
-         If this is enabled then the contents of lost and found is
-         automatically dumped at mount.
index 45aa158b18d330196a7cf66cfd5119cd9926e9cf..47cae6f4f92cb7460889ce9ab8f0a205d9695c27 100644 (file)
@@ -1796,8 +1796,6 @@ typedef struct {
        int skip_checkpoint_read;
        int skip_checkpoint_write;
        int no_cache;
-       int empty_lost_and_found_overridden;
-       int empty_lost_and_found;
 } yaffs_options;
 
 #define MAX_OPT_LEN 20
@@ -1813,9 +1811,6 @@ static int yaffs_parse_options(yaffs_options *options, const char *options_str)
                memset(cur_opt, 0, MAX_OPT_LEN + 1);
                p = 0;
 
-               while (*options_str == ',')
-                       options_str++;
-
                while (*options_str && *options_str != ',') {
                        if (p < MAX_OPT_LEN) {
                                cur_opt[p] = *options_str;
@@ -1835,12 +1830,6 @@ static int yaffs_parse_options(yaffs_options *options, const char *options_str)
                else if (!strcmp(cur_opt, "no-checkpoint")) {
                        options->skip_checkpoint_read = 1;
                        options->skip_checkpoint_write = 1;
-               } else if (!strcmp(cur_opt, "empty-lost-and-found-disable")) {
-                       options->empty_lost_and_found = 0;
-                       options->empty_lost_and_found_overridden = 1;
-               } else if (!strcmp(cur_opt, "empty-lost-and-found-enable")) {
-                       options->empty_lost_and_found = 1;
-                       options->empty_lost_and_found_overridden = 1;
                } else {
                        printk(KERN_INFO "yaffs: Bad mount option \"%s\"\n",
                                        cur_opt);
@@ -1946,13 +1935,6 @@ static struct super_block *yaffs_internal_read_super(int yaffsVersion,
        T(YAFFS_TRACE_OS, (" size %lld\n", mtd->size));
 #endif
 
-
-#ifdef CONFIG_YAFFS_EMPTY_LOST_AND_FOUND
-       dev->emptyLostAndFound = 1;
-#endif
-       if(options.empty_lost_and_found_overridden)
-               dev->emptyLostAndFound = options.empty_lost_and_found;
-
 #ifdef CONFIG_YAFFS_AUTO_YAFFS2
 
        if (yaffsVersion == 1 && WRITE_SIZE(mtd) >= 2048) {
index a565b08e6116108d401263d6ec5421d70c85ab48..05ff48d1bc468e0ef2b582dcd0f796bd937be673 100644 (file)
@@ -113,6 +113,7 @@ static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device *dev,
                                        yaffs_FileStructure *fStruct,
                                        __u32 chunkId);
 
+
 /* Function to calculate chunk and offset */
 
 static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, int *chunkOut,
@@ -5449,125 +5450,6 @@ static void yaffs_StripDeletedObjects(yaffs_Device *dev)
 
 }
 
-/*
- * This code iterates through all the objects making sure that they are rooted.
- * Any unrooted objects are re-rooted in lost+found.
- * An object needs to be in one of:
- * - Directly under deleted, unlinked
- * - Directly or indirectly under root.
- *
- * Note:
- *  This code assumes that we don't ever change the current relationships between
- *  directories:
- *   rootDir->parent == unlinkedDir->parent == deletedDir->parent == NULL
- *   lostNfound->parent == rootDir
- *
- * This fixes the problem where directories might have inadvertently been deleted
- * leaving the object "hanging" without being rooted in the directory tree.
- */
-
-static int yaffs_HasNULLParent(yaffs_Device *dev, yaffs_Object *obj)
-{
-       return (obj == dev->deletedDir ||
-               obj == dev->unlinkedDir||
-               obj == dev->rootDir);
-}
-
-static void yaffs_FixHangingObjects(yaffs_Device *dev)
-{
-       yaffs_Object *obj;
-       yaffs_Object *parent;
-       int i;
-       struct ylist_head *lh;
-       struct ylist_head *n;
-       int depthLimit;
-       int hanging;
-
-
-       /* Iterate through the objects in each hash entry,
-        * looking at each object.
-        * Make sure it is rooted.
-        */
-
-       for (i = 0; i <  YAFFS_NOBJECT_BUCKETS; i++) {
-               ylist_for_each_safe(lh, n, &dev->objectBucket[i].list) {
-                       if (lh) {
-                               obj = ylist_entry(lh, yaffs_Object, hashLink);
-                               parent= obj->parent;
-
-                               if(yaffs_HasNULLParent(dev,obj)){
-                                       /* These directories are not hanging */
-                                       hanging = 0;
-                               }
-                               else if(!parent || parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
-                                       hanging = 1;
-                               else if(yaffs_HasNULLParent(dev,parent))
-                                       hanging = 0;
-                               else {
-                                       /*
-                                        * Need to follow the parent chain to see if it is hanging.
-                                        */
-                                       hanging = 0;
-                                       depthLimit=100;
-
-                                       while(parent != dev->rootDir &&
-                                               parent->parent &&
-                                               parent->parent->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
-                                               depthLimit > 0){
-                                               parent = parent->parent;
-                                               depthLimit--;
-                                       }
-                                       if(parent != dev->rootDir)
-                                               hanging = 1;
-                               }
-                               if(hanging){
-                                       T(YAFFS_TRACE_SCAN,
-                                       (TSTR("Hanging object %d moved to lost and found" TENDSTR),
-                                       obj->objectId));
-                                       yaffs_AddObjectToDirectory(dev->lostNFoundDir,obj);
-                               }
-                       }
-               }
-       }
-}
-
-
-/*
- * Delete directory contents for cleaning up lost and found.
- */
-static void yaffs_DeleteDirectoryContents(yaffs_Object *dir)
-{
-       yaffs_Object *obj;
-       struct ylist_head *lh;
-       struct ylist_head *n;
-
-       if(dir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
-               YBUG();
-
-       ylist_for_each_safe(lh, n, &dir->variant.directoryVariant.children) {
-               if (lh) {
-                       obj = ylist_entry(lh, yaffs_Object, siblings);
-                       if(obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
-                               yaffs_DeleteDirectoryContents(obj);
-
-                       T(YAFFS_TRACE_SCAN,
-                               (TSTR("Deleting lost_found object %d" TENDSTR),
-                               obj->objectId));
-
-                       /* Need to use UnlinkObject since Delete would not handle
-                        * hardlinked objects correctly.
-                        */
-                       yaffs_UnlinkObject(obj);
-               }
-       }
-
-}
-
-static void yaffs_EmptyLostAndFound(yaffs_Device *dev)
-{
-       yaffs_DeleteDirectoryContents(dev->lostNFoundDir);
-}
-
 static int yaffs_Scan(yaffs_Device *dev)
 {
        yaffs_ExtendedTags tags;
@@ -7531,9 +7413,6 @@ int yaffs_GutsInitialise(yaffs_Device *dev)
                                init_failed = 1;
 
                yaffs_StripDeletedObjects(dev);
-               yaffs_FixHangingObjects(dev);
-               if(dev->emptyLostAndFound)
-                       yaffs_EmptyLostAndFound(dev);
        }
 
        if (init_failed) {
index acc2ae71c8566a362c05f5a6e300c0ba40a19d6a..a3b110291d3832c4b73a83069e9e7d3d1fc7b92f 100644 (file)
@@ -557,8 +557,6 @@ struct yaffs_DeviceStruct {
 
        int useHeaderFileSize;  /* Flag to determine if we should use file sizes from the header */
 
-       int emptyLostAndFound;  /* Flasg to determine if lst+found should be emptied on init */
-
        int useNANDECC;         /* Flag to decide whether or not to use NANDECC */
 
        void *genericDevice;    /* Pointer to device context