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, | |||
1534 | reserve_bytes = round_up(write_bytes + sector_offset, | 1534 | reserve_bytes = round_up(write_bytes + sector_offset, |
1535 | root->sectorsize); | 1535 | root->sectorsize); |
1536 | 1536 | ||
1537 | if ((BTRFS_I(inode)->flags & (BTRFS_INODE_NODATACOW | | ||
1538 | BTRFS_INODE_PREALLOC)) && | ||
1539 | check_can_nocow(inode, pos, &write_bytes) > 0) { | ||
1540 | /* | ||
1541 | * For nodata cow case, no need to reserve | ||
1542 | * data space. | ||
1543 | */ | ||
1544 | only_release_metadata = true; | ||
1545 | /* | ||
1546 | * our prealloc extent may be smaller than | ||
1547 | * write_bytes, so scale down. | ||
1548 | */ | ||
1549 | num_pages = DIV_ROUND_UP(write_bytes + offset, | ||
1550 | PAGE_SIZE); | ||
1551 | reserve_bytes = round_up(write_bytes + sector_offset, | ||
1552 | root->sectorsize); | ||
1553 | goto reserve_metadata; | ||
1554 | } | ||
1555 | |||
1556 | ret = btrfs_check_data_free_space(inode, pos, write_bytes); | 1537 | ret = btrfs_check_data_free_space(inode, pos, write_bytes); |
1557 | if (ret < 0) | 1538 | if (ret < 0) { |
1558 | break; | 1539 | if ((BTRFS_I(inode)->flags & (BTRFS_INODE_NODATACOW | |
1540 | BTRFS_INODE_PREALLOC)) && | ||
1541 | check_can_nocow(inode, pos, &write_bytes) > 0) { | ||
1542 | /* | ||
1543 | * For nodata cow case, no need to reserve | ||
1544 | * data space. | ||
1545 | */ | ||
1546 | only_release_metadata = true; | ||
1547 | /* | ||
1548 | * our prealloc extent may be smaller than | ||
1549 | * write_bytes, so scale down. | ||
1550 | */ | ||
1551 | num_pages = DIV_ROUND_UP(write_bytes + offset, | ||
1552 | PAGE_SIZE); | ||
1553 | reserve_bytes = round_up(write_bytes + | ||
1554 | sector_offset, | ||
1555 | root->sectorsize); | ||
1556 | } else { | ||
1557 | break; | ||
1558 | } | ||
1559 | } | ||
1559 | 1560 | ||
1560 | reserve_metadata: | ||
1561 | ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes); | 1561 | ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes); |
1562 | if (ret) { | 1562 | if (ret) { |
1563 | if (!only_release_metadata) | 1563 | if (!only_release_metadata) |