| From 8fca955057b9c58467d1b231e43f19c4cf26ae8c Mon Sep 17 00:00:00 2001 |
| From: Josef Bacik <josef@toxicpanda.com> |
| Date: Fri, 3 May 2019 11:10:06 -0400 |
| Subject: btrfs: don't double unlock on error in btrfs_punch_hole |
| |
| From: Josef Bacik <josef@toxicpanda.com> |
| |
| commit 8fca955057b9c58467d1b231e43f19c4cf26ae8c upstream. |
| |
| If we have an error writing out a delalloc range in |
| btrfs_punch_hole_lock_range we'll unlock the inode and then goto |
| out_only_mutex, where we will again unlock the inode. This is bad, |
| don't do this. |
| |
| Fixes: f27451f22996 ("Btrfs: add support for fallocate's zero range operation") |
| CC: stable@vger.kernel.org # 4.19+ |
| Reviewed-by: Filipe Manana <fdmanana@suse.com> |
| Signed-off-by: Josef Bacik <josef@toxicpanda.com> |
| Reviewed-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/btrfs/file.c | 4 +--- |
| 1 file changed, 1 insertion(+), 3 deletions(-) |
| |
| --- a/fs/btrfs/file.c |
| +++ b/fs/btrfs/file.c |
| @@ -2546,10 +2546,8 @@ static int btrfs_punch_hole(struct inode |
| |
| ret = btrfs_punch_hole_lock_range(inode, lockstart, lockend, |
| &cached_state); |
| - if (ret) { |
| - inode_unlock(inode); |
| + if (ret) |
| goto out_only_mutex; |
| - } |
| |
| path = btrfs_alloc_path(); |
| if (!path) { |