diff options
Diffstat (limited to 'fs/btrfs/inode.c')
| -rw-r--r-- | fs/btrfs/inode.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 789c376157f..806708dd7e3 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -239,6 +239,7 @@ static int cow_file_range_inline(struct btrfs_trans_handle *trans,  		data_len = compressed_size;  	if (start > 0 || +	    actual_end >= PAGE_CACHE_SIZE ||  	    data_len >= BTRFS_MAX_INLINE_DATA_SIZE(root) ||  	    (!compressed_size &&  	    (actual_end & (root->sectorsize - 1)) == 0) || @@ -248,7 +249,7 @@ static int cow_file_range_inline(struct btrfs_trans_handle *trans,  	}  	ret = btrfs_drop_extents(trans, root, inode, start, -				 aligned_end, aligned_end, &hint_byte); +				 aligned_end, start, &hint_byte);  	BUG_ON(ret);  	if (isize > actual_end) @@ -423,6 +424,7 @@ again:  		 * free any pages it allocated and our page pointer array  		 */  		for (i = 0; i < nr_pages_ret; i++) { +			WARN_ON(pages[i]->mapping);  			page_cache_release(pages[i]);  		}  		kfree(pages); @@ -572,8 +574,10 @@ free_pages_out_fail:  	extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree,  				     start, end, locked_page, 0, 0, 0);  free_pages_out: -	for (i = 0; i < nr_pages_ret; i++) +	for (i = 0; i < nr_pages_ret; i++) { +		WARN_ON(pages[i]->mapping);  		page_cache_release(pages[i]); +	}  	if (pages)  		kfree(pages);  |