V2... see https://marc.info/?l=linux-fsdevel&m=153721507330730&w=2 One important change is the following, without which an unaligned write may end up written to the beginning of its page. Surprisingly xfstests did not catch this. This was caught by an invalidate_inode_pages2 call in read_iter (not part of this patch series) which exposed the bug. diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index 34b98d2ed377..cd1263c45bb2 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -56,7 +54,7 @@ static int orangefs_writepage_locked(struct page *page, bv.bv_page = page; bv.bv_len = wlen; - bv.bv_offset = 0; + bv.bv_offset = off % PAGE_SIZE; iov_iter_bvec(&iter, ITER_BVEC | WRITE, &bv, 1, wlen); ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, wlen, The other big thing is an improved releasepage implementation and a launder_page implementation. We also size the writepages buffer based on the client core buffer. However I'm not happy with the memory allocation in writepages. Mike, I know you've had some trouble with the original series. I'd like to know if this fixes that. 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: skip inode writeout if nothing to write orangefs: write range tracking orangefs: avoid fsync service operation on flush orangefs: use kmem_cache for orangefs_write_request orangefs: implement writepages orangefs: use client-core buffer size to determine writepages count orangefs: do writepages_work if a single page must be written fs/orangefs/acl.c | 4 +- fs/orangefs/file.c | 194 +++-------- fs/orangefs/inode.c | 628 ++++++++++++++++++++++++++++------ fs/orangefs/namei.c | 41 +-- fs/orangefs/orangefs-cache.c | 24 +- fs/orangefs/orangefs-kernel.h | 56 ++- fs/orangefs/orangefs-mod.c | 10 +- fs/orangefs/orangefs-utils.c | 181 +++++----- fs/orangefs/super.c | 38 +- fs/orangefs/waitqueue.c | 18 +- fs/orangefs/xattr.c | 104 ++++++ 11 files changed, 893 insertions(+), 405 deletions(-) -- 2.19.0