lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20181007232736.3780-1-martin@omnibond.com>
Date:   Sun,  7 Oct 2018 23:27:17 +0000
From:   Martin Brandenburg <martin@...ibond.com>
To:     devel@...ts.orangefs.org, linux-fsdevel@...r.kernel.org,
        linux-kernel@...r.kernel.org, hubcap@...ibond.com
Cc:     Martin Brandenburg <martin@...ibond.com>
Subject: [PATCH 00/19] [V2] orangefs: page cache

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ