changeset 253:ac67e3d7378b

Consolidate unlinked file handling durinit init to take care of restored checkpoint case too.
author charles
date Mon, 12 Jan 2009 00:53:47 +0000
parents 67ca7e10e918
children 08307f2d7546
files yaffs_guts.c
diffstat 1 files changed, 31 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/yaffs_guts.c
+++ b/yaffs_guts.c
@@ -5514,6 +5514,35 @@ struct yaffs_ShadowFixerStruct {
 	struct yaffs_ShadowFixerStruct *next;
 };
 
+
+static void yaffs_StripDeletedObjects(yaffs_Device *dev)
+{
+	/*
+	*  Sort out state of unlinked and deleted objects after scanning.
+	*/
+	struct ylist_head *i;
+	struct ylist_head *n;
+	yaffs_Object *l;
+
+	/* Soft delete all the unlinked files */
+	ylist_for_each_safe(i, n,
+		&dev->unlinkedDir->variant.directoryVariant.children) {
+		if (i) {
+			l = ylist_entry(i, yaffs_Object, siblings);
+			yaffs_DestroyObject(l);
+		}
+	}
+	
+	ylist_for_each_safe(i, n,
+		&dev->deletedDir->variant.directoryVariant.children) {
+		if (i) {
+			l = ylist_entry(i, yaffs_Object, siblings);
+			yaffs_DestroyObject(l);
+		}
+	}
+
+}
+
 static int yaffs_Scan(yaffs_Device * dev)
 {
 	yaffs_ExtendedTags tags;
@@ -5914,25 +5943,6 @@ static int yaffs_Scan(yaffs_Device * dev
 
 	yaffs_HardlinkFixup(dev,hardList);
 	
-	/* Handle the unlinked files. Since they were left in an unlinked state we should
-         * just delete them.
-         */
-        {
-                struct ylist_head *i;
-                struct ylist_head *n;
-
-                yaffs_Object *l;
-                /* Soft delete all the unlinked files */
-                ylist_for_each_safe(i, n,
-                                   &dev->unlinkedDir->variant.directoryVariant.
-                                   children) {
-                        if (i) {
-                                l = ylist_entry(i, yaffs_Object, siblings);
-                                yaffs_DestroyObject(l);
-                        }
-                }
-	}
-
 	/* Fix up any shadowed objects */
 	{
 		struct yaffs_ShadowFixerStruct *fixer;
@@ -6664,37 +6674,6 @@ static int yaffs_ScanBackwards(yaffs_Dev
 	 */
 	yaffs_HardlinkFixup(dev,hardList);
 	
-	
-	/*
-        *  Sort out state of unlinked and deleted objects.
-        */
-        {
-                struct ylist_head *i;
-                struct ylist_head *n;
-
-                yaffs_Object *l;
-
-                /* Soft delete all the unlinked files */
-                ylist_for_each_safe(i, n,
-                                   &dev->unlinkedDir->variant.directoryVariant.
-                                   children) {
-                        if (i) {
-                                l = ylist_entry(i, yaffs_Object, siblings);
-                                yaffs_DestroyObject(l);
-                        }
-                }
-
-                /* Soft delete all the deletedDir files */
-                ylist_for_each_safe(i, n,
-                                   &dev->deletedDir->variant.directoryVariant.
-                                   children) {
-                        if (i) {
-                                l = ylist_entry(i, yaffs_Object, siblings);
-                                yaffs_DestroyObject(l);
-
-                        }
-		}
-	}
 
 	yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
 	
@@ -7507,6 +7486,8 @@ int yaffs_GutsInitialise(yaffs_Device * 
 		}else
 			if(!yaffs_Scan(dev))
 				init_failed = 1;
+
+		yaffs_StripDeletedObjects(dev);
 	}
 		
 	if(init_failed){