[PATCH 00/10] orangefs changes for 4.12

From: Martin Brandenburg
Date: Fri Apr 07 2017 - 17:17:43 EST


Mike,

Here are the OrangeFS changes I intend for the 4.12 merge window.

The biggest change here is my readdir work. The old readdir code was
fragile in a number of ways relating to small buffers passed to
getdents. The new code fixes all of that by separating making server
requests for more data from responding to the user. OrangeFS cannot
list directories from an arbitrary offset, so this saves the directory
as it is received from the server. Then it can continue from the point
that the user buffer got too full. Before if all of the entries did not
fit, it would do a new server request on the next call and skip those
that did not fit. This also handles directory seeking, which was
completely ignored in the old code.

I increased the number of directory entries to request in a server
request from 96 to 512, which is the OrangeFS client maximum. The limit
of 96 appears to have been chosen because it is small enough that most
directories will fit in the buffer passed to getdents.

I've included some patches for statx. Depending on how much testing we
can get done over the next couple weeks, we may want to hold these for
4.13. It is very helpful to OrangeFS's performance to skip fetching
size if it is not needed. I can't help but wonder if I've missed
something. It passes xfstests, but I don't think it's been through all
our internal tests.

Then there are some miscellaneous fixes.

Martin Brandenburg (10):
orangefs: remove unused get_fsid_from_ino
orangefs: fix bounds check for listxattr
orangefs: clean up oversize xattr validation
orangefs: do not set getattr_time on orangefs_lookup
orangefs: rewrite readdir to fix several bugs
orangefs: support llseek on directories
orangefs: support very large directories
orangefs: remove ORANGEFS_READDIR macros
orangefs: implement statx
orangefs: do not check possibly stale size on truncate

fs/orangefs/dir.c | 598 ++++++++++++++++++---------------------
fs/orangefs/downcall.h | 21 +-
fs/orangefs/file.c | 6 +-
fs/orangefs/inode.c | 18 +-
fs/orangefs/namei.c | 5 +-
fs/orangefs/orangefs-dev-proto.h | 7 +-
fs/orangefs/orangefs-kernel.h | 9 +-
fs/orangefs/orangefs-utils.c | 63 +++--
fs/orangefs/protocol.h | 9 +-
fs/orangefs/xattr.c | 26 +-
10 files changed, 363 insertions(+), 399 deletions(-)

--
2.1.4