Skip to content

Commit dcb40c1

Browse files
wangxiaoguangmasoncl
authored andcommitted
btrfs: use correct offset for reloc_inode in prealloc_file_extent_cluster()
In prealloc_file_extent_cluster(), btrfs_check_data_free_space() uses wrong file offset for reloc_inode, it uses cluster->start and cluster->end, which indeed are extent's bytenr. The correct value should be cluster->[start|end] minus block group's start bytenr. start bytenr cluster->start | | extent | extent | ...| extent | |----------------------------------------------------------------| | block group reloc_inode | Signed-off-by: Wang Xiaoguang <[email protected]> Reviewed-by: Josef Bacik <[email protected]> Signed-off-by: David Sterba <[email protected]> Signed-off-by: Chris Mason <[email protected]>
1 parent df2c95f commit dcb40c1

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

fs/btrfs/relocation.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3038,12 +3038,14 @@ int prealloc_file_extent_cluster(struct inode *inode,
30383038
u64 num_bytes;
30393039
int nr = 0;
30403040
int ret = 0;
3041+
u64 prealloc_start = cluster->start - offset;
3042+
u64 prealloc_end = cluster->end - offset;
30413043

30423044
BUG_ON(cluster->start != cluster->boundary[0]);
30433045
inode_lock(inode);
30443046

3045-
ret = btrfs_check_data_free_space(inode, cluster->start,
3046-
cluster->end + 1 - cluster->start);
3047+
ret = btrfs_check_data_free_space(inode, prealloc_start,
3048+
prealloc_end + 1 - prealloc_start);
30473049
if (ret)
30483050
goto out;
30493051

@@ -3064,8 +3066,8 @@ int prealloc_file_extent_cluster(struct inode *inode,
30643066
break;
30653067
nr++;
30663068
}
3067-
btrfs_free_reserved_data_space(inode, cluster->start,
3068-
cluster->end + 1 - cluster->start);
3069+
btrfs_free_reserved_data_space(inode, prealloc_start,
3070+
prealloc_end + 1 - prealloc_start);
30693071
out:
30703072
inode_unlock(inode);
30713073
return ret;

0 commit comments

Comments
 (0)