Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fuse: cache readdir calls if filesystem opts out of opendir

If a filesystem returns ENOSYS from opendir and thus opts out of
opendir and releasedir requests, it almost certainly would also like
readdir results cached. Default open_flags to FOPEN_KEEP_CACHE and
FOPEN_CACHE_DIR in that case.

With this patch, I've measured recursive directory enumeration across
large FUSE mounts to be faster than native mounts.

Signed-off-by: Chad Austin <chadaustin@fb.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>

authored by

Chad Austin and committed by
Miklos Szeredi
fabf7e02 d9a9ea94

+2 -1
+2 -1
fs/fuse/file.c
··· 124 124 return -ENOMEM; 125 125 126 126 ff->fh = 0; 127 - ff->open_flags = FOPEN_KEEP_CACHE; /* Default for no-open */ 127 + /* Default for no-open */ 128 + ff->open_flags = FOPEN_KEEP_CACHE | (isdir ? FOPEN_CACHE_DIR : 0); 128 129 if (isdir ? !fc->no_opendir : !fc->no_open) { 129 130 struct fuse_open_out outarg; 130 131 int err;