summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2011-07-27 15:57:44 -0400
committerChris Mason <chris.mason@oracle.com>2011-07-27 16:11:41 -0400
commit75c195a2cac2c3c8366c0b87de2d6814c4f4d638 (patch)
tree82ac06d2c8f3746a3d438853d03239311c2a71a1 /fs
parent2cf8572dac62cc2ff7e995173e95b6c694401b3f (diff)
downloadlinux-0-day-75c195a2cac2c3c8366c0b87de2d6814c4f4d638.tar.gz
linux-0-day-75c195a2cac2c3c8366c0b87de2d6814c4f4d638.tar.xz
Btrfs: make sure reserve_metadata_bytes doesn't leak out strange errors
The btrfs transaction code will return any errors that come from reserve_metadata_bytes. We need to make sure we don't return funny things like 1 or EAGAIN. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/extent-tree.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 06a5ee29b4463..4d08ed79405d2 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3474,6 +3474,8 @@ again:
if (ret < 0)
goto out;
+ ret = 0;
+
/*
* So if we were overcommitted it's possible that somebody else flushed
* out enough space and we simply didn't have enough space to reclaim,
@@ -3496,10 +3498,13 @@ again:
goto out;
ret = -EAGAIN;
- if (trans || committed)
+ if (trans)
goto out;
ret = -ENOSPC;
+ if (committed)
+ goto out;
+
trans = btrfs_join_transaction(root);
if (IS_ERR(trans))
goto out;