add releasepage hooks to block devices which can be used by file systems
Implement blkdev_releasepage() to release the buffer_heads and pages after we release private data belonging to a mounted filesystem. Cc: Toshiyuki Okajima <toshi.okajima@jp.fujitsu.com> Cc: linux-fsdevel@vger.kernel.org Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
@@ -1220,6 +1220,20 @@ static long block_ioctl(struct file *file, unsigned cmd, unsigned long arg)
|
||||
return blkdev_ioctl(bdev, mode, cmd, arg);
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to release a page associated with block device when the system
|
||||
* is under memory pressure.
|
||||
*/
|
||||
static int blkdev_releasepage(struct page *page, gfp_t wait)
|
||||
{
|
||||
struct super_block *super = BDEV_I(page->mapping->host)->bdev.bd_super;
|
||||
|
||||
if (super && super->s_op->bdev_try_to_free_page)
|
||||
return super->s_op->bdev_try_to_free_page(super, page, wait);
|
||||
|
||||
return try_to_free_buffers(page);
|
||||
}
|
||||
|
||||
static const struct address_space_operations def_blk_aops = {
|
||||
.readpage = blkdev_readpage,
|
||||
.writepage = blkdev_writepage,
|
||||
@@ -1227,6 +1241,7 @@ static const struct address_space_operations def_blk_aops = {
|
||||
.write_begin = blkdev_write_begin,
|
||||
.write_end = blkdev_write_end,
|
||||
.writepages = generic_writepages,
|
||||
.releasepage = blkdev_releasepage,
|
||||
.direct_IO = blkdev_direct_IO,
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user