struct inode *old_inode = d_inode(old_dentry);
        struct inode *new_inode = d_inode(new_dentry);
        struct udf_fileident_iter oiter, niter, diriter;
-       bool has_diriter = false;
+       bool has_diriter = false, is_dir = false;
        int retval;
        struct kernel_lb_addr tloc;
 
                        if (!empty_dir(new_inode))
                                goto out_oiter;
                }
+               is_dir = true;
+       }
+       if (is_dir && old_dir != new_dir) {
                retval = udf_fiiter_find_entry(old_inode, &dotdot_name,
                                               &diriter);
                if (retval == -ENOENT) {
                               udf_dir_entry_len(&diriter.fi));
                udf_fiiter_write_fi(&diriter, NULL);
                udf_fiiter_release(&diriter);
+       }
 
+       if (is_dir) {
                inode_dec_link_count(old_dir);
                if (new_inode)
                        inode_dec_link_count(new_inode);