From: Robbie Ko Date: Tue, 17 Mar 2020 06:31:02 +0000 (+0800) Subject: btrfs: fix missing semaphore unlock in btrfs_sync_file X-Git-Tag: v5.10.7~2687^2~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6ff06729c22ec0b7498d900d79cc88cfb8aceaeb;p=platform%2Fkernel%2Flinux-rpi.git btrfs: fix missing semaphore unlock in btrfs_sync_file Ordered ops are started twice in sync file, once outside of inode mutex and once inside, taking the dio semaphore. There was one error path missing the semaphore unlock. Fixes: aab15e8ec2576 ("Btrfs: fix rare chances for data loss when doing a fast fsync") CC: stable@vger.kernel.org # 4.19+ Signed-off-by: Robbie Ko Reviewed-by: Filipe Manana [ add changelog ] Signed-off-by: David Sterba --- diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 20107f4..8a144f9 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -2117,6 +2117,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) */ ret = start_ordered_ops(inode, start, end); if (ret) { + up_write(&BTRFS_I(inode)->dio_sem); inode_unlock(inode); goto out; }