From: Nikolaus Rath Date: Tue, 22 Nov 2016 23:05:52 +0000 (-0800) Subject: Added support for FUSE_PARALLEL_DIROPS X-Git-Tag: fuse-3.0.0rc3~12 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=3296ad988ddb59eb7bbac21b9f67d60cf38ca6bf;p=qemu-gpiodev%2Flibfuse.git Added support for FUSE_PARALLEL_DIROPS Enabled by default since we haven't released libfuse 3.0 yet :-). Fixes #112. --- 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);