|
@@ -5132,6 +5132,18 @@ static void evict_inode_truncate_pages(struct inode *inode)
|
|
|
spin_unlock(&io_tree->lock);
|
|
|
|
|
|
lock_extent_bits(io_tree, start, end, 0, &cached_state);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * If still has DELALLOC flag, the extent didn't reach disk,
|
|
|
+ * and its reserved space won't be freed by delayed_ref.
|
|
|
+ * So we need to free its reserved space here.
|
|
|
+ * (Refer to comment in btrfs_invalidatepage, case 2)
|
|
|
+ *
|
|
|
+ * Note, end is the bytenr of last byte, so we need + 1 here.
|
|
|
+ */
|
|
|
+ if (state->state & EXTENT_DELALLOC)
|
|
|
+ btrfs_qgroup_free_data(inode, start, end - start + 1);
|
|
|
+
|
|
|
clear_extent_bit(io_tree, start, end,
|
|
|
EXTENT_LOCKED | EXTENT_DIRTY |
|
|
|
EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING |
|
|
@@ -8646,6 +8658,18 @@ static void btrfs_invalidatepage(struct page *page, unsigned int offset,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Qgroup reserved space handler
|
|
|
+ * Page here will be either
|
|
|
+ * 1) Already written to disk
|
|
|
+ * In this case, its reserved space is released from data rsv map
|
|
|
+ * and will be freed by delayed_ref handler finally.
|
|
|
+ * So even we call qgroup_free_data(), it won't decrease reserved
|
|
|
+ * space.
|
|
|
+ * 2) Not written to disk
|
|
|
+ * This means the reserved space should be freed here.
|
|
|
+ */
|
|
|
+ btrfs_qgroup_free_data(inode, page_start, PAGE_CACHE_SIZE);
|
|
|
if (!inode_evicting) {
|
|
|
clear_extent_bit(tree, page_start, page_end,
|
|
|
EXTENT_LOCKED | EXTENT_DIRTY |
|