[PATCH 00/19] [V2] orangefs: page cache

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux