mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-30 19:07:15 +00:00
btrfs_drop_extent fixe for inline items > 8K
When truncating a inline extent, btrfs_drop_extents doesn't properly handle the case "key.offset > inline_limit". This bug can only happen when max line size is larger than 8K. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
1b0f7c29e2
commit
0181e58f91
1 changed files with 3 additions and 5 deletions
|
@ -591,8 +591,7 @@ next_slot:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bookend = 1;
|
bookend = 1;
|
||||||
if (found_inline && start <= key.offset &&
|
if (found_inline && start <= key.offset)
|
||||||
inline_limit < extent_end)
|
|
||||||
keep = 1;
|
keep = 1;
|
||||||
}
|
}
|
||||||
/* truncate existing extent */
|
/* truncate existing extent */
|
||||||
|
@ -672,11 +671,10 @@ next_slot:
|
||||||
if (!bookend)
|
if (!bookend)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (bookend && found_inline && start <= key.offset &&
|
if (bookend && found_inline && start <= key.offset) {
|
||||||
inline_limit < extent_end && key.offset <= inline_limit) {
|
|
||||||
u32 new_size;
|
u32 new_size;
|
||||||
new_size = btrfs_file_extent_calc_inline_size(
|
new_size = btrfs_file_extent_calc_inline_size(
|
||||||
extent_end - inline_limit);
|
extent_end - end);
|
||||||
btrfs_truncate_item(trans, root, path, new_size, 0);
|
btrfs_truncate_item(trans, root, path, new_size, 0);
|
||||||
}
|
}
|
||||||
/* create bookend, splitting the extent in two */
|
/* create bookend, splitting the extent in two */
|
||||||
|
|
Loading…
Add table
Reference in a new issue