aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/extent-tree.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index b180efdc8b68..3c71d95111fe 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3162,8 +3162,12 @@ alloc:
3162 bytes + 2 * 1024 * 1024, 3162 bytes + 2 * 1024 * 1024,
3163 alloc_target, 0); 3163 alloc_target, 0);
3164 btrfs_end_transaction(trans, root); 3164 btrfs_end_transaction(trans, root);
3165 if (ret < 0) 3165 if (ret < 0) {
3166 return ret; 3166 if (ret != -ENOSPC)
3167 return ret;
3168 else
3169 goto commit_trans;
3170 }
3167 3171
3168 if (!data_sinfo) { 3172 if (!data_sinfo) {
3169 btrfs_set_inode_space_info(root, inode); 3173 btrfs_set_inode_space_info(root, inode);
@@ -3174,6 +3178,7 @@ alloc:
3174 spin_unlock(&data_sinfo->lock); 3178 spin_unlock(&data_sinfo->lock);
3175 3179
3176 /* commit the current transaction and try again */ 3180 /* commit the current transaction and try again */
3181commit_trans:
3177 if (!committed && !root->fs_info->open_ioctl_trans) { 3182 if (!committed && !root->fs_info->open_ioctl_trans) {
3178 committed = 1; 3183 committed = 1;
3179 trans = btrfs_join_transaction(root, 1); 3184 trans = btrfs_join_transaction(root, 1);