Btrfs: pin logs earlier when doing a rename exchange operation
[cascardo/linux.git] / fs / btrfs / inode.c
index c92d9b8..a7db3ed 100644 (file)
@@ -9458,6 +9458,8 @@ static int btrfs_rename_exchange(struct inode *old_dir,
                /* force full log commit if subvolume involved. */
                btrfs_set_log_full_commit(root->fs_info, trans);
        } else {
+               btrfs_pin_log_trans(root);
+               root_log_pinned = true;
                ret = btrfs_insert_inode_ref(trans, dest,
                                             new_dentry->d_name.name,
                                             new_dentry->d_name.len,
@@ -9465,8 +9467,6 @@ static int btrfs_rename_exchange(struct inode *old_dir,
                                             btrfs_ino(new_dir), old_idx);
                if (ret)
                        goto out_fail;
-               btrfs_pin_log_trans(root);
-               root_log_pinned = true;
        }
 
        /* And now for the dest. */
@@ -9474,6 +9474,8 @@ static int btrfs_rename_exchange(struct inode *old_dir,
                /* force full log commit if subvolume involved. */
                btrfs_set_log_full_commit(dest->fs_info, trans);
        } else {
+               btrfs_pin_log_trans(dest);
+               dest_log_pinned = true;
                ret = btrfs_insert_inode_ref(trans, root,
                                             old_dentry->d_name.name,
                                             old_dentry->d_name.len,
@@ -9481,8 +9483,6 @@ static int btrfs_rename_exchange(struct inode *old_dir,
                                             btrfs_ino(old_dir), new_idx);
                if (ret)
                        goto out_fail;
-               btrfs_pin_log_trans(dest);
-               dest_log_pinned = true;
        }
 
        /* Update inode version and ctime/mtime. */