Commit f3b15ccd authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason

Btrfs: release both paths before logging dir/changed extents

The ceph guys tripped over this bug where we were still holding onto the
original path that we used to copy the inode with when logging.  This is based
on Chris's fix which was reported to fix the problem.  We need to drop the paths
in two cases anyway so just move the drop up so that we don't have duplicate
code.  Thanks,

Cc: stable@vger.kernel.org
Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
parent ee20a983
...@@ -3746,8 +3746,9 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans, ...@@ -3746,8 +3746,9 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
} }
log_extents: log_extents:
btrfs_release_path(path);
btrfs_release_path(dst_path);
if (fast_search) { if (fast_search) {
btrfs_release_path(dst_path);
ret = btrfs_log_changed_extents(trans, root, inode, dst_path); ret = btrfs_log_changed_extents(trans, root, inode, dst_path);
if (ret) { if (ret) {
err = ret; err = ret;
...@@ -3764,8 +3765,6 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans, ...@@ -3764,8 +3765,6 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
} }
if (inode_only == LOG_INODE_ALL && S_ISDIR(inode->i_mode)) { if (inode_only == LOG_INODE_ALL && S_ISDIR(inode->i_mode)) {
btrfs_release_path(path);
btrfs_release_path(dst_path);
ret = log_directory_changes(trans, root, inode, path, dst_path); ret = log_directory_changes(trans, root, inode, path, dst_path);
if (ret) { if (ret) {
err = ret; err = ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment