OrangeFS has not used the page cache in the past. This is a work in progress patch to support it. It does not yet make any attempt to do writeback in a reasonable timeframe considering that OrangeFS is a distributed filesystem. What's done: Inodes are written through write_back: getattrs and setattrs are not necessarily sent to the server. Pages are read from and written to the cache on readpage and writepage and direct_IO works. Some consolidation of code handling the different read cases allow this diff to decrease code size. Future work: The old getattr cache will need to be changed significantly. It specifies a timeout which should be used by the new code. Though the old getattr cache gave quite a performance boost, it's cached data would be destroyed on drop_inode. Really the only way to do a getattr is during orangefs_iget. Pages are only read into the cache once. Using this code with multiple clients will not work at all. Ultimately we will need to do writeback much faster than at present and know when to fill requests from the cache and when to require a server request. The good news is that operating under such a delay found several race conditions in our code which had not been detected because we always did a server request in the past. Does this look like a reasonable start? Martin Brandenburg (13): orangefs: move orangefs_address_operations to file.c orangefs: remove orangefs_readpages orangefs: make orangefs_inode_read static orangefs: only set a_ops for regular files orangefs: BUG_ON if i_mode invalid orangefs: remove mapping_nrpages macro orangefs: set up and use backing_dev_info orangefs: initialize new inode size to zero orangefs: inodes linger in cache orangefs: implement direct_IO for the read case orangefs: lock inode during fsync orangefs: call generic_file_read_iter orangefs: implement write through the page cache fs/orangefs/file.c | 232 ++++++++++++++++++++++++-------------- fs/orangefs/inode.c | 252 +++++------------------------------------- fs/orangefs/namei.c | 13 ++- fs/orangefs/orangefs-kernel.h | 8 +- fs/orangefs/orangefs-utils.c | 7 ++ fs/orangefs/super.c | 54 +++++++-- fs/orangefs/symlink.c | 1 - 7 files changed, 242 insertions(+), 325 deletions(-) -- 2.1.4