|
@@ -189,6 +189,18 @@ static int ramdisk_set_page_dirty(struct page *page)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * releasepage is called by pagevec_strip/try_to_release_page if
|
|
|
+ * buffers_heads_over_limit is true. Without a releasepage function
|
|
|
+ * try_to_free_buffers is called instead. That can unset the dirty
|
|
|
+ * bit of our ram disk pages, which will be eventually freed, even
|
|
|
+ * if the page is still in use.
|
|
|
+ */
|
|
|
+static int ramdisk_releasepage(struct page *page, gfp_t dummy)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const struct address_space_operations ramdisk_aops = {
|
|
|
.readpage = ramdisk_readpage,
|
|
|
.prepare_write = ramdisk_prepare_write,
|
|
@@ -196,6 +208,7 @@ static const struct address_space_operations ramdisk_aops = {
|
|
|
.writepage = ramdisk_writepage,
|
|
|
.set_page_dirty = ramdisk_set_page_dirty,
|
|
|
.writepages = ramdisk_writepages,
|
|
|
+ .releasepage = ramdisk_releasepage,
|
|
|
};
|
|
|
|
|
|
static int rd_blkdev_pagecache_IO(int rw, struct bio_vec *vec, sector_t sector,
|