diff options
Diffstat (limited to 'fs/logfs/file.c')
| -rw-r--r-- | fs/logfs/file.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/logfs/file.c b/fs/logfs/file.c index 370f367a933e..bf9b1cf953a6 100644 --- a/fs/logfs/file.c +++ b/fs/logfs/file.c | |||
| @@ -161,7 +161,17 @@ static int logfs_writepage(struct page *page, struct writeback_control *wbc) | |||
| 161 | 161 | ||
| 162 | static void logfs_invalidatepage(struct page *page, unsigned long offset) | 162 | static void logfs_invalidatepage(struct page *page, unsigned long offset) |
| 163 | { | 163 | { |
| 164 | move_page_to_btree(page); | 164 | struct logfs_block *block = logfs_block(page); |
| 165 | |||
| 166 | if (block->reserved_bytes) { | ||
| 167 | struct super_block *sb = page->mapping->host->i_sb; | ||
| 168 | struct logfs_super *super = logfs_super(sb); | ||
| 169 | |||
| 170 | super->s_dirty_pages -= block->reserved_bytes; | ||
| 171 | block->ops->free_block(sb, block); | ||
| 172 | BUG_ON(bitmap_weight(block->alias_map, LOGFS_BLOCK_FACTOR)); | ||
| 173 | } else | ||
| 174 | move_page_to_btree(page); | ||
| 165 | BUG_ON(PagePrivate(page) || page->private); | 175 | BUG_ON(PagePrivate(page) || page->private); |
| 166 | } | 176 | } |
| 167 | 177 | ||
