aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/inode.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 8e45fdcdbd8e..ffb23e506762 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -6503,6 +6503,7 @@ noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
6503 int slot; 6503 int slot;
6504 int found_type; 6504 int found_type;
6505 bool nocow = (BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW); 6505 bool nocow = (BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW);
6506
6506 path = btrfs_alloc_path(); 6507 path = btrfs_alloc_path();
6507 if (!path) 6508 if (!path)
6508 return -ENOMEM; 6509 return -ENOMEM;
@@ -6546,6 +6547,10 @@ noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
6546 if (!nocow && found_type == BTRFS_FILE_EXTENT_REG) 6547 if (!nocow && found_type == BTRFS_FILE_EXTENT_REG)
6547 goto out; 6548 goto out;
6548 6549
6550 extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);
6551 if (extent_end <= offset)
6552 goto out;
6553
6549 disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi); 6554 disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
6550 if (disk_bytenr == 0) 6555 if (disk_bytenr == 0)
6551 goto out; 6556 goto out;
@@ -6563,8 +6568,6 @@ noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
6563 *ram_bytes = btrfs_file_extent_ram_bytes(leaf, fi); 6568 *ram_bytes = btrfs_file_extent_ram_bytes(leaf, fi);
6564 } 6569 }
6565 6570
6566 extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);
6567
6568 if (btrfs_extent_readonly(root, disk_bytenr)) 6571 if (btrfs_extent_readonly(root, disk_bytenr))
6569 goto out; 6572 goto out;
6570 btrfs_release_path(path); 6573 btrfs_release_path(path);