|
@@ -9693,10 +9693,6 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry,
|
|
|
if (err)
|
|
|
goto out_unlock_inode;
|
|
|
|
|
|
- err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index);
|
|
|
- if (err)
|
|
|
- goto out_unlock_inode;
|
|
|
-
|
|
|
path = btrfs_alloc_path();
|
|
|
if (!path) {
|
|
|
err = -ENOMEM;
|
|
@@ -9733,6 +9729,13 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry,
|
|
|
inode_set_bytes(inode, name_len);
|
|
|
btrfs_i_size_write(inode, name_len);
|
|
|
err = btrfs_update_inode(trans, root, inode);
|
|
|
+ /*
|
|
|
+ * Last step, add directory indexes for our symlink inode. This is the
|
|
|
+ * last step to avoid extra cleanup of these indexes if an error happens
|
|
|
+ * elsewhere above.
|
|
|
+ */
|
|
|
+ if (!err)
|
|
|
+ err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index);
|
|
|
if (err) {
|
|
|
drop_inode = 1;
|
|
|
goto out_unlock_inode;
|