[ 15/42] Btrfs: fall back to non-inline if we dont have enough space
From: Greg KH <gregkh@linuxfoundation.org>
Date: 2012-06-14 23:59:39
Also in:
lkml
From: Greg KH <gregkh@linuxfoundation.org>
Date: 2012-06-14 23:59:39
Also in:
lkml
3.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Josef Bacik <redacted> commit 2adcac1a7331d93a17285804819caa96070b231f upstream. If cow_file_range_inline fails with ENOSPC we abort the transaction which isn't very nice. This really shouldn't be happening anyways but there's no sense in making it a horrible error when we can easily just go allocate normal data space for this stuff. Thanks, Signed-off-by: Josef Bacik <redacted> Acked-by: Chris Mason <redacted> Cc: Alexandre Oliva <redacted> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- fs/btrfs/inode.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c@@ -257,10 +257,13 @@ static noinline int cow_file_range_inlin ret = insert_inline_extent(trans, root, inode, start, inline_len, compressed_size, compress_type, compressed_pages); - if (ret) { + if (ret && ret != -ENOSPC) { btrfs_abort_transaction(trans, root, ret); return ret; + } else if (ret == -ENOSPC) { + return 1; } + btrfs_delalloc_release_metadata(inode, end + 1 - start); btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0); return 0;