1libfuse 3.16.2 (2023-10-10) 2=========================== 3 4* Various small fixes and improvements. 5 6libfuse 3.16.1 (2023-08-08) 7=========================== 8 9* Readdir kernel cache can be enabled from high-level API. 10 11libfuse 3.15.1 (2023-07-05) 12=========================== 13 14Future libfuse releases will be signed with `signify`_ rather than PGP (rationale_). This 15release is the last to be signed with PGP and contains the signify public key for current 16(3.15.X) and upcoming (3.16.X) minor release cycle. 17 18.. _signify: https://www.openbsd.org/papers/bsdcan-signify.html 19.. _rationale: https://latacora.micro.blog/2019/07/16/the-pgp-problem.html 20 21 22libfuse 3.15.0 (2023-06-09) 23=========================== 24 25* Improved support for some less common systems (32 bit, alternative libcs) 26 27* Unsupported mount options are no longer silently accepted. 28 29* auto_unmount is now compatible with allow_other. 30 31 32libfuse 3.14.1 (2023-03-26) 33=========================== 34 35* The extended attribute name passed to the setxattr() handler is no longer 36 truncated at the beginning (bug introduced in 3.13.0). 37 38* As a result of the above, the additional setattr() flags introduced in 3.14 are no 39 longer available for now. They will hopefully be reintroduced in the next release. 40 41* Further improvements of configuration header handling. 42 43 44libfuse 3.14.0 (2023-02-17) 45=========================== 46 47* Properly fix the header installation issue. The fix in 3.13.1 resulted 48 in conflicts with other packages. 49 50* Introduce additional setattr() flags (FORCE, KILL_SUID, KILL_SGID, FILE, KILL_PRIV, 51 OPEN, TIMES_SET) 52 53 54libfuse 3.13.1 (2023-02-03) 55=========================== 56 57* Fixed an issue that resulted in errors when attempting to compile against 58 installed libfuse headers (because libc symbol versioning support was not 59 detected correctly in this case). 60 61libfuse 3.13.0 (2023-01-13) 62=========================== 63 64* There is a new low-level API function `fuse_session_custom_io` that allows to implement 65 a daemon with a custom io. This can be used to create a daemon that can process incoming 66 FUSE requests to other destinations than `/dev/fuse`. 67 68* A segfault when loading custom FUSE modules has been fixed. 69 70* There is a new `fuse_notify_expire_entry` function. 71 72* A deadlock when resolving paths in the high-level API has been fixed. 73 74* libfuse can now be build explicitly for C libraries without symbol versioning support. 75 76libfuse 3.12.0 (2022-09-08) 77=========================== 78 79* There is a new build parameter to specify where the SysV init script should be 80 installed. 81 82* The *max_idle_threads* parameter has been deprecated in favor of the new max_threads* 83 parameter (which avoids the excessive overhead of creating and destructing threads). 84 Using max_threads == 1 and calling fuse_session_loop_mt() will run single threaded 85 similar to fuse_session_loop(). 86 87The following changes apply when using the most recent API (-DFUSE_USE_VERSION=312, 88see `example/passthrough_hp.cc` for an example for how to usse the new API): 89 90* `struct fuse_loop_config` is now private and has to be constructed using 91 *fuse_loop_cfg_create()* and destroyed with *fuse_loop_cfg_destroy()*. Parameters can be 92 changed using `fuse_loop_cfg_set_*()` functions. 93 94* *fuse_session_loop_mt()* now accepts `struct fuse_loop_config *` as NULL pointer. 95 96* *fuse_parse_cmdline()* now accepts a *max_threads* option. 97 98 99libfuse 3.11.0 (2022-05-02) 100=========================== 101 102* Add support for flag FOPEN_NOFLUSH for avoiding flush on close. 103* Fixed returning an error condition to ioctl(2) 104 105 106libfuse 3.10.5 (2021-09-06) 107=========================== 108 109* Various improvements to make unit tests more robust. 110 111 112libfuse 3.10.4 (2021-06-09) 113=========================== 114 115* Building of unit tests is now optional. 116* Fixed a test failure when running tests under XFS. 117* Fixed memory leaks in examples. 118* Minor documentation fixes. 119 120libfuse 3.10.3 (2021-04-12) 121=========================== 122 123* Fix returning d_ino and d_type from readdir(3) in non-plus mode 124 125libfuse 3.10.2 (2021-02-05) 126=========================== 127 128* Allow "nonempty" as a mount option, for backwards compatibility with fusermount 2. The 129 option has no effect since mounting over non-empty directories is allowed by default. 130* Fix returning inode numbers from readdir() in offset==0 mode. 131* FUSE filesystems can now be mounted underneath EXFAT mountpoints. 132* Various minor bugfixes. 133 134libfuse 3.10.1 (2020-12-07) 135=========================== 136 137* Various minor bugfixes. 138 139libfuse 3.10.0 (2020-10-09) 140=========================== 141 142* Add FUSE_CAP_CACHE_SYMLINKS: allow caching symlinks in kernel page cache. 143* Various minor bugfixes and improvements. 144 145libfuse 3.9.4 (2020-08-09) 146========================== 147 148This was an "accidental" release, it is equivalent to 3.9.3. 149 150libfuse 3.9.3 (2020-08-09) 151========================== 152 153* Fixed compilation under OS X and µClibc. 154* Minor bugfixes and doc updates. 155 156libfuse 3.9.2 (2020-06-12) 157========================== 158 159* Remove obsolete workarounds in examples. 160* Do not require C++ compiler for building. 161* Minor bugfixes. 162 163libfuse 3.9.1 (2020-03-19) 164=========================== 165 166* Fixed memory leak in fuse_session_new(). 167* Fixed an issue with the linker version script. 168* Make ioctl prototype conditional on FUSE_USE_VERSION. Define FUSE_USE_VERSION < 35 to 169 get old ioctl prototype with int commands; define FUSE_USE_VERSION >= 35 to get new 170 ioctl prototype with unsigned int commands. 171* Various small bugfixes. 172 173libfuse 3.9.0 (2019-12-14) 174========================== 175 176* Added support for FUSE_EXPLICIT_INVAL_DATA to enable 177 only invalidate cached pages on explicit request. 178 179libfuse 3.8.0 (2019-11-03) 180========================== 181 182* Added support for FUSE_LSEEK operation which can be used to report holes 183 in sparse files. 184 185libfuse 3.7.0 (2019-09-27) 186========================== 187 188* Added UFSD to whitelist (so users can now mount FUSE filesystems 189 on mountpoints within UFSD filesystems). 190* Added custom log message handler function support so that libfuse 191 applications can direct messages to syslog(3) or other logging systems. 192 stderr remains the default. See `fuse_log.h` for the new API. 193 194libfuse 3.6.2 (2019-07-09) 195========================== 196 197* The init script is now installed to /etc/ rather than /usr/local/etc 198 by default. 199 200libfuse 3.6.1 (2019-06-13) 201========================== 202 203* Fixed version number (release 3.6.0 was shipped with a declared 204 version of 3.0.0). 205 206libfuse 3.6.0 (2019-06-13) 207========================== 208 209* Added a new example (passthrough_hp). The functionality is similar 210 to passthrough_ll, but the implementation focuses on performance and 211 correctness rather than simplicity. 212* Added support for fuse kernel feature `max_pages` which allows to increase 213 the maximum number of pages that can be used per request. This feature was 214 introduced in kernel 4.20. `max_pages` is set based on the value in 215 `max_write`. By default `max_write` will be 1MiB now for kernels that support 216 `max_pages`. If you want smaller buffers or writes you have to set 217 `max_write` manually. 218 219libfuse 3.5.0 (2019-04-16) 220========================== 221 222* Changed ioctl commands to "unsigned int" in order to support commands 223 which do not fit into a signed int. Commands issued by applications 224 are still truncated to 32 bits. 225* Added SMB2 to whitelist (so users can now mount FUSE filesystems 226 on mountpoints within SMB 2.0 filesystems). 227* Added a new `cache_readdir` flag to `fuse_file_info` to enable 228 caching of readdir results. Supported by kernels 4.20 and newer. 229* Add support and documentation for FUSE_CAP_NO_OPENDIR_SUPPORT. 230 231libfuse 3.4.2 (2019-03-09) 232========================== 233 234* Fixed a memory leak in `examples/passthrough_ll.c`. 235* Added OpenAFS to whitelist (so users can now mount FUSE filesystems 236 on mountpoints within OpenAFS filesystems). 237* Added HFS+ to whitelist (so users can now mount FUSE filesystems 238 on mountpoints within HFS+ filesystems). 239* Documentation improvements. 240 241libfuse 3.4.1 (2018-12-22) 242========================== 243 244* The `examples/passthrough_ll.c` example filesystem has been 245 significantly extended. 246* Support for `copy_file_range` has been added. 247* Build system updates for non-Linux systems. 248 249libfuse 3.4.0 250============= 251 252* Add `copy_file_range()` to support efficient copying of data from one file to 253 an other. 254 255libfuse 3.3.0 (2018-11-06) 256========================== 257 258* The `auto_unmount` mode now works correctly in combination with 259 autofs. 260 261* The FUSE_CAP_READDIRPLUS_AUTO capability is no longer enabled by 262 default unless the file system defines both a readdir() and a 263 readdirplus() handler. 264 265* The description of the FUSE_CAP_READDIRPLUS_AUTO flag has been 266 improved. 267 268* Allow open `/dev/fuse` file descriptors to be passed via mountpoints of the 269 special format `/dev/fd/%u`. This allows mounting to be handled by the parent 270 so the FUSE filesystem process can run fully unprivileged. 271 272* Add a `drop_privileges` option to mount.fuse3 which causes it to open 273 `/dev/fuse` and mount the file system itself, then run the FUSE file 274 filesystem fully unprivileged and unable to re-acquire privilege via setuid, 275 fscaps, etc. 276 277* Documented under which conditions the `fuse_lowlevel_notify_*` 278 functions may block. 279 280libfuse 3.2.6 (2018-08-31) 281========================== 282 283* The fuse_main() function now returns more fine-grained error codes. 284* FUSE filesystems may now be mounted on mountpoint within 285 bcachefs, aufs and FAT filesystems. 286* libfuse may now be used as a Meson subproject. 287* Fix a few low-impact memory leaks. 288* The `fuse.conf` file is no longer looked for in `/etc`, but in the 289 *sysconfdir* directory (which can be set with `meson configure`). By 290 default, the location is thus `/usr/local/etc/fuse.conf`. 291 292libfuse 3.2.5 (2018-07-24) 293========================== 294 295* SECURITY UPDATE: In previous versions of libfuse it was possible to 296 for unprivileged users to specify the `allow_other` option even when 297 this was forbidden in `/etc/fuse.conf`. The vulnerability is 298 present only on systems where SELinux is active (including in 299 permissive mode). 300* The fusermount binary has been hardened in several ways to reduce 301 potential attack surface. Most importantly, mountpoints and mount 302 options must now match a hard-coded whitelist. It is expected that 303 this whitelist covers all regular use-cases. 304* Added a test of `seekdir` to test_syscalls. 305* Fixed `readdir` bug when non-zero offsets are given to filler and the 306 filesystem client, after reading a whole directory, re-reads it from a 307 non-zero offset e. g. by calling `seekdir` followed by `readdir`. 308 309libfuse 3.2.4 (2018-07-11) 310========================== 311 312* Fixed `rename` deadlock on FreeBSD. 313 314libfuse 3.2.3 (2018-05-11) 315========================== 316 317* Fixed a number of compiler warnings. 318 319libfuse 3.2.2 (2018-03-31) 320========================== 321 322* Added example fuse.conf file. 323* Added "support" for -o nofail mount option (the option is accepted 324 and ignored). 325* Various small bugfixes. 326 327libfuse 3.2.1 (2017-11-14) 328========================== 329 330* Various small bugfixes. 331 332libfuse 3.2.0 (2017-09-12) 333========================== 334 335* Support for building with autotools has been dropped. 336 337* Added new `fuse_invalidate_path()` routine for cache invalidation 338 from the high-level FUSE API, along with an example and tests. 339 340* There's a new `printcap` example that can be used to determine the 341 capabilities of the running kernel. 342 343* `fuse_loop_mt()` now returns the minus the actual errno if there was 344 an error (instead of just -1). 345 346* `fuse_loop()` no longer returns a positive value if the filesystem 347 loop was terminated without errors or signals. 348 349* Improved documentation of `fuse_lowlevel_notify_*` functions. 350 351* `fuse_lowlevel_notify_inval_inode()` and 352 `fuse_lowlevel_notify_inval_entry()` now return -ENOSYS instead of 353 an undefined error if the function is not supported by the kernel. 354 355* Documented the special meaning of the *zero* offset for the 356 fuse_fill_dir_t function. 357 358* The `passthrough_fh` example now works under FreeBSD. 359 360* libfuse can now be build without libiconv. 361 362* Fixed support for `FUSE_CAP_POSIX_ACL`: setting this capability 363 flag had no effect in the previous versions of libfuse 3.x; 364 now ACLs should actually work. 365 366* Fixed a number of compilation problems under FreeBSD. 367 368* Fixed installation directory for udev rules. 369 370* Fixed compilation with LTO. 371 372libfuse 3.1.1 (2017-08-06) 373========================== 374 375* Documentation: clarified how filesystems are supposed to process 376 open() and create() flags (see include/fuse_lowlevel.h). 377 378* Fixed a compilation problem of the passthrough_ll example on 379 32 bit systems (wrong check and wrong error message). 380 381* pkg-config is now used to determine the proper directory for 382 udev rules. 383 384* Fixed a symbol versioning problem that resulted in very strange 385 failures (segfaults, unexpected behavior) in different situations. 386 387* Fixed a test failure when /tmp is on btrfs. 388 389* The maximum number of idle worker threads used by `fuse_loop_mt()` 390 is now configurable. 391 392* `fuse_loop_mt()` and `fuse_session_loop_mt()` now take a 393 `struct fuse_loop_config` parameter that supersedes the *clone_fd* 394 parameter. 395 396* Incorporated several patches from the FreeBSD port. libfuse should 397 now compile under FreeBSD without the need for patches. 398 399* The passthrough_ll example now supports writeback caching. 400 401libfuse 3.1.0 (2017-07-08) 402========================== 403 404* Added new `fuse_lib_help()` function. File-systems that previously 405 passed a ``--help`` option to `fuse_new()` must now process the 406 ``--help`` option internally and call `fuse_lib_help()` to print the 407 help for generic FUSE options. 408* Fixed description of the `fuse_conn_info->time_gran`. The default 409 value of zero actually corresponds to full nanosecond resolution, 410 not one second resolution. 411* The init script is now installed into the right location 412 (``$DESTDIR/etc/init.d`` rather than ``$prefix/$sysconfdir/init.d``) 413* The `example/passthrough_ll` filesystem now supports creating 414 and writing to files. 415* `fuse_main()` / `fuse_remove_signal_handlers()`: do not reset 416 `SIGPIPE` handler to `SIG_DFL` if it was not set by us. 417* Documented the `RENAME_EXCHANGE` and `RENAME_NOREPLACE` flags that 418 may be passed to the `rename` handler of both the high- and 419 low-level API. Filesystem authors are strongly encouraged to check 420 that these flags are handled correctly. 421 422libfuse 3.0.2 (2017-05-24) 423========================== 424 425* Option parsing for the high-level API now works correctly 426 (previously, default values would override specified values). 427* Tests should now build (and run) under FreeBSD. 428* Improved documentation of `struct fuse_context` 429* Internal: calculate request buffer size from page size and kernel 430 page limit instead of using hardcoded 128 kB limit. 431 432 433libfuse 3.0.1 (2017-04-10) 434========================== 435 436* Re-introduced *examples/null.c*. 437* Added experimental support for building with Meson. 438* Document that `-o auto_unmount` implies `-o nodev,nosuid`. 439* Document that the *use_ino* option of the high-level interface does 440 not affect the inode that libfuse and the kernel use internally. 441* Fixed test cases for passthrough* examples (they weren't actually 442 testing the examples). 443* Fixed several bugs in the passthrough* examples. 444 445libfuse 3.0.0 (2016-12-08) 446========================== 447 448* NOTE TO PACKAGERS: 449 450 libfuse 3 is designed to be co-installable with libfuse 2. However, 451 some files will be installed by both libfuse 2 and libfuse 3 452 (e.g. /etc/fuse.conf, the udev and init scripts, and the 453 mount.fuse(8) manpage). These files should be taken from 454 libfuse 3. The format/content is guaranteed to remain backwards 455 compatible with libfuse 2. 456 457 We recommend to ship libfuse2 and libfuse3 in three separate 458 packages: a libfuse-common package that contains files shared by 459 libfuse 2+3 (taken from the libfuse3 tarball), and libfuse2 and 460 libfuse3 packages that contain the shared library and helper 461 programs for the respective version. 462 463* Fixed test errors when running tests as root. 464 465* Made check for util-linux version more robust. 466 467* Added documentation for all fuse capability flags (`FUSE_CAP_*`) and 468 `struct fuse_conn_info` fields. 469 470* fuse_loop(), fuse_loop_mt(), fuse_session_loop() and 471 fuse_session_loop_mt() now return more detailed error codes instead 472 of just -1. See the documentation of fuse_session_loop() for details. 473 474* The FUSE main loop is now aborted if the file-system requests 475 capabilities that are not supported by the kernel. In this case, the 476 session loop is exited with a return code of ``-EPROTO``. 477 478* Most file-system capabilities that were opt-in in libfuse2 are now 479 enabled by default. Filesystem developers are encouraged to review 480 the documentation of the FUSE_CAP_* features to ensure that their 481 filesystem is compatible with the new semantics. As before, a 482 particular capability can still be disabled by unsetting the 483 corresponding bit of `fuse_conn_info.wants` in the init() handler. 484 485* Added FUSE_CAP_PARALLEL_DIROPS and FUSE_CAP_POSIX_ACL, 486 FUSE_HANDLE_KILLPRIV feature flags. 487 488* FUSE filesystems are now responsible for unsetting the setuid/setgid 489 flags when a file is written, truncated, or its owner 490 changed. Previously, this was handled by the kernel but subject to 491 race conditions. 492 493* The fusermount and mount.fuse binaries have been renamed to 494 fusermount3 and mount.fuse3 to allow co-installation of libfuse 2.x 495 and 3.x 496 497* Added a `max_read` field to `struct fuse_conn_info`. For the time 498 being, the maximum size of read requests has to be specified both 499 there *and* passed to fuse_session_new() using the ``-o 500 max_read=<n>`` mount option. At some point in the future, specifying 501 the mount option will no longer be necessary. 502 503* Documentation: clarified that the fuse_argv structure that is passed 504 to `fuse_new()` and `fuse_lowlevel_new()` must always contain at 505 least one element. 506 507* The high-level init() handler now receives an additional struct 508 fuse_config pointer that can be used to adjust high-level API 509 specific configuration options. 510 511* The `nopath_flag` field of struct fuse_operations has been 512 removed. Instead, a new `nullpath_ok` flag can now be set 513 in struct fuse_config. 514 515* File systems that use the low-level API and support lookup requests 516 for '.' and '..' should continue make sure to set the 517 FUSE_CAP_EXPORT_SUPPORT bit in fuse_conn_info->want. 518 519 (This has actually always been the case, but was not very obvious 520 from the documentation). 521 522* The help text generated by fuse_lowlevel_help(), fuse_new() (and 523 indirectly fuse_main()) no longer includes options that are unlikely 524 to be of interest to end-users. The full list of accepted options is 525 now included in the respective function's documentation (located in 526 the fuse.h/fuse_lowlevel.h and doc/html). 527 528* The ``-o nopath`` option has been dropped - it never actually did 529 anything (since it is unconditionally overwritten with the value of 530 the `nopath` flag in `struct fuse_operations`). 531 532* The ``-o large_read`` mount option has been dropped. Hopefully no 533 one uses a Linux 2.4 kernel anymore. 534 535* The `-o nonempty` mount point has been removed, mounting over 536 non-empty directories is now always allowed. This brings the 537 behavior of FUSE file systems in-line with the behavior of the 538 regular `mount` command. 539 540 File systems that do not want to allow mounting to non-empty 541 directories should perform this check themselves before handing 542 control to libfuse. 543 544* The chmod, chown, truncate, utimens and getattr handlers of the 545 high-level API now all receive an additional struct fuse_file_info 546 pointer (which, however, may be NULL even if the file is currently 547 open). 548 549 The fgetattr and ftruncate handlers have become obsolete and have 550 been removed. 551 552* The `fuse_session_new` function no longer accepts the ``-o 553 clone_fd`` option. Instead, this has become a parameter of the 554 `fuse_session_loop_mt` and `fuse_loop_mt` functions. 555 556* For low-level file systems that implement the `write_buf` handler, 557 the `splice_read` option is now enabled by default. As usual, this 558 can be changed in the file system's `init` handler. 559 560* The treatment of low-level options has been made more consistent: 561 562 Options that can be set in the init() handler (via the 563 fuse_conn_info parameter) can now be set only here, 564 i.e. fuse_session_new() no longer accepts arguments that change the 565 fuse_conn_info object before or after the call do init(). As a side 566 effect, this removes the ambiguity where some options can be 567 overwritten by init(), while others overwrite the choices made by 568 init(). 569 570 For file systems that wish to offer command line options for these 571 settings, the new fuse_parse_conn_info_opts() and 572 fuse_apply_conn_info_opts() functions are available. 573 574 Consequently, the fuse_lowlevel_help() method has been dropped. 575 576* The `async_read` field in `struct fuse_conn_info` has been 577 removed. To determine if the kernel supports asynchronous reads, 578 file systems should check the `FUSE_CAP_ASYNC_READ` bit of the 579 `capable` field. To enable/disable asynchronous reads, file systems 580 should set the flag in the `wanted` field. 581 582* The `fuse_parse_cmdline` function no longer prints out help when the 583 ``--verbose`` or ``--help`` flags are given. This needs to be done 584 by the file system (e.g. using the `fuse_cmdline_help()` and 585 `fuse_lowlevel_help()` functions). 586 587* Added ``example/cuse_client.c`` to test ``example/cuse.c``. 588 589* Removed ``example/null.c``. This has not been working for a while 590 for unknown reasons -- maybe because it tries to treat the 591 mountpoint as a file rather than a directory? 592 593* There are several new examples that demonstrate the use of 594 the ``fuse_lowlevel_notify_*`` functions: 595 596 - ``example/notify_store_retrieve.c`` 597 - ``example/notify_inval_inode.c`` 598 - ``example/notify_inval_entry.c`` 599 600* The ``-o big_writes`` mount option has been removed. It is now 601 always active. File systems that want to limit the size of write 602 requests should use the ``-o max_write=<N>`` option instead. 603 604* The `fuse_lowlevel_new` function has been renamed to 605 `fuse_session_new` and no longer interprets the --version or --help 606 options. To print help or version information, use the new 607 `fuse_lowlevel_help` and `fuse_lowlevel_version` functions. 608 609* The ``allow_other`` and ``allow_root`` mount options (accepted by 610 `fuse_session_new()`) may now be specified together. In this case, 611 ``allow_root`` takes precedence. 612 613* There are new `fuse_session_unmount` and `fuse_session_mount` 614 functions that should be used in the low-level API. The `fuse_mount` 615 and `fuse_unmount` functions should be used with the high-level API 616 only. 617 618* Neither `fuse_mount` nor `fuse_session_mount` take struct fuse_opts 619 parameters anymore. Mount options are parsed by `fuse_new` (for the 620 high-level API) and `fuse_session_new` (for the low-level API) 621 instead. To print help or version information, use the new 622 `fuse_mount_help` and `fuse_mount_version` functions. 623 624* The ``fuse_lowlevel_notify_*`` functions now all take a `struct 625 fuse_session` parameter instead of a `struct fuse_chan`. 626 627* The channel interface (``fuse_chan_*`` functions) has been made 628 private. As a result, the typical initialization sequence of a 629 low-level file system has changed from :: 630 631 ch = fuse_mount(mountpoint, &args); 632 se = fuse_lowlevel_new(&args, &lo_oper, sizeof(lo_oper), &lo); 633 fuse_set_signal_handlers(se); 634 fuse_session_add_chan(se, ch); 635 fuse_daemonize(fg); 636 if (mt) 637 fuse_session_loop_mt(se); 638 else 639 fuse_session_loop(se); 640 fuse_remove_signal_handlers(se); 641 fuse_session_remove_chan(ch); 642 fuse_session_destroy(se); 643 fuse_unmount(mountpoint, ch); 644 645 to :: 646 647 se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL); 648 fuse_set_signal_handlers(se); 649 fuse_session_mount(se, mountpoint); 650 fuse_daemonize(fg); 651 if (mt) 652 fuse_session_loop_mt(se); 653 else 654 fuse_session_loop(se); 655 fuse_remove_signal_handlers(se); 656 fuse_session_unmount(se); 657 fuse_lowlevel_destroy(se); 658 659 The typical high-level setup has changed from :: 660 661 ch = fuse_mount(*mountpoint, &args); 662 fuse = fuse_new(ch, &args, op, op_size, user_data); 663 se = fuse_get_session(fuse); 664 fuse_set_signal_handlers(se); 665 fuse_daemonize(fg); 666 if (mt) 667 fuse_loop_mt(fuse); 668 else 669 fuse_loop(fuse); 670 fuse_remove_signal_handlers(se); 671 fuse_unmount(mountpoint, ch); 672 fuse_destroy(fuse); 673 674 to :: 675 676 fuse = fuse_new(&args, op, op_size, user_data); 677 se = fuse_get_session(fuse); 678 fuse_set_signal_handlers(se); 679 fuse_mount(fuse, mountpoint); 680 fuse_daemonize(fg); 681 if (mt) 682 fuse_loop_mt(fuse); 683 else 684 fuse_loop(fuse); 685 fuse_remove_signal_handlers(se); 686 fuse_unmount(fuse); 687 fuse_destroy(fuse); 688 689 File systems that use `fuse_main` are not affected by this change. 690 691 For integration with custom event loops, the new `fuse_session_fd` 692 function provides the file descriptor that's used for communication 693 with the kernel. 694 695* Added *clone_fd* option. This creates a separate device file 696 descriptor for each processing thread, which might improve 697 performance. 698 699* Added *writeback_cache* option. With kernel 3.14 and newer this 700 enables write-back caching which can significantly improve 701 performance. 702 703* Added *async_dio* option. With kernel 3.13 and newer, this allows 704 direct I/O to be done asynchronously. 705 706* The (high- and low-level) `rename` handlers now takes a *flags* 707 parameter (with values corresponding to the *renameat2* system call 708 introduced in Linux 3.15). 709 710* The "ulockmgr_server" has been dropped. 711 712* There is a new (low-level) `readdirplus` handler, with a 713 corresponding example in ``examples/fuse_lo-plus.c`` and a new 714 `fuse_add_direntry_plus` API function. 715 716* The (high-level) `readdir` handler now takes a *flags* argument. 717 718* The (high-level) `filler` function passed to `readdir` now takes an 719 additional *flags* argument. 720 721* The (high-level) `getdir` handler has been dropped. 722 723* The *flag_nullpath_ok* and *flag_utime_omit_ok* flags have been 724 dropped. 725 726* The (high-level) *utime* handler has been dropped. 727 728* The `fuse_invalidate` function has been removed. 729 730* The `fuse_is_lib_option` function has been removed. 731 732* The *fh_old* member of `struct fuse_file_info` has been dropped. 733 734* The type of the *writepage* member of `struct fuse_file_info` was 735 changed from *int* to *unsigned int*. 736 737* The `struct fuse_file_info` gained a new *poll_events* member. 738 739* There is a new `fuse_pkgversion` function. 740 741* The *fuse_off_t* and *fuse_ino_t* changed from *unsigned long* to 742 *uint64_t*, i.e. they are now 64 bits also on 32-bit systems. 743 744* The type of the *generation* member of `struct fuse_entry_param*` 745 changed from *unsigned* to *uint64_t*. 746 747* The (low-level) `setattr` handler gained a *FUSE_SET_ATTR_CTIME* bit 748 *for its *to_set* parameter. 749 750* The `struct fuse_session_ops` data structure has been dropped. 751 752* The documentation has been clarified and improved in many places. 753 754 755FUSE 2.9.7 (2016-06-20) 756======================= 757 758* Added SELinux support. 759* Fixed race-condition when session is terminated right after starting 760 a FUSE file system. 761 762FUSE 2.9.6 (2016-04-23) 763======================= 764 765* Tarball now includes documentation. 766* Shared-object version has now been bumped correctly. 767 768FUSE 2.9.5 (2016-01-14) 769======================= 770 771* New maintainer: Nikolaus Rath <[email protected]>. Many thanks to 772 Miklos Szeredi <[email protected]> for bringing FUSE to where it is 773 now! 774 775* fix warning in mount.c:receive_fd(). Reported by Albert Berger 776 777* fix possible memory leak. Reported by Jose R. Guzman 778 779FUSE 2.9.4 (2015-05-22) 780======================= 781 782* fix exec environment for mount and umount. Found by Tavis Ormandy 783 (CVE-2015-3202). 784 785* fix fuse_remove_signal_handlers() to properly restore the default 786 signal handler. Reported by: Chris Johnson 787 788* highlevel API: fix directory file handle passed to ioctl() method. 789 Reported by Eric Biggers 790 791* libfuse: document deadlock avoidance for fuse_notify_inval_entry() 792 and fuse_notify_delete() 793 794* fusermount, libfuse: send value as unsigned in "user_id=" and 795 "group_id=" options. Uids/gids larger than 2147483647 would result 796 in EINVAL when mounting the filesystem. This also needs a fix in 797 the kernel. 798 799* Initialize stat buffer passed to ->getattr() and ->fgetattr() to 800 zero in all cases. Reported by Daniel Iwan 801 802* libfuse: Add missing includes. This allows compiling fuse with 803 musl. Patch by Daniel Thau 804 805 806Older Versions (before 2013-01-01) 807================================== 808 809Please see Git history, e.g. at 810https://github.com/libfuse/libfuse/blob/fuse_2_9_3/ChangeLog. 811