BUG_ON(!S_ISREG(dentry->d_inode->i_mode));
unionfs_check_file(file);
- unionfs_check_dentry(dentry);
for (bindex = bstart - 1; bindex >= 0; bindex--) {
if (!d_deleted(dentry))
err = copyup_file(parent_inode, file, bstart,
out:
unionfs_check_file(file);
- unionfs_check_dentry(dentry);
return err;
}
bindex, old_dentry->d_name.name,
old_dentry->d_name.len, NULL,
i_size_read(old_dentry->d_inode));
- if (!err) {
- lower_new_dentry =
- create_parents(dir, new_dentry,
- new_dentry->d_name.name,
- bindex);
- lower_old_dentry =
- unionfs_lower_dentry(old_dentry);
- lower_dir_dentry =
- lock_parent(lower_new_dentry);
- /*
- * see
- * Documentation/filesystems/unionfs/issues.txt
- */
- lockdep_off();
- /* do vfs_link */
- err = vfs_link(lower_old_dentry,
- lower_dir_dentry->d_inode,
- lower_new_dentry);
- lockdep_on();
- unlock_dir(lower_dir_dentry);
- goto check_link;
- }
+ if (err)
+ continue;
+ lower_new_dentry =
+ create_parents(dir, new_dentry,
+ new_dentry->d_name.name,
+ bindex);
+ lower_old_dentry = unionfs_lower_dentry(old_dentry);
+ lower_dir_dentry = lock_parent(lower_new_dentry);
+ /* see Documentation/filesystems/unionfs/issues.txt */
+ lockdep_off();
+ /* do vfs_link */
+ err = vfs_link(lower_old_dentry,
+ lower_dir_dentry->d_inode,
+ lower_new_dentry);
+ lockdep_on();
+ unlock_dir(lower_dir_dentry);
+ goto check_link;
}
goto out;
}