|
@@ -4505,8 +4505,19 @@ search_again:
|
|
if (found_type > min_type) {
|
|
if (found_type > min_type) {
|
|
del_item = 1;
|
|
del_item = 1;
|
|
} else {
|
|
} else {
|
|
- if (item_end < new_size)
|
|
|
|
|
|
+ if (item_end < new_size) {
|
|
|
|
+ /*
|
|
|
|
+ * With NO_HOLES mode, for the following mapping
|
|
|
|
+ *
|
|
|
|
+ * [0-4k][hole][8k-12k]
|
|
|
|
+ *
|
|
|
|
+ * if truncating isize down to 6k, it ends up
|
|
|
|
+ * isize being 8k.
|
|
|
|
+ */
|
|
|
|
+ if (btrfs_fs_incompat(root->fs_info, NO_HOLES))
|
|
|
|
+ last_size = new_size;
|
|
break;
|
|
break;
|
|
|
|
+ }
|
|
if (found_key.offset >= new_size)
|
|
if (found_key.offset >= new_size)
|
|
del_item = 1;
|
|
del_item = 1;
|
|
else
|
|
else
|