From: Mike Marshall <hubcap@xxxxxxxxxxxx> Until now the Orangefs kernel module has not gone through the pagecache and has been a de facto O_DIRECT style module. This patch series adds pagecache support and greatly improves small IO. For example, xfstest generic/069 used to take several hours on our test VMs, and now finishes in seconds. Orangefs' kernel module shares a memory buffer with Orangefs' userspace parts for IO. Orangefs can best exploit parallelism when the buffer is significantly filled, and struggles when the buffer is nearly empty. Buffering reads and writes through the pagecache helps us to communicate with userspace less often with buffers that are more full. Reads can be tuned with "count" from read(2) to simulate page sizes more in line with Orangefs's buffer size (4 meg by default). Userspace will deposit "count" bytes in the shared buffer on a read and when the VFS calls orangefs_readpage, as many pagecache pages as possible will be filled at once. Writes are coalesced even across pages when possible up to the size of the buffer between the OrangeFS client core and the kernel. This is 4 MB by default. This means that an application writing with a block size less than 4 MB will have its writes upgraded. For sequential writes, this is a big improvement. Martin Brandenburg (19): orangefs: implement xattr cache orangefs: do not invalidate attributes on inode create orangefs: simplify orangefs_inode_getattr interface orangefs: update attributes rather than relying on server orangefs: hold i_lock during inode_getattr orangefs: set up and use backing_dev_info orangefs: let setattr write to cached inode orangefs: reorganize setattr functions to track attribute changes orangefs: remove orangefs_readpages orangefs: service ops done for writeback are not killable orangefs: migrate to generic_file_read_iter orangefs: implement writepage orangefs: do not return successful read when the client-core disappeared orangefs: move do_readv_writev to direct_IO orangefs: skip inode writeout if nothing to write orangefs: avoid fsync service operation on flush orangefs: write range tracking orangefs: implement writepages orangefs: add orangefs_revalidate_mapping Mike Marshall (3): orangefs: remember count when reading. orangefs: pass slot index back to readpage. orangefs: copy Orangefs-sized blocks into the pagecache if possible. fs/orangefs/acl.c | 4 +- fs/orangefs/file.c | 389 ++++++-------- fs/orangefs/inode.c | 908 +++++++++++++++++++++++++++++---- fs/orangefs/namei.c | 40 +- fs/orangefs/orangefs-bufmap.c | 13 + fs/orangefs/orangefs-bufmap.h | 2 + fs/orangefs/orangefs-debugfs.c | 4 +- fs/orangefs/orangefs-kernel.h | 56 +- fs/orangefs/orangefs-mod.c | 1 + fs/orangefs/orangefs-sysfs.c | 22 + fs/orangefs/orangefs-utils.c | 179 +++---- fs/orangefs/super.c | 39 +- fs/orangefs/waitqueue.c | 18 +- fs/orangefs/xattr.c | 106 +++- 14 files changed, 1293 insertions(+), 488 deletions(-) -- 2.20.1