From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-f194.google.com ([209.85.160.194]:46444 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725832AbeJHGgr (ORCPT ); Mon, 8 Oct 2018 02:36:47 -0400 Received: by mail-qt1-f194.google.com with SMTP id d8-v6so19215328qtk.13 for ; Sun, 07 Oct 2018 16:27:54 -0700 (PDT) From: Martin Brandenburg To: devel@lists.orangefs.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, hubcap@omnibond.com Cc: Martin Brandenburg Subject: [PATCH 00/19] [V2] orangefs: page cache Date: Sun, 7 Oct 2018 23:27:17 +0000 Message-Id: <20181007232736.3780-1-martin@omnibond.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 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