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