diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/extent-tree.c | 9 |
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 */ |
3181 | commit_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); |