2023-10-10 15:38:49 +08:00
|
|
|
libfuse 3.16.2 (2023-10-10)
|
|
|
|
===========================
|
|
|
|
|
|
|
|
* Various small fixes and improvements.
|
|
|
|
|
2023-08-08 18:15:03 +08:00
|
|
|
libfuse 3.16.1 (2023-08-08)
|
2023-08-04 01:01:46 +08:00
|
|
|
===========================
|
|
|
|
|
|
|
|
* Readdir kernel cache can be enabled from high-level API.
|
|
|
|
|
2023-07-05 18:14:33 +08:00
|
|
|
libfuse 3.15.1 (2023-07-05)
|
|
|
|
===========================
|
|
|
|
|
|
|
|
Future libfuse releases will be signed with `signify`_ rather than PGP (rationale_). This
|
|
|
|
release is the last to be signed with PGP and contains the signify public key for current
|
|
|
|
(3.15.X) and upcoming (3.16.X) minor release cycle.
|
|
|
|
|
|
|
|
.. _signify: https://www.openbsd.org/papers/bsdcan-signify.html
|
|
|
|
.. _rationale: https://latacora.micro.blog/2019/07/16/the-pgp-problem.html
|
|
|
|
|
|
|
|
|
2023-06-09 17:36:28 +08:00
|
|
|
libfuse 3.15.0 (2023-06-09)
|
|
|
|
===========================
|
|
|
|
|
|
|
|
* Improved support for some less common systems (32 bit, alternative libcs)
|
|
|
|
|
|
|
|
* Unsupported mount options are no longer silently accepted.
|
|
|
|
|
|
|
|
* auto_unmount is now compatible with allow_other.
|
|
|
|
|
|
|
|
|
2023-03-26 18:44:40 +08:00
|
|
|
libfuse 3.14.1 (2023-03-26)
|
|
|
|
===========================
|
|
|
|
|
|
|
|
* The extended attribute name passed to the setxattr() handler is no longer
|
|
|
|
truncated at the beginning (bug introduced in 3.13.0).
|
|
|
|
|
|
|
|
* As a result of the above, the additional setattr() flags introduced in 3.14 are no
|
|
|
|
longer available for now. They will hopefully be reintroduced in the next release.
|
|
|
|
|
|
|
|
* Further improvements of configuration header handling.
|
|
|
|
|
|
|
|
|
2023-02-17 17:31:14 +08:00
|
|
|
libfuse 3.14.0 (2023-02-17)
|
|
|
|
===========================
|
|
|
|
|
|
|
|
* Properly fix the header installation issue. The fix in 3.13.1 resulted
|
|
|
|
in conflicts with other packages.
|
|
|
|
|
|
|
|
* Introduce additional setattr() flags (FORCE, KILL_SUID, KILL_SGID, FILE, KILL_PRIV,
|
|
|
|
OPEN, TIMES_SET)
|
|
|
|
|
|
|
|
|
2023-02-03 18:05:30 +08:00
|
|
|
libfuse 3.13.1 (2023-02-03)
|
|
|
|
===========================
|
|
|
|
|
|
|
|
* Fixed an issue that resulted in errors when attempting to compile against
|
|
|
|
installed libfuse headers (because libc symbol versioning support was not
|
|
|
|
detected correctly in this case).
|
|
|
|
|
2023-01-13 18:33:35 +08:00
|
|
|
libfuse 3.13.0 (2023-01-13)
|
|
|
|
===========================
|
|
|
|
|
2023-01-10 18:04:35 +08:00
|
|
|
* There is a new low-level API function `fuse_session_custom_io` that allows to implement
|
|
|
|
a daemon with a custom io. This can be used to create a daemon that can process incoming
|
|
|
|
FUSE requests to other destinations than `/dev/fuse`.
|
|
|
|
|
2023-01-13 18:33:35 +08:00
|
|
|
* A segfault when loading custom FUSE modules has been fixed.
|
|
|
|
|
|
|
|
* There is a new `fuse_notify_expire_entry` function.
|
|
|
|
|
|
|
|
* A deadlock when resolving paths in the high-level API has been fixed.
|
|
|
|
|
|
|
|
* libfuse can now be build explicitly for C libraries without symbol versioning support.
|
|
|
|
|
2022-09-08 18:02:45 +08:00
|
|
|
libfuse 3.12.0 (2022-09-08)
|
2022-08-06 02:51:51 +08:00
|
|
|
===========================
|
2022-09-08 18:02:45 +08:00
|
|
|
|
|
|
|
* There is a new build parameter to specify where the SysV init script should be
|
|
|
|
installed.
|
|
|
|
|
|
|
|
* The *max_idle_threads* parameter has been deprecated in favor of the new max_threads*
|
|
|
|
parameter (which avoids the excessive overhead of creating and destructing threads).
|
|
|
|
Using max_threads == 1 and calling fuse_session_loop_mt() will run single threaded
|
|
|
|
similar to fuse_session_loop().
|
|
|
|
|
|
|
|
The following changes apply when using the most recent API (-DFUSE_USE_VERSION=312,
|
|
|
|
see `example/passthrough_hp.cc` for an example for how to usse the new API):
|
|
|
|
|
|
|
|
* `struct fuse_loop_config` is now private and has to be constructed using
|
2023-03-30 02:47:13 +08:00
|
|
|
*fuse_loop_cfg_create()* and destroyed with *fuse_loop_cfg_destroy()*. Parameters can be
|
2022-09-08 18:02:45 +08:00
|
|
|
changed using `fuse_loop_cfg_set_*()` functions.
|
|
|
|
|
|
|
|
* *fuse_session_loop_mt()* now accepts `struct fuse_loop_config *` as NULL pointer.
|
|
|
|
|
|
|
|
* *fuse_parse_cmdline()* now accepts a *max_threads* option.
|
2022-08-06 02:51:51 +08:00
|
|
|
|
|
|
|
|
2022-05-02 17:11:41 +08:00
|
|
|
libfuse 3.11.0 (2022-05-02)
|
|
|
|
===========================
|
2021-10-24 19:01:23 +08:00
|
|
|
|
|
|
|
* Add support for flag FOPEN_NOFLUSH for avoiding flush on close.
|
2022-02-09 22:59:10 +08:00
|
|
|
* Fixed returning an error condition to ioctl(2)
|
|
|
|
|
2022-05-02 17:11:41 +08:00
|
|
|
|
2021-09-06 20:45:26 +08:00
|
|
|
libfuse 3.10.5 (2021-09-06)
|
|
|
|
===========================
|
|
|
|
|
|
|
|
* Various improvements to make unit tests more robust.
|
2022-05-02 17:11:41 +08:00
|
|
|
|
2021-09-06 20:45:26 +08:00
|
|
|
|
2021-06-09 16:13:01 +08:00
|
|
|
libfuse 3.10.4 (2021-06-09)
|
|
|
|
===========================
|
2021-04-12 18:21:11 +08:00
|
|
|
|
2021-06-09 16:13:01 +08:00
|
|
|
* Building of unit tests is now optional.
|
|
|
|
* Fixed a test failure when running tests under XFS.
|
|
|
|
* Fixed memory leaks in examples.
|
|
|
|
* Minor documentation fixes.
|
2021-04-12 18:21:11 +08:00
|
|
|
|
2021-04-12 18:18:08 +08:00
|
|
|
libfuse 3.10.3 (2021-04-12)
|
|
|
|
===========================
|
2021-03-18 17:52:30 +08:00
|
|
|
|
2021-04-12 18:18:08 +08:00
|
|
|
* Fix returning d_ino and d_type from readdir(3) in non-plus mode
|
|
|
|
|
2021-02-05 17:07:28 +08:00
|
|
|
libfuse 3.10.2 (2021-02-05)
|
|
|
|
===========================
|
2021-01-29 05:51:10 +08:00
|
|
|
|
2021-02-05 17:07:28 +08:00
|
|
|
* Allow "nonempty" as a mount option, for backwards compatibility with fusermount 2. The
|
|
|
|
option has no effect since mounting over non-empty directories is allowed by default.
|
2021-02-03 17:53:21 +08:00
|
|
|
* Fix returning inode numbers from readdir() in offset==0 mode.
|
2021-02-05 17:07:28 +08:00
|
|
|
* FUSE filesystems can now be mounted underneath EXFAT mountpoints.
|
|
|
|
* Various minor bugfixes.
|
2021-01-29 05:51:10 +08:00
|
|
|
|
2020-12-07 17:52:02 +08:00
|
|
|
libfuse 3.10.1 (2020-12-07)
|
|
|
|
===========================
|
|
|
|
|
|
|
|
* Various minor bugfixes.
|
|
|
|
|
2020-11-05 02:32:54 +08:00
|
|
|
libfuse 3.10.0 (2020-10-09)
|
2020-10-09 17:47:25 +08:00
|
|
|
===========================
|
2020-08-09 19:55:02 +08:00
|
|
|
|
2020-09-21 02:08:15 +08:00
|
|
|
* Add FUSE_CAP_CACHE_SYMLINKS: allow caching symlinks in kernel page cache.
|
2020-10-09 17:47:25 +08:00
|
|
|
* Various minor bugfixes and improvements.
|
2020-08-09 19:55:02 +08:00
|
|
|
|
|
|
|
libfuse 3.9.4 (2020-08-09)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
This was an "accidental" release, it is equivalent to 3.9.3.
|
|
|
|
|
2020-08-09 19:49:17 +08:00
|
|
|
libfuse 3.9.3 (2020-08-09)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
* Fixed compilation under OS X and µClibc.
|
|
|
|
* Minor bugfixes and doc updates.
|
|
|
|
|
2020-06-12 19:12:50 +08:00
|
|
|
libfuse 3.9.2 (2020-06-12)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
* Remove obsolete workarounds in examples.
|
|
|
|
* Do not require C++ compiler for building.
|
|
|
|
* Minor bugfixes.
|
|
|
|
|
2020-03-20 04:00:41 +08:00
|
|
|
libfuse 3.9.1 (2020-03-19)
|
|
|
|
===========================
|
2020-01-02 19:08:33 +08:00
|
|
|
|
|
|
|
* Fixed memory leak in fuse_session_new().
|
|
|
|
* Fixed an issue with the linker version script.
|
2020-03-20 04:00:41 +08:00
|
|
|
* Make ioctl prototype conditional on FUSE_USE_VERSION. Define FUSE_USE_VERSION < 35 to
|
|
|
|
get old ioctl prototype with int commands; define FUSE_USE_VERSION >= 35 to get new
|
|
|
|
ioctl prototype with unsigned int commands.
|
|
|
|
* Various small bugfixes.
|
2020-01-02 19:08:03 +08:00
|
|
|
|
2019-12-14 18:39:13 +08:00
|
|
|
libfuse 3.9.0 (2019-12-14)
|
2019-11-27 17:36:30 +08:00
|
|
|
==========================
|
|
|
|
|
|
|
|
* Added support for FUSE_EXPLICIT_INVAL_DATA to enable
|
|
|
|
only invalidate cached pages on explicit request.
|
|
|
|
|
2019-11-03 17:53:39 +08:00
|
|
|
libfuse 3.8.0 (2019-11-03)
|
|
|
|
==========================
|
2019-11-03 17:44:31 +08:00
|
|
|
|
|
|
|
* Added support for FUSE_LSEEK operation which can be used to report holes
|
|
|
|
in sparse files.
|
|
|
|
|
2019-09-28 03:01:33 +08:00
|
|
|
libfuse 3.7.0 (2019-09-27)
|
|
|
|
==========================
|
2019-09-04 22:59:18 +08:00
|
|
|
|
2019-09-15 23:56:56 +08:00
|
|
|
* Added UFSD to whitelist (so users can now mount FUSE filesystems
|
|
|
|
on mountpoints within UFSD filesystems).
|
2019-09-04 22:59:18 +08:00
|
|
|
* Added custom log message handler function support so that libfuse
|
|
|
|
applications can direct messages to syslog(3) or other logging systems.
|
|
|
|
stderr remains the default. See `fuse_log.h` for the new API.
|
|
|
|
|
2019-07-09 20:36:50 +08:00
|
|
|
libfuse 3.6.2 (2019-07-09)
|
|
|
|
==========================
|
2019-07-09 20:13:50 +08:00
|
|
|
|
|
|
|
* The init script is now installed to /etc/ rather than /usr/local/etc
|
|
|
|
by default.
|
|
|
|
|
2019-06-13 22:25:07 +08:00
|
|
|
libfuse 3.6.1 (2019-06-13)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
* Fixed version number (release 3.6.0 was shipped with a declared
|
|
|
|
version of 3.0.0).
|
|
|
|
|
2019-06-13 20:01:10 +08:00
|
|
|
libfuse 3.6.0 (2019-06-13)
|
|
|
|
==========================
|
2019-05-06 01:11:03 +08:00
|
|
|
|
|
|
|
* Added a new example (passthrough_hp). The functionality is similar
|
|
|
|
to passthrough_ll, but the implementation focuses on performance and
|
|
|
|
correctness rather than simplicity.
|
2019-06-13 19:59:10 +08:00
|
|
|
* Added support for fuse kernel feature `max_pages` which allows to increase
|
|
|
|
the maximum number of pages that can be used per request. This feature was
|
|
|
|
introduced in kernel 4.20. `max_pages` is set based on the value in
|
|
|
|
`max_write`. By default `max_write` will be 1MiB now for kernels that support
|
|
|
|
`max_pages`. If you want smaller buffers or writes you have to set
|
|
|
|
`max_write` manually.
|
2019-05-06 01:11:03 +08:00
|
|
|
|
2019-04-17 02:46:20 +08:00
|
|
|
libfuse 3.5.0 (2019-04-16)
|
2019-04-07 22:05:00 +08:00
|
|
|
==========================
|
2019-04-07 01:34:57 +08:00
|
|
|
|
2019-03-12 01:35:23 +08:00
|
|
|
* Changed ioctl commands to "unsigned int" in order to support commands
|
|
|
|
which do not fit into a signed int. Commands issued by applications
|
|
|
|
are still truncated to 32 bits.
|
2019-04-04 04:43:48 +08:00
|
|
|
* Added SMB2 to whitelist (so users can now mount FUSE filesystems
|
|
|
|
on mountpoints within SMB 2.0 filesystems).
|
2019-04-07 01:34:57 +08:00
|
|
|
* Added a new `cache_readdir` flag to `fuse_file_info` to enable
|
2019-04-17 02:46:20 +08:00
|
|
|
caching of readdir results. Supported by kernels 4.20 and newer.
|
2019-04-17 02:44:59 +08:00
|
|
|
* Add support and documentation for FUSE_CAP_NO_OPENDIR_SUPPORT.
|
2019-03-12 01:35:23 +08:00
|
|
|
|
2019-03-09 19:16:00 +08:00
|
|
|
libfuse 3.4.2 (2019-03-09)
|
|
|
|
==========================
|
2018-12-29 22:52:42 +08:00
|
|
|
|
|
|
|
* Fixed a memory leak in `examples/passthrough_ll.c`.
|
2019-01-04 21:33:01 +08:00
|
|
|
* Added OpenAFS to whitelist (so users can now mount FUSE filesystems
|
|
|
|
on mountpoints within OpenAFS filesystems).
|
2019-03-09 18:39:32 +08:00
|
|
|
* Added HFS+ to whitelist (so users can now mount FUSE filesystems
|
|
|
|
on mountpoints within HFS+ filesystems).
|
2019-03-09 19:16:00 +08:00
|
|
|
* Documentation improvements.
|
2018-12-29 22:52:42 +08:00
|
|
|
|
2018-12-22 22:48:37 +08:00
|
|
|
libfuse 3.4.1 (2018-12-22)
|
|
|
|
==========================
|
2018-12-22 22:45:30 +08:00
|
|
|
|
|
|
|
* The `examples/passthrough_ll.c` example filesystem has been
|
|
|
|
significantly extended.
|
|
|
|
* Support for `copy_file_range` has been added.
|
|
|
|
* Build system updates for non-Linux systems.
|
|
|
|
|
2018-06-27 03:40:21 +08:00
|
|
|
libfuse 3.4.0
|
|
|
|
=============
|
|
|
|
|
|
|
|
* Add `copy_file_range()` to support efficient copying of data from one file to
|
|
|
|
an other.
|
|
|
|
|
2018-11-07 02:57:47 +08:00
|
|
|
libfuse 3.3.0 (2018-11-06)
|
|
|
|
==========================
|
2018-09-17 21:53:30 +08:00
|
|
|
|
2018-10-17 07:23:07 +08:00
|
|
|
* The `auto_unmount` mode now works correctly in combination with
|
|
|
|
autofs.
|
|
|
|
|
2018-09-17 21:53:30 +08:00
|
|
|
* The FUSE_CAP_READDIRPLUS_AUTO capability is no longer enabled by
|
|
|
|
default unless the file system defines both a readdir() and a
|
|
|
|
readdirplus() handler.
|
|
|
|
|
|
|
|
* The description of the FUSE_CAP_READDIRPLUS_AUTO flag has been
|
|
|
|
improved.
|
|
|
|
|
Allow passing `/dev/fuse` file descriptor from parent process
This adds support for a mode of operation in which a privileged parent
process opens `/dev/fuse` and takes care of mounting. The FUSE file
system daemon can then run as an unprivileged child that merely
processes requests on the FUSE file descriptor, which get passed using
the special `/dev/fd/%u` syntax for the mountpoint parameter.
The main benefit is that no privileged operations need to be performed
by the FUSE file system daemon itself directly or indirectly, so the
FUSE process can run with fully unprivileged and mechanisms like
securebits and no_new_privs can be used to prevent subprocesses from
re-acquiring privilege via setuid, fscaps, etc. This reduces risk in
case the FUSE file system gets exploited by malicious file system
data.
Below is an example that illustrates this. Note that I'm using shell
for presentation purposes, the expectation is that the parent process
will implement the equivalent of the `mount -i` and `capsh` commands.
```
\# example/hello can mount successfully with privilege
$ sudo sh -c "LD_LIBRARY_PATH=build/lib ./example/hello /mnt/tmp"
$ sudo cat /mnt/tmp/hello
Hello World!
$ sudo umount /mnt/tmp
\# example/hello fails to mount without privilege
$ sudo capsh --drop=all --secbits=0x2f -- -c 'LD_LIBRARY_PATH=build/lib ./example/hello -f /mnt/tmp'
fusermount3: mount failed: Operation not permitted
\# Passing FUSE file descriptor via /dev/fd/%u allows example/hello to work without privilege
$ sudo sh -c '
exec 17<>/dev/fuse
mount -i -o nodev,nosuid,noexec,fd=17,rootmode=40000,user_id=0,group_id=0 -t fuse hello /mnt/tmp
capsh --drop=all --secbits=0x2f -- -c "LD_LIBRARY_PATH=build/lib example/hello /dev/fd/17"
'
$ sudo cat /mnt/tmp/hello
Hello World!
$ sudo umount /mnt/tmp
```
2018-08-27 21:17:57 +08:00
|
|
|
* Allow open `/dev/fuse` file descriptors to be passed via mountpoints of the
|
|
|
|
special format `/dev/fd/%u`. This allows mounting to be handled by the parent
|
|
|
|
so the FUSE filesystem process can run fully unprivileged.
|
|
|
|
|
2018-08-31 15:44:04 +08:00
|
|
|
* Add a `drop_privileges` option to mount.fuse3 which causes it to open
|
|
|
|
`/dev/fuse` and mount the file system itself, then run the FUSE file
|
|
|
|
filesystem fully unprivileged and unable to re-acquire privilege via setuid,
|
|
|
|
fscaps, etc.
|
|
|
|
|
2018-11-07 02:41:58 +08:00
|
|
|
* Documented under which conditions the `fuse_lowlevel_notify_*`
|
|
|
|
functions may block.
|
|
|
|
|
2018-08-31 19:48:04 +08:00
|
|
|
libfuse 3.2.6 (2018-08-31)
|
|
|
|
==========================
|
2018-08-31 03:03:21 +08:00
|
|
|
|
|
|
|
* The fuse_main() function now returns more fine-grained error codes.
|
|
|
|
* FUSE filesystems may now be mounted on mountpoint within
|
|
|
|
bcachefs, aufs and FAT filesystems.
|
|
|
|
* libfuse may now be used as a Meson subproject.
|
|
|
|
* Fix a few low-impact memory leaks.
|
2018-08-31 19:38:26 +08:00
|
|
|
* The `fuse.conf` file is no longer looked for in `/etc`, but in the
|
|
|
|
*sysconfdir* directory (which can be set with `meson configure`). By
|
|
|
|
default, the location is thus `/usr/local/etc/fuse.conf`.
|
2018-07-31 22:20:56 +08:00
|
|
|
|
2018-07-24 14:45:33 +08:00
|
|
|
libfuse 3.2.5 (2018-07-24)
|
|
|
|
==========================
|
Fix readdir() bug when a non-zero offset is specified in filler (#269)
The bug occurs when a filesystem client reads a directory until the end,
seeks using seekdir() to some valid non-zero position and calls
readdir(). A valid 'struct dirent *' is expected, but NULL is returned
instead. Pseudocode demonstrating the bug:
DIR *dp = opendir("some_dir");
struct dirent *de = readdir(dp);
/* Get offset of the second entry */
long offset = telldir(dp);
/* Read directory until the end */
while (de)
de = readdir(de);
seekdir(dp, offset);
de = readdir(dp);
/* de must contain the second entry, but NULL is returned instead */
The reason of the bug is that when the end of directory is reached, the
kernel calls FUSE_READDIR op with an offset at the end of directory, so
the filesystem's .readdir callback never calls the filler function, and
we end up with dh->filled set to 1. After seekdir(), FUSE_READDIR is
called again with a new offset, but this time the filesystem's .readdir
callback is never called, and an empty reply is returned.
Fix by setting dh->filled to 1 only when zero offsets are given to
filler function.
2018-07-21 17:57:09 +08:00
|
|
|
|
2018-07-24 14:45:33 +08:00
|
|
|
* SECURITY UPDATE: In previous versions of libfuse it was possible to
|
|
|
|
for unprivileged users to specify the `allow_other` option even when
|
|
|
|
this was forbidden in `/etc/fuse.conf`. The vulnerability is
|
|
|
|
present only on systems where SELinux is active (including in
|
|
|
|
permissive mode).
|
2018-07-19 03:35:46 +08:00
|
|
|
* The fusermount binary has been hardened in several ways to reduce
|
|
|
|
potential attack surface. Most importantly, mountpoints and mount
|
|
|
|
options must now match a hard-coded whitelist. It is expected that
|
|
|
|
this whitelist covers all regular use-cases.
|
Fix readdir() bug when a non-zero offset is specified in filler (#269)
The bug occurs when a filesystem client reads a directory until the end,
seeks using seekdir() to some valid non-zero position and calls
readdir(). A valid 'struct dirent *' is expected, but NULL is returned
instead. Pseudocode demonstrating the bug:
DIR *dp = opendir("some_dir");
struct dirent *de = readdir(dp);
/* Get offset of the second entry */
long offset = telldir(dp);
/* Read directory until the end */
while (de)
de = readdir(de);
seekdir(dp, offset);
de = readdir(dp);
/* de must contain the second entry, but NULL is returned instead */
The reason of the bug is that when the end of directory is reached, the
kernel calls FUSE_READDIR op with an offset at the end of directory, so
the filesystem's .readdir callback never calls the filler function, and
we end up with dh->filled set to 1. After seekdir(), FUSE_READDIR is
called again with a new offset, but this time the filesystem's .readdir
callback is never called, and an empty reply is returned.
Fix by setting dh->filled to 1 only when zero offsets are given to
filler function.
2018-07-21 17:57:09 +08:00
|
|
|
* Added a test of `seekdir` to test_syscalls.
|
|
|
|
* Fixed `readdir` bug when non-zero offsets are given to filler and the
|
|
|
|
filesystem client, after reading a whole directory, re-reads it from a
|
|
|
|
non-zero offset e. g. by calling `seekdir` followed by `readdir`.
|
|
|
|
|
2018-07-11 17:34:38 +08:00
|
|
|
libfuse 3.2.4 (2018-07-11)
|
|
|
|
==========================
|
2018-05-17 03:05:28 +08:00
|
|
|
|
|
|
|
* Fixed `rename` deadlock on FreeBSD.
|
|
|
|
|
2018-05-11 22:01:09 +08:00
|
|
|
libfuse 3.2.3 (2018-05-11)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
* Fixed a number of compiler warnings.
|
|
|
|
|
2018-03-31 20:08:08 +08:00
|
|
|
libfuse 3.2.2 (2018-03-31)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
* Added example fuse.conf file.
|
|
|
|
* Added "support" for -o nofail mount option (the option is accepted
|
|
|
|
and ignored).
|
|
|
|
* Various small bugfixes.
|
|
|
|
|
2017-11-15 04:48:15 +08:00
|
|
|
libfuse 3.2.1 (2017-11-14)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
* Various small bugfixes.
|
|
|
|
|
2017-09-12 21:03:31 +08:00
|
|
|
libfuse 3.2.0 (2017-09-12)
|
|
|
|
==========================
|
2017-08-03 22:24:39 +08:00
|
|
|
|
2017-08-24 23:07:57 +08:00
|
|
|
* Support for building with autotools has been dropped.
|
2017-09-12 21:03:31 +08:00
|
|
|
|
2017-08-07 18:41:33 +08:00
|
|
|
* Added new `fuse_invalidate_path()` routine for cache invalidation
|
|
|
|
from the high-level FUSE API, along with an example and tests.
|
2017-09-12 21:03:31 +08:00
|
|
|
|
2017-08-24 05:39:27 +08:00
|
|
|
* There's a new `printcap` example that can be used to determine the
|
|
|
|
capabilities of the running kernel.
|
2017-09-12 21:03:31 +08:00
|
|
|
|
2017-08-24 05:37:40 +08:00
|
|
|
* `fuse_loop_mt()` now returns the minus the actual errno if there was
|
|
|
|
an error (instead of just -1).
|
2017-09-12 21:03:31 +08:00
|
|
|
|
2017-08-24 05:37:40 +08:00
|
|
|
* `fuse_loop()` no longer returns a positive value if the filesystem
|
2017-08-24 05:36:22 +08:00
|
|
|
loop was terminated without errors or signals.
|
2017-09-12 21:03:31 +08:00
|
|
|
|
2017-08-22 23:05:26 +08:00
|
|
|
* Improved documentation of `fuse_lowlevel_notify_*` functions.
|
|
|
|
|
|
|
|
* `fuse_lowlevel_notify_inval_inode()` and
|
|
|
|
`fuse_lowlevel_notify_inval_entry()` now return -ENOSYS instead of
|
|
|
|
an undefined error if the function is not supported by the kernel.
|
2017-09-12 21:03:31 +08:00
|
|
|
|
2017-08-22 19:45:41 +08:00
|
|
|
* Documented the special meaning of the *zero* offset for the
|
|
|
|
fuse_fill_dir_t function.
|
2017-09-12 21:03:31 +08:00
|
|
|
|
2017-08-22 19:46:14 +08:00
|
|
|
* The `passthrough_fh` example now works under FreeBSD.
|
2017-09-12 21:03:31 +08:00
|
|
|
|
2017-08-22 18:10:50 +08:00
|
|
|
* libfuse can now be build without libiconv.
|
|
|
|
|
2017-08-03 22:24:39 +08:00
|
|
|
* Fixed support for `FUSE_CAP_POSIX_ACL`: setting this capability
|
|
|
|
flag had no effect in the previous versions of libfuse 3.x;
|
|
|
|
now ACLs should actually work.
|
|
|
|
|
2017-08-14 16:26:51 +08:00
|
|
|
* Fixed a number of compilation problems under FreeBSD.
|
|
|
|
|
2017-09-12 21:03:31 +08:00
|
|
|
* Fixed installation directory for udev rules.
|
2017-08-11 16:42:58 +08:00
|
|
|
|
2017-08-14 23:08:41 +08:00
|
|
|
* Fixed compilation with LTO.
|
|
|
|
|
2017-08-06 19:24:40 +08:00
|
|
|
libfuse 3.1.1 (2017-08-06)
|
|
|
|
==========================
|
2017-08-03 18:56:02 +08:00
|
|
|
|
2017-08-05 04:12:36 +08:00
|
|
|
* Documentation: clarified how filesystems are supposed to process
|
|
|
|
open() and create() flags (see include/fuse_lowlevel.h).
|
|
|
|
|
2017-08-03 18:56:02 +08:00
|
|
|
* Fixed a compilation problem of the passthrough_ll example on
|
|
|
|
32 bit systems (wrong check and wrong error message).
|
|
|
|
|
2017-08-03 19:00:09 +08:00
|
|
|
* pkg-config is now used to determine the proper directory for
|
|
|
|
udev rules.
|
|
|
|
|
2017-08-03 19:01:12 +08:00
|
|
|
* Fixed a symbol versioning problem that resulted in very strange
|
|
|
|
failures (segfaults, unexpected behavior) in different situations.
|
|
|
|
|
2017-08-06 19:24:40 +08:00
|
|
|
* Fixed a test failure when /tmp is on btrfs.
|
2017-08-03 19:07:30 +08:00
|
|
|
|
2017-08-24 20:37:10 +08:00
|
|
|
* The maximum number of idle worker threads used by `fuse_loop_mt()`
|
|
|
|
is now configurable.
|
|
|
|
|
|
|
|
* `fuse_loop_mt()` and `fuse_session_loop_mt()` now take a
|
|
|
|
`struct fuse_loop_config` parameter that supersedes the *clone_fd*
|
|
|
|
parameter.
|
|
|
|
|
2017-08-03 23:12:15 +08:00
|
|
|
* Incorporated several patches from the FreeBSD port. libfuse should
|
|
|
|
now compile under FreeBSD without the need for patches.
|
|
|
|
|
2017-08-05 04:38:03 +08:00
|
|
|
* The passthrough_ll example now supports writeback caching.
|
|
|
|
|
2017-07-08 18:11:01 +08:00
|
|
|
libfuse 3.1.0 (2017-07-08)
|
|
|
|
==========================
|
2017-05-25 06:56:41 +08:00
|
|
|
|
2017-07-07 21:25:41 +08:00
|
|
|
* Added new `fuse_lib_help()` function. File-systems that previously
|
|
|
|
passed a ``--help`` option to `fuse_new()` must now process the
|
|
|
|
``--help`` option internally and call `fuse_lib_help()` to print the
|
|
|
|
help for generic FUSE options.
|
2017-07-08 07:12:59 +08:00
|
|
|
* Fixed description of the `fuse_conn_info->time_gran`. The default
|
|
|
|
value of zero actually corresponds to full nanosecond resolution,
|
|
|
|
not one second resolution.
|
2017-06-22 06:41:37 +08:00
|
|
|
* The init script is now installed into the right location
|
2017-07-07 21:25:41 +08:00
|
|
|
(``$DESTDIR/etc/init.d`` rather than ``$prefix/$sysconfdir/init.d``)
|
2017-06-05 19:00:56 +08:00
|
|
|
* The `example/passthrough_ll` filesystem now supports creating
|
|
|
|
and writing to files.
|
2017-05-25 06:56:41 +08:00
|
|
|
* `fuse_main()` / `fuse_remove_signal_handlers()`: do not reset
|
2017-07-07 21:27:17 +08:00
|
|
|
`SIGPIPE` handler to `SIG_DFL` if it was not set by us.
|
2017-05-26 04:12:06 +08:00
|
|
|
* Documented the `RENAME_EXCHANGE` and `RENAME_NOREPLACE` flags that
|
|
|
|
may be passed to the `rename` handler of both the high- and
|
|
|
|
low-level API. Filesystem authors are strongly encouraged to check
|
|
|
|
that these flags are handled correctly.
|
2017-05-25 06:56:41 +08:00
|
|
|
|
2017-05-25 04:56:11 +08:00
|
|
|
libfuse 3.0.2 (2017-05-24)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
* Option parsing for the high-level API now works correctly
|
|
|
|
(previously, default values would override specified values).
|
|
|
|
* Tests should now build (and run) under FreeBSD.
|
|
|
|
* Improved documentation of `struct fuse_context`
|
|
|
|
* Internal: calculate request buffer size from page size and kernel
|
|
|
|
page limit instead of using hardcoded 128 kB limit.
|
|
|
|
|
|
|
|
|
2017-04-11 08:28:41 +08:00
|
|
|
libfuse 3.0.1 (2017-04-10)
|
2016-12-24 10:31:45 +08:00
|
|
|
==========================
|
|
|
|
|
2017-04-07 02:42:01 +08:00
|
|
|
* Re-introduced *examples/null.c*.
|
2017-01-06 01:37:00 +08:00
|
|
|
* Added experimental support for building with Meson.
|
2017-04-07 02:41:48 +08:00
|
|
|
* Document that `-o auto_unmount` implies `-o nodev,nosuid`.
|
|
|
|
* Document that the *use_ino* option of the high-level interface does
|
|
|
|
not affect the inode that libfuse and the kernel use internally.
|
2017-04-11 08:11:30 +08:00
|
|
|
* Fixed test cases for passthrough* examples (they weren't actually
|
|
|
|
testing the examples).
|
|
|
|
* Fixed several bugs in the passthrough* examples.
|
|
|
|
|
2016-12-10 01:33:01 +08:00
|
|
|
libfuse 3.0.0 (2016-12-08)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
* NOTE TO PACKAGERS:
|
|
|
|
|
|
|
|
libfuse 3 is designed to be co-installable with libfuse 2. However,
|
|
|
|
some files will be installed by both libfuse 2 and libfuse 3
|
|
|
|
(e.g. /etc/fuse.conf, the udev and init scripts, and the
|
|
|
|
mount.fuse(8) manpage). These files should be taken from
|
|
|
|
libfuse 3. The format/content is guaranteed to remain backwards
|
|
|
|
compatible with libfuse 2.
|
|
|
|
|
|
|
|
We recommend to ship libfuse2 and libfuse3 in three separate
|
|
|
|
packages: a libfuse-common package that contains files shared by
|
|
|
|
libfuse 2+3 (taken from the libfuse3 tarball), and libfuse2 and
|
|
|
|
libfuse3 packages that contain the shared library and helper
|
|
|
|
programs for the respective version.
|
2016-11-11 05:09:05 +08:00
|
|
|
|
|
|
|
* Fixed test errors when running tests as root.
|
|
|
|
|
2016-11-11 05:11:57 +08:00
|
|
|
* Made check for util-linux version more robust.
|
|
|
|
|
2016-11-17 04:46:56 +08:00
|
|
|
* Added documentation for all fuse capability flags (`FUSE_CAP_*`) and
|
|
|
|
`struct fuse_conn_info` fields.
|
2016-11-11 06:51:11 +08:00
|
|
|
|
2016-11-17 04:41:41 +08:00
|
|
|
* fuse_loop(), fuse_loop_mt(), fuse_session_loop() and
|
2016-11-24 08:00:45 +08:00
|
|
|
fuse_session_loop_mt() now return more detailed error codes instead
|
|
|
|
of just -1. See the documentation of fuse_session_loop() for details.
|
2016-11-17 04:41:41 +08:00
|
|
|
|
2016-11-17 04:45:51 +08:00
|
|
|
* The FUSE main loop is now aborted if the file-system requests
|
2016-11-24 08:00:45 +08:00
|
|
|
capabilities that are not supported by the kernel. In this case, the
|
|
|
|
session loop is exited with a return code of ``-EPROTO``.
|
2016-11-17 04:45:51 +08:00
|
|
|
|
2016-11-17 05:04:47 +08:00
|
|
|
* Most file-system capabilities that were opt-in in libfuse2 are now
|
|
|
|
enabled by default. Filesystem developers are encouraged to review
|
|
|
|
the documentation of the FUSE_CAP_* features to ensure that their
|
|
|
|
filesystem is compatible with the new semantics. As before, a
|
|
|
|
particular capability can still be disabled by unsetting the
|
|
|
|
corresponding bit of `fuse_conn_info.wants` in the init() handler.
|
|
|
|
|
2016-11-23 07:56:55 +08:00
|
|
|
* Added FUSE_CAP_PARALLEL_DIROPS and FUSE_CAP_POSIX_ACL,
|
|
|
|
FUSE_HANDLE_KILLPRIV feature flags.
|
2016-11-23 07:15:05 +08:00
|
|
|
|
2016-11-23 07:56:55 +08:00
|
|
|
* FUSE filesystems are now responsible for unsetting the setuid/setgid
|
|
|
|
flags when a file is written, truncated, or its owner
|
|
|
|
changed. Previously, this was handled by the kernel but subject to
|
|
|
|
race conditions.
|
2016-11-17 05:04:47 +08:00
|
|
|
|
2016-10-26 12:06:14 +08:00
|
|
|
* The fusermount and mount.fuse binaries have been renamed to
|
|
|
|
fusermount3 and mount.fuse3 to allow co-installation of libfuse 2.x
|
|
|
|
and 3.x
|
|
|
|
|
2016-10-28 12:38:42 +08:00
|
|
|
* Added a `max_read` field to `struct fuse_conn_info`. For the time
|
|
|
|
being, the maximum size of read requests has to be specified both
|
|
|
|
there *and* passed to fuse_session_new() using the ``-o
|
|
|
|
max_read=<n>`` mount option. At some point in the future, specifying
|
|
|
|
the mount option will no longer be necessary.
|
|
|
|
|
2016-10-25 11:31:29 +08:00
|
|
|
* Documentation: clarified that the fuse_argv structure that is passed
|
|
|
|
to `fuse_new()` and `fuse_lowlevel_new()` must always contain at
|
|
|
|
least one element.
|
|
|
|
|
2016-10-19 12:02:32 +08:00
|
|
|
* The high-level init() handler now receives an additional struct
|
|
|
|
fuse_config pointer that can be used to adjust high-level API
|
|
|
|
specific configuration options.
|
|
|
|
|
2016-10-21 06:45:32 +08:00
|
|
|
* The `nopath_flag` field of struct fuse_operations has been
|
|
|
|
removed. Instead, a new `nullpath_ok` flag can now be set
|
|
|
|
in struct fuse_config.
|
|
|
|
|
2016-10-18 12:31:37 +08:00
|
|
|
* File systems that use the low-level API and support lookup requests
|
|
|
|
for '.' and '..' should continue make sure to set the
|
|
|
|
FUSE_CAP_EXPORT_SUPPORT bit in fuse_conn_info->want.
|
|
|
|
|
|
|
|
(This has actually always been the case, but was not very obvious
|
|
|
|
from the documentation).
|
|
|
|
|
2016-10-16 10:46:57 +08:00
|
|
|
* The help text generated by fuse_lowlevel_help(), fuse_new() (and
|
|
|
|
indirectly fuse_main()) no longer includes options that are unlikely
|
|
|
|
to be of interest to end-users. The full list of accepted options is
|
|
|
|
now included in the respective function's documentation (located in
|
|
|
|
the fuse.h/fuse_lowlevel.h and doc/html).
|
|
|
|
|
Removed -o nopath - it never did anything
We are overriding this setting with the flag in struct fuse_operations:
$ example/hello -f -d ~/tmp/mnt
FUSE library version: 3.0.0pre0
nopath: 0
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.25
flags=0x0007fffb
max_readahead=0x00020000
INIT: 7.23
flags=0x00006031
max_readahead=0x00020000
max_write=0x00020000
max_background=0
congestion_threshold=0
time_gran=0
unique: 1, success, outsize: 80
$ example/hello -f -d ~/tmp/mnt -o nopath
FUSE library version: 3.0.0pre0
nopath: 0
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.25
flags=0x0007fffb
max_readahead=0x00020000
INIT: 7.23
flags=0x00006031
max_readahead=0x00020000
max_write=0x00020000
max_background=0
congestion_threshold=0
time_gran=0
unique: 1, success, outsize: 80
2016-10-16 10:07:57 +08:00
|
|
|
* The ``-o nopath`` option has been dropped - it never actually did
|
|
|
|
anything (since it is unconditionally overwritten with the value of
|
2022-01-23 18:17:03 +08:00
|
|
|
the `nopath` flag in `struct fuse_operations`).
|
Removed -o nopath - it never did anything
We are overriding this setting with the flag in struct fuse_operations:
$ example/hello -f -d ~/tmp/mnt
FUSE library version: 3.0.0pre0
nopath: 0
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.25
flags=0x0007fffb
max_readahead=0x00020000
INIT: 7.23
flags=0x00006031
max_readahead=0x00020000
max_write=0x00020000
max_background=0
congestion_threshold=0
time_gran=0
unique: 1, success, outsize: 80
$ example/hello -f -d ~/tmp/mnt -o nopath
FUSE library version: 3.0.0pre0
nopath: 0
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.25
flags=0x0007fffb
max_readahead=0x00020000
INIT: 7.23
flags=0x00006031
max_readahead=0x00020000
max_write=0x00020000
max_background=0
congestion_threshold=0
time_gran=0
unique: 1, success, outsize: 80
2016-10-16 10:07:57 +08:00
|
|
|
|
2016-10-16 09:49:52 +08:00
|
|
|
* The ``-o large_read`` mount option has been dropped. Hopefully no
|
|
|
|
one uses a Linux 2.4 kernel anymore.
|
|
|
|
|
2016-10-08 11:57:53 +08:00
|
|
|
* The `-o nonempty` mount point has been removed, mounting over
|
|
|
|
non-empty directories is now always allowed. This brings the
|
|
|
|
behavior of FUSE file systems in-line with the behavior of the
|
|
|
|
regular `mount` command.
|
|
|
|
|
|
|
|
File systems that do not want to allow mounting to non-empty
|
|
|
|
directories should perform this check themselves before handing
|
|
|
|
control to libfuse.
|
|
|
|
|
2016-10-16 09:46:27 +08:00
|
|
|
* The chmod, chown, truncate, utimens and getattr handlers of the
|
|
|
|
high-level API now all receive an additional struct fuse_file_info
|
2016-12-10 01:33:01 +08:00
|
|
|
pointer (which, however, may be NULL even if the file is currently
|
|
|
|
open).
|
2016-10-16 09:46:27 +08:00
|
|
|
|
2016-10-18 11:15:25 +08:00
|
|
|
The fgetattr and ftruncate handlers have become obsolete and have
|
2016-10-16 09:46:27 +08:00
|
|
|
been removed.
|
|
|
|
|
2016-10-11 12:29:36 +08:00
|
|
|
* The `fuse_session_new` function no longer accepts the ``-o
|
|
|
|
clone_fd`` option. Instead, this has become a parameter of the
|
2022-01-23 18:17:03 +08:00
|
|
|
`fuse_session_loop_mt` and `fuse_loop_mt` functions.
|
2016-10-11 12:29:36 +08:00
|
|
|
|
2016-10-11 07:14:17 +08:00
|
|
|
* For low-level file systems that implement the `write_buf` handler,
|
|
|
|
the `splice_read` option is now enabled by default. As usual, this
|
|
|
|
can be changed in the file system's `init` handler.
|
|
|
|
|
2016-10-16 07:09:16 +08:00
|
|
|
* The treatment of low-level options has been made more consistent:
|
|
|
|
|
|
|
|
Options that can be set in the init() handler (via the
|
|
|
|
fuse_conn_info parameter) can now be set only here,
|
|
|
|
i.e. fuse_session_new() no longer accepts arguments that change the
|
|
|
|
fuse_conn_info object before or after the call do init(). As a side
|
|
|
|
effect, this removes the ambiguity where some options can be
|
|
|
|
overwritten by init(), while others overwrite the choices made by
|
|
|
|
init().
|
|
|
|
|
|
|
|
For file systems that wish to offer command line options for these
|
|
|
|
settings, the new fuse_parse_conn_info_opts() and
|
|
|
|
fuse_apply_conn_info_opts() functions are available.
|
|
|
|
|
|
|
|
Consequently, the fuse_lowlevel_help() method has been dropped.
|
|
|
|
|
|
|
|
* The `async_read` field in `struct fuse_conn_info` has been
|
|
|
|
removed. To determine if the kernel supports asynchronous reads,
|
|
|
|
file systems should check the `FUSE_CAP_ASYNC_READ` bit of the
|
|
|
|
`capable` field. To enable/disable asynchronous reads, file systems
|
|
|
|
should set the flag in the `wanted` field.
|
2016-10-11 05:53:57 +08:00
|
|
|
|
2016-10-10 13:07:54 +08:00
|
|
|
* The `fuse_parse_cmdline` function no longer prints out help when the
|
|
|
|
``--verbose`` or ``--help`` flags are given. This needs to be done
|
2016-10-16 07:09:16 +08:00
|
|
|
by the file system (e.g. using the `fuse_cmdline_help()` and
|
2016-10-16 10:46:57 +08:00
|
|
|
`fuse_lowlevel_help()` functions).
|
2016-10-10 13:07:54 +08:00
|
|
|
|
2016-10-10 12:05:54 +08:00
|
|
|
* Added ``example/cuse_client.c`` to test ``example/cuse.c``.
|
|
|
|
|
2016-10-09 12:47:53 +08:00
|
|
|
* Removed ``example/null.c``. This has not been working for a while
|
|
|
|
for unknown reasons -- maybe because it tries to treat the
|
|
|
|
mountpoint as a file rather than a directory?
|
|
|
|
|
2016-10-10 11:29:04 +08:00
|
|
|
* There are several new examples that demonstrate the use of
|
|
|
|
the ``fuse_lowlevel_notify_*`` functions:
|
2016-10-09 12:24:13 +08:00
|
|
|
|
2016-10-10 11:29:04 +08:00
|
|
|
- ``example/notify_store_retrieve.c``
|
|
|
|
- ``example/notify_inval_inode.c``
|
|
|
|
- ``example/notify_inval_entry.c``
|
2016-10-09 10:29:39 +08:00
|
|
|
|
2016-10-08 12:08:40 +08:00
|
|
|
* The ``-o big_writes`` mount option has been removed. It is now
|
|
|
|
always active. File systems that want to limit the size of write
|
|
|
|
requests should use the ``-o max_write=<N>`` option instead.
|
|
|
|
|
2016-10-03 01:44:16 +08:00
|
|
|
* The `fuse_lowlevel_new` function has been renamed to
|
2016-10-03 11:52:33 +08:00
|
|
|
`fuse_session_new` and no longer interprets the --version or --help
|
|
|
|
options. To print help or version information, use the new
|
|
|
|
`fuse_lowlevel_help` and `fuse_lowlevel_version` functions.
|
2016-10-03 01:44:16 +08:00
|
|
|
|
2016-12-10 01:33:01 +08:00
|
|
|
* The ``allow_other`` and ``allow_root`` mount options (accepted by
|
|
|
|
`fuse_session_new()`) may now be specified together. In this case,
|
|
|
|
``allow_root`` takes precedence.
|
|
|
|
|
2016-10-03 11:52:33 +08:00
|
|
|
* There are new `fuse_session_unmount` and `fuse_session_mount`
|
|
|
|
functions that should be used in the low-level API. The `fuse_mount`
|
|
|
|
and `fuse_unmount` functions should be used with the high-level API
|
|
|
|
only.
|
|
|
|
|
|
|
|
* Neither `fuse_mount` nor `fuse_session_mount` take struct fuse_opts
|
|
|
|
parameters anymore. Mount options are parsed by `fuse_new` (for the
|
|
|
|
high-level API) and `fuse_session_new` (for the low-level API)
|
|
|
|
instead. To print help or version information, use the new
|
|
|
|
`fuse_mount_help` and `fuse_mount_version` functions.
|
2016-10-03 01:26:40 +08:00
|
|
|
|
2016-09-18 10:29:19 +08:00
|
|
|
* The ``fuse_lowlevel_notify_*`` functions now all take a `struct
|
|
|
|
fuse_session` parameter instead of a `struct fuse_chan`.
|
|
|
|
|
2016-10-03 02:30:43 +08:00
|
|
|
* The channel interface (``fuse_chan_*`` functions) has been made
|
|
|
|
private. As a result, the typical initialization sequence of a
|
|
|
|
low-level file system has changed from ::
|
|
|
|
|
|
|
|
ch = fuse_mount(mountpoint, &args);
|
|
|
|
se = fuse_lowlevel_new(&args, &lo_oper, sizeof(lo_oper), &lo);
|
|
|
|
fuse_set_signal_handlers(se);
|
|
|
|
fuse_session_add_chan(se, ch);
|
|
|
|
fuse_daemonize(fg);
|
|
|
|
if (mt)
|
|
|
|
fuse_session_loop_mt(se);
|
|
|
|
else
|
|
|
|
fuse_session_loop(se);
|
|
|
|
fuse_remove_signal_handlers(se);
|
|
|
|
fuse_session_remove_chan(ch);
|
|
|
|
fuse_session_destroy(se);
|
|
|
|
fuse_unmount(mountpoint, ch);
|
|
|
|
|
|
|
|
to ::
|
|
|
|
|
|
|
|
se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL);
|
|
|
|
fuse_set_signal_handlers(se);
|
|
|
|
fuse_session_mount(se, mountpoint);
|
|
|
|
fuse_daemonize(fg);
|
|
|
|
if (mt)
|
|
|
|
fuse_session_loop_mt(se);
|
|
|
|
else
|
|
|
|
fuse_session_loop(se);
|
|
|
|
fuse_remove_signal_handlers(se);
|
|
|
|
fuse_session_unmount(se);
|
|
|
|
fuse_lowlevel_destroy(se);
|
|
|
|
|
|
|
|
The typical high-level setup has changed from ::
|
|
|
|
|
|
|
|
ch = fuse_mount(*mountpoint, &args);
|
|
|
|
fuse = fuse_new(ch, &args, op, op_size, user_data);
|
|
|
|
se = fuse_get_session(fuse);
|
|
|
|
fuse_set_signal_handlers(se);
|
|
|
|
fuse_daemonize(fg);
|
|
|
|
if (mt)
|
|
|
|
fuse_loop_mt(fuse);
|
|
|
|
else
|
|
|
|
fuse_loop(fuse);
|
|
|
|
fuse_remove_signal_handlers(se);
|
|
|
|
fuse_unmount(mountpoint, ch);
|
|
|
|
fuse_destroy(fuse);
|
|
|
|
|
|
|
|
to ::
|
|
|
|
|
|
|
|
fuse = fuse_new(&args, op, op_size, user_data);
|
|
|
|
se = fuse_get_session(fuse);
|
|
|
|
fuse_set_signal_handlers(se);
|
2017-07-06 18:40:16 +08:00
|
|
|
fuse_mount(fuse, mountpoint);
|
2016-10-03 02:30:43 +08:00
|
|
|
fuse_daemonize(fg);
|
|
|
|
if (mt)
|
|
|
|
fuse_loop_mt(fuse);
|
|
|
|
else
|
|
|
|
fuse_loop(fuse);
|
|
|
|
fuse_remove_signal_handlers(se);
|
2017-07-06 18:40:16 +08:00
|
|
|
fuse_unmount(fuse);
|
2016-10-03 02:30:43 +08:00
|
|
|
fuse_destroy(fuse);
|
|
|
|
|
|
|
|
File systems that use `fuse_main` are not affected by this change.
|
|
|
|
|
2016-10-03 12:48:47 +08:00
|
|
|
For integration with custom event loops, the new `fuse_session_fd`
|
|
|
|
function provides the file descriptor that's used for communication
|
|
|
|
with the kernel.
|
2016-06-21 08:23:42 +08:00
|
|
|
|
|
|
|
* Added *clone_fd* option. This creates a separate device file
|
|
|
|
descriptor for each processing thread, which might improve
|
|
|
|
performance.
|
|
|
|
|
2016-10-11 12:53:01 +08:00
|
|
|
* Added *writeback_cache* option. With kernel 3.14 and newer this
|
|
|
|
enables write-back caching which can significantly improve
|
|
|
|
performance.
|
|
|
|
|
|
|
|
* Added *async_dio* option. With kernel 3.13 and newer, this allows
|
|
|
|
direct I/O to be done asynchronously.
|
|
|
|
|
2016-06-21 08:23:42 +08:00
|
|
|
* The (high- and low-level) `rename` handlers now takes a *flags*
|
|
|
|
parameter (with values corresponding to the *renameat2* system call
|
|
|
|
introduced in Linux 3.15).
|
|
|
|
|
|
|
|
* The "ulockmgr_server" has been dropped.
|
|
|
|
|
|
|
|
* There is a new (low-level) `readdirplus` handler, with a
|
|
|
|
corresponding example in ``examples/fuse_lo-plus.c`` and a new
|
|
|
|
`fuse_add_direntry_plus` API function.
|
|
|
|
|
|
|
|
* The (high-level) `readdir` handler now takes a *flags* argument.
|
|
|
|
|
|
|
|
* The (high-level) `filler` function passed to `readdir` now takes an
|
|
|
|
additional *flags* argument.
|
|
|
|
|
|
|
|
* The (high-level) `getdir` handler has been dropped.
|
|
|
|
|
|
|
|
* The *flag_nullpath_ok* and *flag_utime_omit_ok* flags have been
|
|
|
|
dropped.
|
|
|
|
|
|
|
|
* The (high-level) *utime* handler has been dropped.
|
|
|
|
|
|
|
|
* The `fuse_invalidate` function has been removed.
|
|
|
|
|
|
|
|
* The `fuse_is_lib_option` function has been removed.
|
|
|
|
|
|
|
|
* The *fh_old* member of `struct fuse_file_info` has been dropped.
|
|
|
|
|
|
|
|
* The type of the *writepage* member of `struct fuse_file_info` was
|
|
|
|
changed from *int* to *unsigned int*.
|
|
|
|
|
|
|
|
* The `struct fuse_file_info` gained a new *poll_events* member.
|
|
|
|
|
|
|
|
* There is a new `fuse_pkgversion` function.
|
|
|
|
|
|
|
|
* The *fuse_off_t* and *fuse_ino_t* changed from *unsigned long* to
|
|
|
|
*uint64_t*, i.e. they are now 64 bits also on 32-bit systems.
|
|
|
|
|
2022-01-23 18:17:03 +08:00
|
|
|
* The type of the *generation* member of `struct fuse_entry_param*`
|
2016-06-21 08:23:42 +08:00
|
|
|
changed from *unsigned* to *uint64_t*.
|
|
|
|
|
|
|
|
* The (low-level) `setattr` handler gained a *FUSE_SET_ATTR_CTIME* bit
|
|
|
|
*for its *to_set* parameter.
|
|
|
|
|
|
|
|
* The `struct fuse_session_ops` data structure has been dropped.
|
|
|
|
|
|
|
|
* The documentation has been clarified and improved in many places.
|
|
|
|
|
|
|
|
|
|
|
|
FUSE 2.9.7 (2016-06-20)
|
|
|
|
=======================
|
|
|
|
|
|
|
|
* Added SELinux support.
|
|
|
|
* Fixed race-condition when session is terminated right after starting
|
|
|
|
a FUSE file system.
|
|
|
|
|
|
|
|
FUSE 2.9.6 (2016-04-23)
|
|
|
|
=======================
|
|
|
|
|
|
|
|
* Tarball now includes documentation.
|
|
|
|
* Shared-object version has now been bumped correctly.
|
|
|
|
|
|
|
|
FUSE 2.9.5 (2016-01-14)
|
|
|
|
=======================
|
|
|
|
|
|
|
|
* New maintainer: Nikolaus Rath <Nikolaus@rath.org>. Many thanks to
|
|
|
|
Miklos Szeredi <miklos@szeredi.hu> for bringing FUSE to where it is
|
|
|
|
now!
|
|
|
|
|
|
|
|
* fix warning in mount.c:receive_fd(). Reported by Albert Berger
|
|
|
|
|
|
|
|
* fix possible memory leak. Reported by Jose R. Guzman
|
|
|
|
|
|
|
|
FUSE 2.9.4 (2015-05-22)
|
|
|
|
=======================
|
|
|
|
|
|
|
|
* fix exec environment for mount and umount. Found by Tavis Ormandy
|
|
|
|
(CVE-2015-3202).
|
|
|
|
|
|
|
|
* fix fuse_remove_signal_handlers() to properly restore the default
|
|
|
|
signal handler. Reported by: Chris Johnson
|
|
|
|
|
|
|
|
* highlevel API: fix directory file handle passed to ioctl() method.
|
|
|
|
Reported by Eric Biggers
|
|
|
|
|
|
|
|
* libfuse: document deadlock avoidance for fuse_notify_inval_entry()
|
|
|
|
and fuse_notify_delete()
|
|
|
|
|
|
|
|
* fusermount, libfuse: send value as unsigned in "user_id=" and
|
|
|
|
"group_id=" options. Uids/gids larger than 2147483647 would result
|
|
|
|
in EINVAL when mounting the filesystem. This also needs a fix in
|
|
|
|
the kernel.
|
|
|
|
|
2017-11-27 18:23:20 +08:00
|
|
|
* Initialize stat buffer passed to ->getattr() and ->fgetattr() to
|
2016-06-21 08:23:42 +08:00
|
|
|
zero in all cases. Reported by Daniel Iwan
|
|
|
|
|
|
|
|
* libfuse: Add missing includes. This allows compiling fuse with
|
|
|
|
musl. Patch by Daniel Thau
|
|
|
|
|
|
|
|
|
|
|
|
Older Versions (before 2013-01-01)
|
|
|
|
==================================
|
|
|
|
|
|
|
|
Please see Git history, e.g. at
|
|
|
|
https://github.com/libfuse/libfuse/blob/fuse_2_9_3/ChangeLog.
|