From 3296ad988ddb59eb7bbac21b9f67d60cf38ca6bf Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Tue, 22 Nov 2016 15:05:52 -0800 Subject: Added support for FUSE_PARALLEL_DIROPS Enabled by default since we haven't released libfuse 3.0 yet :-). Fixes #112. --- ChangeLog.rst | 1 + include/fuse_common.h | 10 ++++++++++ lib/fuse_lowlevel.c | 3 +++ 3 files changed, 14 insertions(+) diff --git a/ChangeLog.rst b/ChangeLog.rst index 10879df..c1d43a2 100644 --- a/ChangeLog.rst +++ b/ChangeLog.rst @@ -22,6 +22,7 @@ UNRELEASED CHANGES particular capability can still be disabled by unsetting the corresponding bit of `fuse_conn_info.wants` in the init() handler. +* Added FUSE_CAP_PARALLEL_DIROPS feature flag. FUSE 3.0.0-rc2 (2016-11-06) =========================== diff --git a/include/fuse_common.h b/include/fuse_common.h index 966a566..7bf8008 100644 --- a/include/fuse_common.h +++ b/include/fuse_common.h @@ -242,6 +242,16 @@ struct fuse_file_info { */ #define FUSE_CAP_NO_OPEN_SUPPORT (1 << 17) +/** + * Indicates support for parallel directory operations. If this flag + * is unset, the FUSE kernel module will ensure that lookup() and + * readdir() requests are never issued concurrently for the same + * directory. + * + * This feature is enabled by default when supported by the kernel. + */ +#define FUSE_CAP_PARALLEL_DIROPS (1 << 18) + /** * Ioctl flags * diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c index c53c9f7..c7e3ebf 100644 --- a/lib/fuse_lowlevel.c +++ b/lib/fuse_lowlevel.c @@ -1875,6 +1875,8 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg) se->conn.capable |= FUSE_CAP_WRITEBACK_CACHE; if (arg->flags & FUSE_NO_OPEN_SUPPORT) se->conn.capable |= FUSE_CAP_NO_OPEN_SUPPORT; + if (arg->flags & FUSE_PARALLEL_DIROPS) + se->conn.capable |= FUSE_CAP_PARALLEL_DIROPS; } else { se->conn.max_readahead = 0; } @@ -1901,6 +1903,7 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg) if ((cond) && (se->conn.capable & (cap))) \ se->conn.want |= (cap) LL_SET_DEFAULT(1, FUSE_CAP_ASYNC_READ); + LL_SET_DEFAULT(1, FUSE_CAP_PARALLEL_DIROPS); LL_SET_DEFAULT(1, FUSE_CAP_AUTO_INVAL_DATA); LL_SET_DEFAULT(1, FUSE_CAP_ASYNC_DIO); LL_SET_DEFAULT(1, FUSE_CAP_IOCTL_DIR); -- cgit v1.2.3