なるほど、興味深い質問です。
残念ながら、ここでは LSM でさえ役に立ちません。address_space_operations
可能な解決策として、テーブルとフックwritepage
関数を使用することをお勧めします。たとえば、ext3_writeback_aopsを見てください。
1984 static const struct address_space_operations ext3_writeback_aops = {
1985 .readpage = ext3_readpage,
1986 .readpages = ext3_readpages,
1987 .writepage = ext3_writeback_writepage,
1988 .write_begin = ext3_write_begin,
1989 .write_end = ext3_writeback_write_end,
1990 .bmap = ext3_bmap,
1991 .invalidatepage = ext3_invalidatepage,
1992 .releasepage = ext3_releasepage,
1993 .direct_IO = ext3_direct_IO,
1994 .migratepage = buffer_migrate_page,
1995 .is_partially_uptodate = block_is_partially_uptodate,
1996 .error_remove_page = generic_error_remove_page,
1997 };
したがって、ファイルシステムの場合、メモリ内でこの構造体を見つけて、ポインターをラッパーを指すようにext3
置き換える必要があります。また、このテーブルは読み取り専用メモリ内にあり、正しく処理する必要があることに注意してください。writepage
our_writepage
編集:
LSM を使用すると、inode
オープン操作にフックしてその場で交換することができinode->i_mapping->a_ops
ます。