diff -urpN --exclude-from=/home/davej/.exclude bk-linus/fs/jffs2/dir.c linux-2.5/fs/jffs2/dir.c --- bk-linus/fs/jffs2/dir.c 2002-11-21 02:20:18.000000000 +0000 +++ linux-2.5/fs/jffs2/dir.c 2002-11-21 18:02:17.000000000 +0000 @@ -785,6 +785,18 @@ static int jffs2_rename (struct inode *o if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f) new_dir_i->i_nlink++; + if (victim_f) { + /* There was a victim. Kill it off nicely */ + new_dentry->d_inode->i_nlink--; + /* Don't oops if the victim was a dirent pointing to an + inode which didn't exist. */ + if (victim_f->inocache) { + down(&victim_f->sem); + victim_f->inocache->nlink--; + up(&victim_f->sem); + } + } + /* Unlink the original */ ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i), old_dentry->d_name.name, old_dentry->d_name.len, NULL);