]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/jffs2/write.c
Auto-update from upstream
[linux-2.6-omap-h63xx.git] / fs / jffs2 / write.c
index d6b4d55e70e4d062bdc706c09c686c98e2497ca5..69100615d9aef17535f808ed6e5e805b404f6eb2 100644 (file)
@@ -7,7 +7,7 @@
  *
  * For licensing information, see the file 'LICENCE' in this directory.
  *
- * $Id: write.c,v 1.90 2005/01/28 18:53:01 hammache Exp $
+ * $Id: write.c,v 1.92 2005/04/13 13:22:35 dwmw2 Exp $
  *
  */
 
@@ -35,13 +35,12 @@ int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint
        f->inocache = ic;
        f->inocache->nlink = 1;
        f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache;
-       f->inocache->ino = ++c->highest_ino;
        f->inocache->state = INO_STATE_PRESENT;
 
-       ri->ino = cpu_to_je32(f->inocache->ino);
 
-       D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", f->inocache->ino));
        jffs2_add_ino_cache(c, f->inocache);
+       D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", f->inocache->ino));
+       ri->ino = cpu_to_je32(f->inocache->ino);
 
        ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
        ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
@@ -644,20 +643,23 @@ int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f,
 
                down(&dead_f->sem);
 
-               while (dead_f->dents) {
-                       /* There can be only deleted ones */
-                       fd = dead_f->dents;
-                       
-                       dead_f->dents = fd->next;
-                       
-                       if (fd->ino) {
-                               printk(KERN_WARNING "Deleting inode #%u with active dentry \"%s\"->ino #%u\n",
-                                      dead_f->inocache->ino, fd->name, fd->ino);
-                       } else {
-                               D1(printk(KERN_DEBUG "Removing deletion dirent for \"%s\" from dir ino #%u\n", fd->name, dead_f->inocache->ino));
+               if (S_ISDIR(OFNI_EDONI_2SFFJ(dead_f)->i_mode)) {
+                       while (dead_f->dents) {
+                               /* There can be only deleted ones */
+                               fd = dead_f->dents;
+                               
+                               dead_f->dents = fd->next;
+                               
+                               if (fd->ino) {
+                                       printk(KERN_WARNING "Deleting inode #%u with active dentry \"%s\"->ino #%u\n",
+                                              dead_f->inocache->ino, fd->name, fd->ino);
+                               } else {
+                                       D1(printk(KERN_DEBUG "Removing deletion dirent for \"%s\" from dir ino #%u\n",
+                                               fd->name, dead_f->inocache->ino));
+                               }
+                               jffs2_mark_node_obsolete(c, fd->raw);
+                               jffs2_free_full_dirent(fd);
                        }
-                       jffs2_mark_node_obsolete(c, fd->raw);
-                       jffs2_free_full_dirent(fd);
                }
 
                dead_f->inocache->nlink--;