Skip to content

Commit afce772

Browse files
Lu Fengqikdave
authored andcommitted
btrfs: fix check_shared for fiemap ioctl
Only in the case of different root_id or different object_id, check_shared identified extent as the shared. However, If a extent was referred by different offset of same file, it should also be identified as shared. In addition, check_shared's loop scale is at least n^3, so if a extent has too many references, even causes soft hang up. First, add all delayed_ref to the ref_tree and calculate the unqiue_refs, if the unique_refs is greater than one, return BACKREF_FOUND_SHARED. Then individually add the on-disk reference(inline/keyed) to the ref_tree and calculate the unique_refs of the ref_tree to check if the unique_refs is greater than one.Because once there are two references to return SHARED, so the time complexity is close to the constant. Reported-by: Tsutomu Itoh <[email protected]> Signed-off-by: Lu Fengqi <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent b0de6c4 commit afce772

File tree

2 files changed

+369
-10
lines changed

2 files changed

+369
-10
lines changed

0 commit comments

Comments
 (0)