include/linux/fs.h | 1 +
mm/vmscan.c | 3 +++
2 files changed, 4 insertions(+), 0 deletions(-)
@@ -602,6 +602,7 @@ struct address_space_operations {
sector_t (*bmap)(struct address_space *, sector_t);
void (*invalidatepage) (struct page *, unsigned long);
int (*releasepage) (struct page *, gfp_t);
+ void (*freepage)(struct page *);
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
loff_t offset, unsigned long nr_segs);
int (*get_xip_mem)(struct address_space *, pgoff_t, int,
@@ -499,6 +499,9 @@ static int __remove_mapping(struct address_space *mapping, struct page *page)
mem_cgroup_uncharge_cache_page(page);
}
+ if (mapping->a_ops->freepage)
+ mapping->a_ops->freepage(page);
+
return 1;
cannot_free: