| From f3b15ccdbb9a79781578249a63318805e55a6c34 Mon Sep 17 00:00:00 2001 |
| From: Josef Bacik <jbacik@fusionio.com> |
| Date: Mon, 22 Jul 2013 12:54:30 -0400 |
| Subject: Btrfs: release both paths before logging dir/changed extents |
| |
| From: Josef Bacik <jbacik@fusionio.com> |
| |
| commit f3b15ccdbb9a79781578249a63318805e55a6c34 upstream. |
| |
| 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, |
| |
| Signed-off-by: Josef Bacik <jbacik@fusionio.com> |
| Signed-off-by: Chris Mason <chris.mason@fusionio.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/btrfs/tree-log.c | 5 ++--- |
| 1 file changed, 2 insertions(+), 3 deletions(-) |
| |
| --- a/fs/btrfs/tree-log.c |
| +++ b/fs/btrfs/tree-log.c |
| @@ -3728,8 +3728,9 @@ next_slot: |
| } |
| |
| log_extents: |
| + btrfs_release_path(path); |
| + btrfs_release_path(dst_path); |
| if (fast_search) { |
| - btrfs_release_path(dst_path); |
| ret = btrfs_log_changed_extents(trans, root, inode, dst_path); |
| if (ret) { |
| err = ret; |
| @@ -3746,8 +3747,6 @@ log_extents: |
| } |
| |
| 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); |
| if (ret) { |
| err = ret; |