yaffs-vfs-multi.c: Handle search context properly to prevent leaking
[yaffs2.git] / yaffs_guts.c
index 7678896692927f47290c1b8b6dadc1da7deb41d0..c52ff842d77285417eba7579ae437e2ae539a7b9 100644 (file)
@@ -4534,13 +4534,11 @@ int yaffs_get_obj_name(struct yaffs_obj *obj, YCHAR *name, int buffer_size)
 
                if (obj->hdr_chunk > 0) {
                        result = yaffs_rd_chunk_tags_nand(obj->my_dev,
-                                                         obj->hdr_chunk,
-                                                         buffer, NULL);
+                               obj->hdr_chunk, buffer, NULL);
+                       if (result == YAFFS_OK)
+                               yaffs_load_name_from_oh(obj->my_dev, name,
+                                       oh->name, buffer_size);
                }
-               if (result == YAFFS_OK)
-                       yaffs_load_name_from_oh(obj->my_dev, name, oh->name,
-                                       buffer_size);
-
                yaffs_release_temp_buffer(obj->my_dev, buffer);
        }
 
@@ -4801,6 +4799,18 @@ int yaffs_guts_format_dev(struct yaffs_dev *dev)
        return YAFFS_OK;
 }
 
+/*
+ * If the dev is mounted r/w then the cleanup will happen during
+ * yaffs_guts_initialise. However if the dev is mounted ro then
+ * the cleanup will be dfered until yaffs is remounted r/w.
+ */
+void yaffs_guts_cleanup(struct yaffs_dev *dev)
+{
+       yaffs_strip_deleted_objs(dev);
+       yaffs_fix_hanging_objs(dev);
+       if (dev->param.empty_lost_n_found)
+                       yaffs_empty_l_n_f(dev);
+}
 
 int yaffs_guts_initialise(struct yaffs_dev *dev)
 {
@@ -5014,10 +5024,7 @@ int yaffs_guts_initialise(struct yaffs_dev *dev)
                        init_failed = 1;
                }
 
-               yaffs_strip_deleted_objs(dev);
-               yaffs_fix_hanging_objs(dev);
-               if (dev->param.empty_lost_n_found)
-                       yaffs_empty_l_n_f(dev);
+               yaffs_guts_cleanup(dev);
        }
 
        if (init_failed) {