Mike, Here's what I propose for 4.12. This is modified slightly from the last series I posted. When receiving directories from the userspace daemon, instead of copying into pages allocated for that purpose, it constructs a linked list of the trailers which come from the op handler. I didn't do this at first because I thought they would be freed upon op_release. However they are actually freed manually. So they are put into a list and freed when the directory is released. There's also a new commit in here which provides a fast path to orangefs_devreq_read. There's no need to take the lock if the list is empty. I see a considerable performance increase in streaming writes (dd if=/dev/zero of=filesystem) here on my laptop, but nothing on bigger machines. Martin The following changes since commit 4f7d029b9bf009fbee76bb10c0c4351a1870d2f3: Linux 4.11-rc7 (2017-04-16 13:00:18 -0700) are available in the git repository at: https://github.com/martinbrandenburg/linux.git for-hubcap-v4.12 for you to fetch changes up to 776e81f9b64ecd4ab909d9e2e366b22eca8ed2dc: orangefs: return from orangefs_devreq_read quickly if possible (2017-04-22 14:48:25 -0400) ---------------------------------------------------------------- Martin Brandenburg (12): 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 orangefs: ensure the userspace component is unmounted if mount fails orangefs: return from orangefs_devreq_read quickly if possible fs/orangefs/devorangefs-req.c | 4 + fs/orangefs/dir.c | 613 +++++++++++++++++++-------------------- fs/orangefs/downcall.h | 16 +- fs/orangefs/file.c | 6 +- fs/orangefs/inode.c | 19 +- fs/orangefs/namei.c | 5 +- fs/orangefs/orangefs-dev-proto.h | 7 +- fs/orangefs/orangefs-kernel.h | 9 +- fs/orangefs/orangefs-utils.c | 98 +++---- fs/orangefs/protocol.h | 9 +- fs/orangefs/super.c | 28 +- fs/orangefs/xattr.c | 26 +- 12 files changed, 405 insertions(+), 435 deletions(-)