diff options
Diffstat (limited to 'fs/btrfs/inode.c')
| -rw-r--r-- | fs/btrfs/inode.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 941f1b71cd22..81ba6654c332 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
| @@ -726,6 +726,15 @@ static noinline int cow_file_range(struct inode *inode, | |||
| 726 | BUG_ON(disk_num_bytes > | 726 | BUG_ON(disk_num_bytes > |
| 727 | btrfs_super_total_bytes(&root->fs_info->super_copy)); | 727 | btrfs_super_total_bytes(&root->fs_info->super_copy)); |
| 728 | 728 | ||
| 729 | |||
| 730 | read_lock(&BTRFS_I(inode)->extent_tree.lock); | ||
| 731 | em = search_extent_mapping(&BTRFS_I(inode)->extent_tree, | ||
| 732 | start, num_bytes); | ||
| 733 | if (em) { | ||
| 734 | alloc_hint = em->block_start; | ||
| 735 | free_extent_map(em); | ||
| 736 | } | ||
| 737 | read_unlock(&BTRFS_I(inode)->extent_tree.lock); | ||
| 729 | btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); | 738 | btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); |
| 730 | 739 | ||
| 731 | while (disk_num_bytes > 0) { | 740 | while (disk_num_bytes > 0) { |
| @@ -738,7 +747,6 @@ static noinline int cow_file_range(struct inode *inode, | |||
| 738 | em = alloc_extent_map(GFP_NOFS); | 747 | em = alloc_extent_map(GFP_NOFS); |
| 739 | em->start = start; | 748 | em->start = start; |
| 740 | em->orig_start = em->start; | 749 | em->orig_start = em->start; |
| 741 | |||
| 742 | ram_size = ins.offset; | 750 | ram_size = ins.offset; |
| 743 | em->len = ins.offset; | 751 | em->len = ins.offset; |
| 744 | 752 | ||
