From 5f4d91830a4e755e4043aeae66d3aa1fd596dcce Mon Sep 17 00:00:00 2001 From: Miao Xie Date: Wed, 5 Jan 2011 10:07:18 +0000 Subject: [PATCH] --- yaml --- r: 231755 b: refs/heads/master c: d52a5b5f1fa40804f681cf9868d4a8f90661bdf3 h: refs/heads/master i: 231753: 6be5e59dfd92067a936951725e7b555a5ef15d59 231751: d3cc63fce0fc612c476409ab26b7ae9faf3193f0 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/extent-tree.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 3d6ff370fa5e..38f645367c32 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 299a08b1c34f9397797946a0fa215c5fd145c5cf +refs/heads/master: d52a5b5f1fa40804f681cf9868d4a8f90661bdf3 diff --git a/trunk/fs/btrfs/extent-tree.c b/trunk/fs/btrfs/extent-tree.c index b180efdc8b68..3c71d95111fe 100644 --- a/trunk/fs/btrfs/extent-tree.c +++ b/trunk/fs/btrfs/extent-tree.c @@ -3162,8 +3162,12 @@ int btrfs_check_data_free_space(struct inode *inode, u64 bytes) bytes + 2 * 1024 * 1024, alloc_target, 0); btrfs_end_transaction(trans, root); - if (ret < 0) - return ret; + if (ret < 0) { + if (ret != -ENOSPC) + return ret; + else + goto commit_trans; + } if (!data_sinfo) { btrfs_set_inode_space_info(root, inode); @@ -3174,6 +3178,7 @@ int btrfs_check_data_free_space(struct inode *inode, u64 bytes) spin_unlock(&data_sinfo->lock); /* commit the current transaction and try again */ +commit_trans: if (!committed && !root->fs_info->open_ioctl_trans) { committed = 1; trans = btrfs_join_transaction(root, 1);