xref: /aosp_15_r20/external/libfuse/ChangeLog.rst (revision 9e5649576b786774a32d7b0252c9cd8c6538fa49)
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