diff options
Diffstat (limited to 'fs/btrfs/file.c')
| -rw-r--r-- | fs/btrfs/file.c | 44 | 
1 files changed, 22 insertions, 22 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index e0c9bd3fb02d..2234e88cf674 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1534,30 +1534,30 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,  		reserve_bytes = round_up(write_bytes + sector_offset,  				root->sectorsize); -		if ((BTRFS_I(inode)->flags & (BTRFS_INODE_NODATACOW | -					      BTRFS_INODE_PREALLOC)) && -		    check_can_nocow(inode, pos, &write_bytes) > 0) { -			/* -			 * For nodata cow case, no need to reserve -			 * data space. -			 */ -			only_release_metadata = true; -			/* -			 * our prealloc extent may be smaller than -			 * write_bytes, so scale down. -			 */ -			num_pages = DIV_ROUND_UP(write_bytes + offset, -						 PAGE_SIZE); -			reserve_bytes = round_up(write_bytes + sector_offset, -					root->sectorsize); -			goto reserve_metadata; -		} -  		ret = btrfs_check_data_free_space(inode, pos, write_bytes); -		if (ret < 0) -			break; +		if (ret < 0) { +			if ((BTRFS_I(inode)->flags & (BTRFS_INODE_NODATACOW | +						      BTRFS_INODE_PREALLOC)) && +			    check_can_nocow(inode, pos, &write_bytes) > 0) { +				/* +				 * For nodata cow case, no need to reserve +				 * data space. +				 */ +				only_release_metadata = true; +				/* +				 * our prealloc extent may be smaller than +				 * write_bytes, so scale down. +				 */ +				num_pages = DIV_ROUND_UP(write_bytes + offset, +							 PAGE_SIZE); +				reserve_bytes = round_up(write_bytes + +							 sector_offset, +							 root->sectorsize); +			} else { +				break; +			} +		} -reserve_metadata:  		ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes);  		if (ret) {  			if (!only_release_metadata)  |