From: Filipe David Borba Manana Date: Wed, 11 Sep 2013 19:36:44 +0000 (+0100) Subject: Btrfs: don't leak transaction in btrfs_sync_file() X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=a0634be562c27ddee7c94bce4f765f8071244e07;p=deliverable%2Flinux.git Btrfs: don't leak transaction in btrfs_sync_file() In btrfs_sync_file(), if the call to btrfs_log_dentry_safe() returns a negative error (for e.g. -ENOMEM via btrfs_log_inode()), we would return without ending/freeing the transaction. Signed-off-by: Josef Bacik Signed-off-by: Chris Mason --- diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 5ba87b0d2ef8..d12107e90987 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1859,8 +1859,8 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync) ret = btrfs_log_dentry_safe(trans, root, dentry); if (ret < 0) { - mutex_unlock(&inode->i_mutex); - goto out; + /* Fallthrough and commit/free transaction. */ + ret = 1; } /* we've logged all the items and now have a consistent