diff --git a/[refs] b/[refs] index 848aa74623d4..a6a47293199c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ad0397a7a97f55fd7f70998ec208c5d8b90310ff +refs/heads/master: 7adf5dfbb3af65a00e20b3ead224c3a1b40e4ec4 diff --git a/trunk/fs/btrfs/file.c b/trunk/fs/btrfs/file.c index 65b2424a4116..9e097fbfc78d 100644 --- a/trunk/fs/btrfs/file.c +++ b/trunk/fs/btrfs/file.c @@ -792,8 +792,12 @@ static noinline int prepare_pages(struct btrfs_root *root, struct file *file, for (i = 0; i < num_pages; i++) { pages[i] = grab_cache_page(inode->i_mapping, index + i); if (!pages[i]) { - err = -ENOMEM; - BUG_ON(1); + int c; + for (c = i - 1; c >= 0; c--) { + unlock_page(pages[c]); + page_cache_release(pages[c]); + } + return -ENOMEM; } wait_on_page_writeback(pages[i]); }