* [PATCH] Btrfs: don't leak transaction in btrfs_sync_file()
@ 2013-09-11 19:36 Filipe David Borba Manana
2013-09-12 9:37 ` [PATCH v2] " Filipe David Borba Manana
0 siblings, 1 reply; 2+ messages in thread
From: Filipe David Borba Manana @ 2013-09-11 19:36 UTC (permalink / raw)
To: linux-btrfs; +Cc: jbacik, Filipe David Borba Manana
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.
---
fs/btrfs/file.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 5ba87b0..d12107e 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
--
1.7.9.5
^ permalink raw reply related [flat|nested] 2+ messages in thread* [PATCH v2] Btrfs: don't leak transaction in btrfs_sync_file()
2013-09-11 19:36 [PATCH] Btrfs: don't leak transaction in btrfs_sync_file() Filipe David Borba Manana
@ 2013-09-12 9:37 ` Filipe David Borba Manana
0 siblings, 0 replies; 2+ messages in thread
From: Filipe David Borba Manana @ 2013-09-12 9:37 UTC (permalink / raw)
To: linux-btrfs; +Cc: jbacik, Filipe David Borba Manana
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: Filipe David Borba Manana <fdmanana@gmail.com>
---
V2: If btrfs_log_dentry_safe() returns error, don't fall through because
that will override the final return value, and can make us return
success (0) instead of an error.
fs/btrfs/file.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 5ba87b0..8c305f5 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1860,6 +1860,7 @@ 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);
+ btrfs_end_transaction(trans, root);
goto out;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-09-12 9:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-11 19:36 [PATCH] Btrfs: don't leak transaction in btrfs_sync_file() Filipe David Borba Manana
2013-09-12 9:37 ` [PATCH v2] " Filipe David Borba Manana
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).