[ANNOUNCE] libfuse 3.0.0 has been released

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[ANNOUNCE] libfuse 3.0.0 has been released

Nikolaus Rath
Dear all,

I am very pleased to announce the release of libfuse 3.0.0.

As you may have already heard, FUSE 3 adds several exiting new features
and gets rid of several historical bugs that could not be fixed without
breaking backwards compatibility.

= Note to packagers =

libfuse 3 is designed to be co-installable with libfuse 2. However, some
files will be installed by both libfuse 2 and libfuse 3
(e.g. /etc/fuse.conf, the udev and init scripts, and the mount.fuse(8)
manpage). These files should be taken from libfuse 3. The format/content
is guaranteed to remain backwards compatible with libfuse 2.

We recommend to ship libfuse2 and libfuse3 in three separate packages: a
libfuse-common package that contains files shared by libfuse 2+3 (taken
From the libfuse3 tarball), and libfuse2 and libfuse3 packages that
contain the shared library and helper programs for the respective
version.

= Changes =

This release is identical to the last release candidate. The changes
since libfuse 2.9.x are:

* Fixed test errors when running tests as root.

* Made check for util-linux version more robust.

* Added documentation for all fuse capability flags (`FUSE_CAP_*`) and
  `struct fuse_conn_info` fields.

* fuse_loop(), fuse_loop_mt(), fuse_session_loop() and
  fuse_session_loop_mt() now return more detailed error codes instead
  of just -1. See the documentation of fuse_session_loop() for details.

* The FUSE main loop is now aborted if the file-system requests
  capabilities that are not supported by the kernel. In this case, the
  session loop is exited with a return code of ``-EPROTO``.

* Most file-system capabilities that were opt-in in libfuse2 are now
  enabled by default. Filesystem developers are encouraged to review
  the documentation of the FUSE_CAP_* features to ensure that their
  filesystem is compatible with the new semantics. As before, a
  particular capability can still be disabled by unsetting the
  corresponding bit of `fuse_conn_info.wants` in the init() handler.

* Added FUSE_CAP_PARALLEL_DIROPS and FUSE_CAP_POSIX_ACL,
  FUSE_HANDLE_KILLPRIV feature flags.

* FUSE filesystems are now responsible for unsetting the setuid/setgid
  flags when a file is written, truncated, or its owner
  changed. Previously, this was handled by the kernel but subject to
  race conditions.

* The fusermount and mount.fuse binaries have been renamed to
  fusermount3 and mount.fuse3 to allow co-installation of libfuse 2.x
  and 3.x

* Added a `max_read` field to `struct fuse_conn_info`. For the time
  being, the maximum size of read requests has to be specified both
  there *and* passed to fuse_session_new() using the ``-o
  max_read=<n>`` mount option. At some point in the future, specifying
  the mount option will no longer be necessary.

* Documentation: clarified that the fuse_argv structure that is passed
  to `fuse_new()` and `fuse_lowlevel_new()` must always contain at
  least one element.

* The high-level init() handler now receives an additional struct
  fuse_config pointer that can be used to adjust high-level API
  specific configuration options.

* The `nopath_flag` field of struct fuse_operations has been
  removed. Instead, a new `nullpath_ok` flag can now be set
  in struct fuse_config.

* File systems that use the low-level API and support lookup requests
  for '.' and '..' should continue make sure to set the
  FUSE_CAP_EXPORT_SUPPORT bit in fuse_conn_info->want.

  (This has actually always been the case, but was not very obvious
  from the documentation).

* The help text generated by fuse_lowlevel_help(), fuse_new() (and
  indirectly fuse_main()) no longer includes options that are unlikely
  to be of interest to end-users. The full list of accepted options is
  now included in the respective function's documentation (located in
  the fuse.h/fuse_lowlevel.h and doc/html).

* The ``-o nopath`` option has been dropped - it never actually did
  anything (since it is unconditionally overwritten with the value of
  the `nopath` flag in `struct fuse_operations).

* The ``-o large_read`` mount option has been dropped. Hopefully no
  one uses a Linux 2.4 kernel anymore.

* The `-o nonempty` mount point has been removed, mounting over
  non-empty directories is now always allowed. This brings the
  behavior of FUSE file systems in-line with the behavior of the
  regular `mount` command.

  File systems that do not want to allow mounting to non-empty
  directories should perform this check themselves before handing
  control to libfuse.

* The chmod, chown, truncate, utimens and getattr handlers of the
  high-level API now all receive an additional struct fuse_file_info
  pointer (which, however, may be NULL even if the file is currently
  open).

  The fgetattr and ftruncate handlers have become obsolete and have
  been removed.

* The `fuse_session_new` function no longer accepts the ``-o
  clone_fd`` option. Instead, this has become a parameter of the
  `fuse_session_loop_mt` and ``fuse_loop_mt` functions.

* For low-level file systems that implement the `write_buf` handler,
  the `splice_read` option is now enabled by default. As usual, this
  can be changed in the file system's `init` handler.

* The treatment of low-level options has been made more consistent:

  Options that can be set in the init() handler (via the
  fuse_conn_info parameter) can now be set only here,
  i.e. fuse_session_new() no longer accepts arguments that change the
  fuse_conn_info object before or after the call do init(). As a side
  effect, this removes the ambiguity where some options can be
  overwritten by init(), while others overwrite the choices made by
  init().

  For file systems that wish to offer command line options for these
  settings, the new fuse_parse_conn_info_opts() and
  fuse_apply_conn_info_opts() functions are available.

  Consequently, the fuse_lowlevel_help() method has been dropped.

* The `async_read` field in `struct fuse_conn_info` has been
  removed. To determine if the kernel supports asynchronous reads,
  file systems should check the `FUSE_CAP_ASYNC_READ` bit of the
  `capable` field. To enable/disable asynchronous reads, file systems
  should set the flag in the `wanted` field.

* The `fuse_parse_cmdline` function no longer prints out help when the
  ``--verbose`` or ``--help`` flags are given. This needs to be done
  by the file system (e.g. using the `fuse_cmdline_help()` and
  `fuse_lowlevel_help()` functions).

* Added ``example/cuse_client.c`` to test ``example/cuse.c``.

* Removed ``example/null.c``. This has not been working for a while
  for unknown reasons -- maybe because it tries to treat the
  mountpoint as a file rather than a directory?

* There are several new examples that demonstrate the use of
  the ``fuse_lowlevel_notify_*`` functions:

  - ``example/notify_store_retrieve.c``
  - ``example/notify_inval_inode.c``
  - ``example/notify_inval_entry.c``

* The ``-o big_writes`` mount option has been removed. It is now
  always active. File systems that want to limit the size of write
  requests should use the ``-o max_write=<N>`` option instead.

* The `fuse_lowlevel_new` function has been renamed to
  `fuse_session_new` and no longer interprets the --version or --help
  options. To print help or version information, use the new
  `fuse_lowlevel_help` and `fuse_lowlevel_version` functions.

* The ``allow_other`` and ``allow_root`` mount options (accepted by
  `fuse_session_new()`) may now be specified together. In this case,
  ``allow_root`` takes precedence.

* There are new `fuse_session_unmount` and `fuse_session_mount`
  functions that should be used in the low-level API. The `fuse_mount`
  and `fuse_unmount` functions should be used with the high-level API
  only.

* Neither `fuse_mount` nor `fuse_session_mount` take struct fuse_opts
  parameters anymore. Mount options are parsed by `fuse_new` (for the
  high-level API) and `fuse_session_new` (for the low-level API)
  instead. To print help or version information, use the new
  `fuse_mount_help` and `fuse_mount_version` functions.

* The ``fuse_lowlevel_notify_*`` functions now all take a `struct
  fuse_session` parameter instead of a `struct fuse_chan`.

* The channel interface (``fuse_chan_*`` functions) has been made
  private. As a result, the typical initialization sequence of a
  low-level file system has changed from ::

        ch = fuse_mount(mountpoint, &args);
        se = fuse_lowlevel_new(&args, &lo_oper, sizeof(lo_oper), &lo);
        fuse_set_signal_handlers(se);
        fuse_session_add_chan(se, ch);
        fuse_daemonize(fg);
        if (mt)
            fuse_session_loop_mt(se);
        else
            fuse_session_loop(se);
        fuse_remove_signal_handlers(se);
        fuse_session_remove_chan(ch);
        fuse_session_destroy(se);
        fuse_unmount(mountpoint, ch);

  to ::

        se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL);
        fuse_set_signal_handlers(se);
        fuse_session_mount(se, mountpoint);
        fuse_daemonize(fg);
        if (mt)
            fuse_session_loop_mt(se);
        else
            fuse_session_loop(se);
        fuse_remove_signal_handlers(se);
        fuse_session_unmount(se);
        fuse_lowlevel_destroy(se);

  The typical high-level setup has changed from ::

        ch = fuse_mount(*mountpoint, &args);
        fuse = fuse_new(ch, &args, op, op_size, user_data);
        se = fuse_get_session(fuse);
        fuse_set_signal_handlers(se);
        fuse_daemonize(fg);
        if (mt)
            fuse_loop_mt(fuse);
        else
            fuse_loop(fuse);
        fuse_remove_signal_handlers(se);
        fuse_unmount(mountpoint, ch);
        fuse_destroy(fuse);

  to ::

        fuse = fuse_new(&args, op, op_size, user_data);
        se = fuse_get_session(fuse);
        fuse_set_signal_handlers(se);
        fuse_mount(se, mountpoint);
        fuse_daemonize(fg);
         if (mt)
            fuse_loop_mt(fuse);
        else
            fuse_loop(fuse);
        fuse_remove_signal_handlers(se);
        fuse_unmount(se);
        fuse_destroy(fuse);

  File systems that use `fuse_main` are not affected by this change.

  For integration with custom event loops, the new `fuse_session_fd`
  function provides the file descriptor that's used for communication
  with the kernel.

* Added *clone_fd* option.  This creates a separate device file
  descriptor for each processing thread, which might improve
  performance.

* Added *writeback_cache* option. With kernel 3.14 and newer this
  enables write-back caching which can significantly improve
  performance.

* Added *async_dio* option. With kernel 3.13 and newer, this allows
  direct I/O to be done asynchronously.

* The (high- and low-level) `rename` handlers now takes a *flags*
  parameter (with values corresponding to the *renameat2* system call
  introduced in Linux 3.15).

* The "ulockmgr_server" has been dropped.

* There is a new (low-level) `readdirplus` handler, with a
  corresponding example in ``examples/fuse_lo-plus.c`` and a new
  `fuse_add_direntry_plus` API function.

* The (high-level) `readdir` handler now takes a *flags* argument.

* The (high-level) `filler` function passed to `readdir` now takes an
  additional *flags* argument.

* The (high-level) `getdir` handler has been dropped.

* The *flag_nullpath_ok* and *flag_utime_omit_ok* flags have been
  dropped.

* The (high-level) *utime* handler has been dropped.

* The `fuse_invalidate` function has been removed.

* The `fuse_is_lib_option` function has been removed.

* The *fh_old* member of `struct fuse_file_info` has been dropped.

* The type of the *writepage* member of `struct fuse_file_info` was
  changed from *int* to *unsigned int*.

* The `struct fuse_file_info` gained a new *poll_events* member.

* There is a new `fuse_pkgversion` function.

* The *fuse_off_t* and *fuse_ino_t* changed from *unsigned long* to
  *uint64_t*, i.e. they are now 64 bits also on 32-bit systems.

* The type of the *generation* member of `struct fuse_entry_param*
  changed from *unsigned* to *uint64_t*.

* The (low-level) `setattr` handler gained a *FUSE_SET_ATTR_CTIME* bit
  *for its *to_set* parameter.

* The `struct fuse_session_ops` data structure has been dropped.

* The documentation has been clarified and improved in many places.



Please report any issues on this mailing list or the GitHub issue
tracker. The source code can be downloaded at
https://github.com/libfuse/libfuse/releases/tag/fuse-3.0.0rc3

Best,
-Nikolaus

--
GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

             »Time flies like an arrow, fruit flies like a Banana.«

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/xeonphi
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel

signature.asc (1016 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [ANNOUNCE] libfuse 3.0.0 has been released

Peter Amstutz
Congratulations, and thank you for all your hard work!

Is there a version of Python llfuse based on libfuse3?

Thanks,
Peter


On Fri, Dec 9, 2016 at 12:41 PM, Nikolaus Rath <[hidden email]> wrote:

> Dear all,
>
> I am very pleased to announce the release of libfuse 3.0.0.
>
> As you may have already heard, FUSE 3 adds several exiting new features
> and gets rid of several historical bugs that could not be fixed without
> breaking backwards compatibility.
>
> = Note to packagers =
>
> libfuse 3 is designed to be co-installable with libfuse 2. However, some
> files will be installed by both libfuse 2 and libfuse 3
> (e.g. /etc/fuse.conf, the udev and init scripts, and the mount.fuse(8)
> manpage). These files should be taken from libfuse 3. The format/content
> is guaranteed to remain backwards compatible with libfuse 2.
>
> We recommend to ship libfuse2 and libfuse3 in three separate packages: a
> libfuse-common package that contains files shared by libfuse 2+3 (taken
> From the libfuse3 tarball), and libfuse2 and libfuse3 packages that
> contain the shared library and helper programs for the respective
> version.
>
> = Changes =
>
> This release is identical to the last release candidate. The changes
> since libfuse 2.9.x are:
>
> * Fixed test errors when running tests as root.
>
> * Made check for util-linux version more robust.
>
> * Added documentation for all fuse capability flags (`FUSE_CAP_*`) and
>   `struct fuse_conn_info` fields.
>
> * fuse_loop(), fuse_loop_mt(), fuse_session_loop() and
>   fuse_session_loop_mt() now return more detailed error codes instead
>   of just -1. See the documentation of fuse_session_loop() for details.
>
> * The FUSE main loop is now aborted if the file-system requests
>   capabilities that are not supported by the kernel. In this case, the
>   session loop is exited with a return code of ``-EPROTO``.
>
> * Most file-system capabilities that were opt-in in libfuse2 are now
>   enabled by default. Filesystem developers are encouraged to review
>   the documentation of the FUSE_CAP_* features to ensure that their
>   filesystem is compatible with the new semantics. As before, a
>   particular capability can still be disabled by unsetting the
>   corresponding bit of `fuse_conn_info.wants` in the init() handler.
>
> * Added FUSE_CAP_PARALLEL_DIROPS and FUSE_CAP_POSIX_ACL,
>   FUSE_HANDLE_KILLPRIV feature flags.
>
> * FUSE filesystems are now responsible for unsetting the setuid/setgid
>   flags when a file is written, truncated, or its owner
>   changed. Previously, this was handled by the kernel but subject to
>   race conditions.
>
> * The fusermount and mount.fuse binaries have been renamed to
>   fusermount3 and mount.fuse3 to allow co-installation of libfuse 2.x
>   and 3.x
>
> * Added a `max_read` field to `struct fuse_conn_info`. For the time
>   being, the maximum size of read requests has to be specified both
>   there *and* passed to fuse_session_new() using the ``-o
>   max_read=<n>`` mount option. At some point in the future, specifying
>   the mount option will no longer be necessary.
>
> * Documentation: clarified that the fuse_argv structure that is passed
>   to `fuse_new()` and `fuse_lowlevel_new()` must always contain at
>   least one element.
>
> * The high-level init() handler now receives an additional struct
>   fuse_config pointer that can be used to adjust high-level API
>   specific configuration options.
>
> * The `nopath_flag` field of struct fuse_operations has been
>   removed. Instead, a new `nullpath_ok` flag can now be set
>   in struct fuse_config.
>
> * File systems that use the low-level API and support lookup requests
>   for '.' and '..' should continue make sure to set the
>   FUSE_CAP_EXPORT_SUPPORT bit in fuse_conn_info->want.
>
>   (This has actually always been the case, but was not very obvious
>   from the documentation).
>
> * The help text generated by fuse_lowlevel_help(), fuse_new() (and
>   indirectly fuse_main()) no longer includes options that are unlikely
>   to be of interest to end-users. The full list of accepted options is
>   now included in the respective function's documentation (located in
>   the fuse.h/fuse_lowlevel.h and doc/html).
>
> * The ``-o nopath`` option has been dropped - it never actually did
>   anything (since it is unconditionally overwritten with the value of
>   the `nopath` flag in `struct fuse_operations).
>
> * The ``-o large_read`` mount option has been dropped. Hopefully no
>   one uses a Linux 2.4 kernel anymore.
>
> * The `-o nonempty` mount point has been removed, mounting over
>   non-empty directories is now always allowed. This brings the
>   behavior of FUSE file systems in-line with the behavior of the
>   regular `mount` command.
>
>   File systems that do not want to allow mounting to non-empty
>   directories should perform this check themselves before handing
>   control to libfuse.
>
> * The chmod, chown, truncate, utimens and getattr handlers of the
>   high-level API now all receive an additional struct fuse_file_info
>   pointer (which, however, may be NULL even if the file is currently
>   open).
>
>   The fgetattr and ftruncate handlers have become obsolete and have
>   been removed.
>
> * The `fuse_session_new` function no longer accepts the ``-o
>   clone_fd`` option. Instead, this has become a parameter of the
>   `fuse_session_loop_mt` and ``fuse_loop_mt` functions.
>
> * For low-level file systems that implement the `write_buf` handler,
>   the `splice_read` option is now enabled by default. As usual, this
>   can be changed in the file system's `init` handler.
>
> * The treatment of low-level options has been made more consistent:
>
>   Options that can be set in the init() handler (via the
>   fuse_conn_info parameter) can now be set only here,
>   i.e. fuse_session_new() no longer accepts arguments that change the
>   fuse_conn_info object before or after the call do init(). As a side
>   effect, this removes the ambiguity where some options can be
>   overwritten by init(), while others overwrite the choices made by
>   init().
>
>   For file systems that wish to offer command line options for these
>   settings, the new fuse_parse_conn_info_opts() and
>   fuse_apply_conn_info_opts() functions are available.
>
>   Consequently, the fuse_lowlevel_help() method has been dropped.
>
> * The `async_read` field in `struct fuse_conn_info` has been
>   removed. To determine if the kernel supports asynchronous reads,
>   file systems should check the `FUSE_CAP_ASYNC_READ` bit of the
>   `capable` field. To enable/disable asynchronous reads, file systems
>   should set the flag in the `wanted` field.
>
> * The `fuse_parse_cmdline` function no longer prints out help when the
>   ``--verbose`` or ``--help`` flags are given. This needs to be done
>   by the file system (e.g. using the `fuse_cmdline_help()` and
>   `fuse_lowlevel_help()` functions).
>
> * Added ``example/cuse_client.c`` to test ``example/cuse.c``.
>
> * Removed ``example/null.c``. This has not been working for a while
>   for unknown reasons -- maybe because it tries to treat the
>   mountpoint as a file rather than a directory?
>
> * There are several new examples that demonstrate the use of
>   the ``fuse_lowlevel_notify_*`` functions:
>
>   - ``example/notify_store_retrieve.c``
>   - ``example/notify_inval_inode.c``
>   - ``example/notify_inval_entry.c``
>
> * The ``-o big_writes`` mount option has been removed. It is now
>   always active. File systems that want to limit the size of write
>   requests should use the ``-o max_write=<N>`` option instead.
>
> * The `fuse_lowlevel_new` function has been renamed to
>   `fuse_session_new` and no longer interprets the --version or --help
>   options. To print help or version information, use the new
>   `fuse_lowlevel_help` and `fuse_lowlevel_version` functions.
>
> * The ``allow_other`` and ``allow_root`` mount options (accepted by
>   `fuse_session_new()`) may now be specified together. In this case,
>   ``allow_root`` takes precedence.
>
> * There are new `fuse_session_unmount` and `fuse_session_mount`
>   functions that should be used in the low-level API. The `fuse_mount`
>   and `fuse_unmount` functions should be used with the high-level API
>   only.
>
> * Neither `fuse_mount` nor `fuse_session_mount` take struct fuse_opts
>   parameters anymore. Mount options are parsed by `fuse_new` (for the
>   high-level API) and `fuse_session_new` (for the low-level API)
>   instead. To print help or version information, use the new
>   `fuse_mount_help` and `fuse_mount_version` functions.
>
> * The ``fuse_lowlevel_notify_*`` functions now all take a `struct
>   fuse_session` parameter instead of a `struct fuse_chan`.
>
> * The channel interface (``fuse_chan_*`` functions) has been made
>   private. As a result, the typical initialization sequence of a
>   low-level file system has changed from ::
>
>         ch = fuse_mount(mountpoint, &args);
>         se = fuse_lowlevel_new(&args, &lo_oper, sizeof(lo_oper), &lo);
>         fuse_set_signal_handlers(se);
>         fuse_session_add_chan(se, ch);
>         fuse_daemonize(fg);
>         if (mt)
>             fuse_session_loop_mt(se);
>         else
>             fuse_session_loop(se);
>         fuse_remove_signal_handlers(se);
>         fuse_session_remove_chan(ch);
>         fuse_session_destroy(se);
>         fuse_unmount(mountpoint, ch);
>
>   to ::
>
>         se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL);
>         fuse_set_signal_handlers(se);
>         fuse_session_mount(se, mountpoint);
>         fuse_daemonize(fg);
>         if (mt)
>             fuse_session_loop_mt(se);
>         else
>             fuse_session_loop(se);
>         fuse_remove_signal_handlers(se);
>         fuse_session_unmount(se);
>         fuse_lowlevel_destroy(se);
>
>   The typical high-level setup has changed from ::
>
>         ch = fuse_mount(*mountpoint, &args);
>         fuse = fuse_new(ch, &args, op, op_size, user_data);
>         se = fuse_get_session(fuse);
>         fuse_set_signal_handlers(se);
>         fuse_daemonize(fg);
>         if (mt)
>             fuse_loop_mt(fuse);
>         else
>             fuse_loop(fuse);
>         fuse_remove_signal_handlers(se);
>         fuse_unmount(mountpoint, ch);
>         fuse_destroy(fuse);
>
>   to ::
>
>         fuse = fuse_new(&args, op, op_size, user_data);
>         se = fuse_get_session(fuse);
>         fuse_set_signal_handlers(se);
>         fuse_mount(se, mountpoint);
>         fuse_daemonize(fg);
>          if (mt)
>             fuse_loop_mt(fuse);
>         else
>             fuse_loop(fuse);
>         fuse_remove_signal_handlers(se);
>         fuse_unmount(se);
>         fuse_destroy(fuse);
>
>   File systems that use `fuse_main` are not affected by this change.
>
>   For integration with custom event loops, the new `fuse_session_fd`
>   function provides the file descriptor that's used for communication
>   with the kernel.
>
> * Added *clone_fd* option.  This creates a separate device file
>   descriptor for each processing thread, which might improve
>   performance.
>
> * Added *writeback_cache* option. With kernel 3.14 and newer this
>   enables write-back caching which can significantly improve
>   performance.
>
> * Added *async_dio* option. With kernel 3.13 and newer, this allows
>   direct I/O to be done asynchronously.
>
> * The (high- and low-level) `rename` handlers now takes a *flags*
>   parameter (with values corresponding to the *renameat2* system call
>   introduced in Linux 3.15).
>
> * The "ulockmgr_server" has been dropped.
>
> * There is a new (low-level) `readdirplus` handler, with a
>   corresponding example in ``examples/fuse_lo-plus.c`` and a new
>   `fuse_add_direntry_plus` API function.
>
> * The (high-level) `readdir` handler now takes a *flags* argument.
>
> * The (high-level) `filler` function passed to `readdir` now takes an
>   additional *flags* argument.
>
> * The (high-level) `getdir` handler has been dropped.
>
> * The *flag_nullpath_ok* and *flag_utime_omit_ok* flags have been
>   dropped.
>
> * The (high-level) *utime* handler has been dropped.
>
> * The `fuse_invalidate` function has been removed.
>
> * The `fuse_is_lib_option` function has been removed.
>
> * The *fh_old* member of `struct fuse_file_info` has been dropped.
>
> * The type of the *writepage* member of `struct fuse_file_info` was
>   changed from *int* to *unsigned int*.
>
> * The `struct fuse_file_info` gained a new *poll_events* member.
>
> * There is a new `fuse_pkgversion` function.
>
> * The *fuse_off_t* and *fuse_ino_t* changed from *unsigned long* to
>   *uint64_t*, i.e. they are now 64 bits also on 32-bit systems.
>
> * The type of the *generation* member of `struct fuse_entry_param*
>   changed from *unsigned* to *uint64_t*.
>
> * The (low-level) `setattr` handler gained a *FUSE_SET_ATTR_CTIME* bit
>   *for its *to_set* parameter.
>
> * The `struct fuse_session_ops` data structure has been dropped.
>
> * The documentation has been clarified and improved in many places.
>
>
>
> Please report any issues on this mailing list or the GitHub issue
> tracker. The source code can be downloaded at
> https://github.com/libfuse/libfuse/releases/tag/fuse-3.0.0rc3
>
> Best,
> -Nikolaus
>
> --
> GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
> Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F
>
>              »Time flies like an arrow, fruit flies like a Banana.«
>
> ------------------------------------------------------------------------------
> Developer Access Program for Intel Xeon Phi Processors
> Access to Intel Xeon Phi processor-based developer platforms.
> With one year of Intel Parallel Studio XE.
> Training and support from Colfax.
> Order your platform today.http://sdm.link/xeonphi
> --
> fuse-devel mailing list
> To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
>

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/xeonphi
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
Reply | Threaded
Open this post in threaded view
|

Re: [ANNOUNCE] libfuse 3.0.0 has been released

Enke Chen
In reply to this post by Nikolaus Rath
Hi, Nikolaus:

Congratulations, and thanks a lot for the hard work to make this happen!

-- Enke

On 12/9/16 9:41 AM, Nikolaus Rath wrote:

> Dear all,
>
> I am very pleased to announce the release of libfuse 3.0.0.
>
> As you may have already heard, FUSE 3 adds several exiting new features
> and gets rid of several historical bugs that could not be fixed without
> breaking backwards compatibility.
>
> = Note to packagers =
>
> libfuse 3 is designed to be co-installable with libfuse 2. However, some
> files will be installed by both libfuse 2 and libfuse 3
> (e.g. /etc/fuse.conf, the udev and init scripts, and the mount.fuse(8)
> manpage). These files should be taken from libfuse 3. The format/content
> is guaranteed to remain backwards compatible with libfuse 2.
>
> We recommend to ship libfuse2 and libfuse3 in three separate packages: a
> libfuse-common package that contains files shared by libfuse 2+3 (taken
> From the libfuse3 tarball), and libfuse2 and libfuse3 packages that
> contain the shared library and helper programs for the respective
> version.
>
> = Changes =
>
> This release is identical to the last release candidate. The changes
> since libfuse 2.9.x are:
>
> * Fixed test errors when running tests as root.
>
> * Made check for util-linux version more robust.
>
> * Added documentation for all fuse capability flags (`FUSE_CAP_*`) and
>   `struct fuse_conn_info` fields.
>
> * fuse_loop(), fuse_loop_mt(), fuse_session_loop() and
>   fuse_session_loop_mt() now return more detailed error codes instead
>   of just -1. See the documentation of fuse_session_loop() for details.
>
> * The FUSE main loop is now aborted if the file-system requests
>   capabilities that are not supported by the kernel. In this case, the
>   session loop is exited with a return code of ``-EPROTO``.
>
> * Most file-system capabilities that were opt-in in libfuse2 are now
>   enabled by default. Filesystem developers are encouraged to review
>   the documentation of the FUSE_CAP_* features to ensure that their
>   filesystem is compatible with the new semantics. As before, a
>   particular capability can still be disabled by unsetting the
>   corresponding bit of `fuse_conn_info.wants` in the init() handler.
>
> * Added FUSE_CAP_PARALLEL_DIROPS and FUSE_CAP_POSIX_ACL,
>   FUSE_HANDLE_KILLPRIV feature flags.
>
> * FUSE filesystems are now responsible for unsetting the setuid/setgid
>   flags when a file is written, truncated, or its owner
>   changed. Previously, this was handled by the kernel but subject to
>   race conditions.
>
> * The fusermount and mount.fuse binaries have been renamed to
>   fusermount3 and mount.fuse3 to allow co-installation of libfuse 2.x
>   and 3.x
>
> * Added a `max_read` field to `struct fuse_conn_info`. For the time
>   being, the maximum size of read requests has to be specified both
>   there *and* passed to fuse_session_new() using the ``-o
>   max_read=<n>`` mount option. At some point in the future, specifying
>   the mount option will no longer be necessary.
>
> * Documentation: clarified that the fuse_argv structure that is passed
>   to `fuse_new()` and `fuse_lowlevel_new()` must always contain at
>   least one element.
>
> * The high-level init() handler now receives an additional struct
>   fuse_config pointer that can be used to adjust high-level API
>   specific configuration options.
>
> * The `nopath_flag` field of struct fuse_operations has been
>   removed. Instead, a new `nullpath_ok` flag can now be set
>   in struct fuse_config.
>
> * File systems that use the low-level API and support lookup requests
>   for '.' and '..' should continue make sure to set the
>   FUSE_CAP_EXPORT_SUPPORT bit in fuse_conn_info->want.
>
>   (This has actually always been the case, but was not very obvious
>   from the documentation).
>
> * The help text generated by fuse_lowlevel_help(), fuse_new() (and
>   indirectly fuse_main()) no longer includes options that are unlikely
>   to be of interest to end-users. The full list of accepted options is
>   now included in the respective function's documentation (located in
>   the fuse.h/fuse_lowlevel.h and doc/html).
>
> * The ``-o nopath`` option has been dropped - it never actually did
>   anything (since it is unconditionally overwritten with the value of
>   the `nopath` flag in `struct fuse_operations).
>
> * The ``-o large_read`` mount option has been dropped. Hopefully no
>   one uses a Linux 2.4 kernel anymore.
>
> * The `-o nonempty` mount point has been removed, mounting over
>   non-empty directories is now always allowed. This brings the
>   behavior of FUSE file systems in-line with the behavior of the
>   regular `mount` command.
>
>   File systems that do not want to allow mounting to non-empty
>   directories should perform this check themselves before handing
>   control to libfuse.
>
> * The chmod, chown, truncate, utimens and getattr handlers of the
>   high-level API now all receive an additional struct fuse_file_info
>   pointer (which, however, may be NULL even if the file is currently
>   open).
>
>   The fgetattr and ftruncate handlers have become obsolete and have
>   been removed.
>
> * The `fuse_session_new` function no longer accepts the ``-o
>   clone_fd`` option. Instead, this has become a parameter of the
>   `fuse_session_loop_mt` and ``fuse_loop_mt` functions.
>
> * For low-level file systems that implement the `write_buf` handler,
>   the `splice_read` option is now enabled by default. As usual, this
>   can be changed in the file system's `init` handler.
>
> * The treatment of low-level options has been made more consistent:
>
>   Options that can be set in the init() handler (via the
>   fuse_conn_info parameter) can now be set only here,
>   i.e. fuse_session_new() no longer accepts arguments that change the
>   fuse_conn_info object before or after the call do init(). As a side
>   effect, this removes the ambiguity where some options can be
>   overwritten by init(), while others overwrite the choices made by
>   init().
>
>   For file systems that wish to offer command line options for these
>   settings, the new fuse_parse_conn_info_opts() and
>   fuse_apply_conn_info_opts() functions are available.
>
>   Consequently, the fuse_lowlevel_help() method has been dropped.
>
> * The `async_read` field in `struct fuse_conn_info` has been
>   removed. To determine if the kernel supports asynchronous reads,
>   file systems should check the `FUSE_CAP_ASYNC_READ` bit of the
>   `capable` field. To enable/disable asynchronous reads, file systems
>   should set the flag in the `wanted` field.
>
> * The `fuse_parse_cmdline` function no longer prints out help when the
>   ``--verbose`` or ``--help`` flags are given. This needs to be done
>   by the file system (e.g. using the `fuse_cmdline_help()` and
>   `fuse_lowlevel_help()` functions).
>
> * Added ``example/cuse_client.c`` to test ``example/cuse.c``.
>
> * Removed ``example/null.c``. This has not been working for a while
>   for unknown reasons -- maybe because it tries to treat the
>   mountpoint as a file rather than a directory?
>
> * There are several new examples that demonstrate the use of
>   the ``fuse_lowlevel_notify_*`` functions:
>
>   - ``example/notify_store_retrieve.c``
>   - ``example/notify_inval_inode.c``
>   - ``example/notify_inval_entry.c``
>
> * The ``-o big_writes`` mount option has been removed. It is now
>   always active. File systems that want to limit the size of write
>   requests should use the ``-o max_write=<N>`` option instead.
>
> * The `fuse_lowlevel_new` function has been renamed to
>   `fuse_session_new` and no longer interprets the --version or --help
>   options. To print help or version information, use the new
>   `fuse_lowlevel_help` and `fuse_lowlevel_version` functions.
>
> * The ``allow_other`` and ``allow_root`` mount options (accepted by
>   `fuse_session_new()`) may now be specified together. In this case,
>   ``allow_root`` takes precedence.
>
> * There are new `fuse_session_unmount` and `fuse_session_mount`
>   functions that should be used in the low-level API. The `fuse_mount`
>   and `fuse_unmount` functions should be used with the high-level API
>   only.
>
> * Neither `fuse_mount` nor `fuse_session_mount` take struct fuse_opts
>   parameters anymore. Mount options are parsed by `fuse_new` (for the
>   high-level API) and `fuse_session_new` (for the low-level API)
>   instead. To print help or version information, use the new
>   `fuse_mount_help` and `fuse_mount_version` functions.
>
> * The ``fuse_lowlevel_notify_*`` functions now all take a `struct
>   fuse_session` parameter instead of a `struct fuse_chan`.
>
> * The channel interface (``fuse_chan_*`` functions) has been made
>   private. As a result, the typical initialization sequence of a
>   low-level file system has changed from ::
>
>         ch = fuse_mount(mountpoint, &args);
>         se = fuse_lowlevel_new(&args, &lo_oper, sizeof(lo_oper), &lo);
>         fuse_set_signal_handlers(se);
>         fuse_session_add_chan(se, ch);
>         fuse_daemonize(fg);
>         if (mt)
>             fuse_session_loop_mt(se);
>         else
>             fuse_session_loop(se);
>         fuse_remove_signal_handlers(se);
>         fuse_session_remove_chan(ch);
>         fuse_session_destroy(se);
>         fuse_unmount(mountpoint, ch);
>
>   to ::
>
>         se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL);
>         fuse_set_signal_handlers(se);
>         fuse_session_mount(se, mountpoint);
>         fuse_daemonize(fg);
>         if (mt)
>             fuse_session_loop_mt(se);
>         else
>             fuse_session_loop(se);
>         fuse_remove_signal_handlers(se);
>         fuse_session_unmount(se);
>         fuse_lowlevel_destroy(se);
>
>   The typical high-level setup has changed from ::
>
>         ch = fuse_mount(*mountpoint, &args);
>         fuse = fuse_new(ch, &args, op, op_size, user_data);
>         se = fuse_get_session(fuse);
>         fuse_set_signal_handlers(se);
>         fuse_daemonize(fg);
>         if (mt)
>             fuse_loop_mt(fuse);
>         else
>             fuse_loop(fuse);
>         fuse_remove_signal_handlers(se);
>         fuse_unmount(mountpoint, ch);
>         fuse_destroy(fuse);
>
>   to ::
>
>         fuse = fuse_new(&args, op, op_size, user_data);
>         se = fuse_get_session(fuse);
>         fuse_set_signal_handlers(se);
>         fuse_mount(se, mountpoint);
>         fuse_daemonize(fg);
>          if (mt)
>             fuse_loop_mt(fuse);
>         else
>             fuse_loop(fuse);
>         fuse_remove_signal_handlers(se);
>         fuse_unmount(se);
>         fuse_destroy(fuse);
>
>   File systems that use `fuse_main` are not affected by this change.
>
>   For integration with custom event loops, the new `fuse_session_fd`
>   function provides the file descriptor that's used for communication
>   with the kernel.
>
> * Added *clone_fd* option.  This creates a separate device file
>   descriptor for each processing thread, which might improve
>   performance.
>
> * Added *writeback_cache* option. With kernel 3.14 and newer this
>   enables write-back caching which can significantly improve
>   performance.
>
> * Added *async_dio* option. With kernel 3.13 and newer, this allows
>   direct I/O to be done asynchronously.
>
> * The (high- and low-level) `rename` handlers now takes a *flags*
>   parameter (with values corresponding to the *renameat2* system call
>   introduced in Linux 3.15).
>
> * The "ulockmgr_server" has been dropped.
>
> * There is a new (low-level) `readdirplus` handler, with a
>   corresponding example in ``examples/fuse_lo-plus.c`` and a new
>   `fuse_add_direntry_plus` API function.
>
> * The (high-level) `readdir` handler now takes a *flags* argument.
>
> * The (high-level) `filler` function passed to `readdir` now takes an
>   additional *flags* argument.
>
> * The (high-level) `getdir` handler has been dropped.
>
> * The *flag_nullpath_ok* and *flag_utime_omit_ok* flags have been
>   dropped.
>
> * The (high-level) *utime* handler has been dropped.
>
> * The `fuse_invalidate` function has been removed.
>
> * The `fuse_is_lib_option` function has been removed.
>
> * The *fh_old* member of `struct fuse_file_info` has been dropped.
>
> * The type of the *writepage* member of `struct fuse_file_info` was
>   changed from *int* to *unsigned int*.
>
> * The `struct fuse_file_info` gained a new *poll_events* member.
>
> * There is a new `fuse_pkgversion` function.
>
> * The *fuse_off_t* and *fuse_ino_t* changed from *unsigned long* to
>   *uint64_t*, i.e. they are now 64 bits also on 32-bit systems.
>
> * The type of the *generation* member of `struct fuse_entry_param*
>   changed from *unsigned* to *uint64_t*.
>
> * The (low-level) `setattr` handler gained a *FUSE_SET_ATTR_CTIME* bit
>   *for its *to_set* parameter.
>
> * The `struct fuse_session_ops` data structure has been dropped.
>
> * The documentation has been clarified and improved in many places.
>
>
>
> Please report any issues on this mailing list or the GitHub issue
> tracker. The source code can be downloaded at
> https://github.com/libfuse/libfuse/releases/tag/fuse-3.0.0rc3
>
> Best,
> -Nikolaus
>
>
>
> ------------------------------------------------------------------------------
> Developer Access Program for Intel Xeon Phi Processors
> Access to Intel Xeon Phi processor-based developer platforms.
> With one year of Intel Parallel Studio XE.
> Training and support from Colfax.
> Order your platform today.http://sdm.link/xeonphi
>
>
>

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/xeonphi
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
Reply | Threaded
Open this post in threaded view
|

Re: [ANNOUNCE] libfuse 3.0.0 has been released

Nikolaus Rath
In reply to this post by Peter Amstutz
On Dec 09 2016, Peter Amstutz <[hidden email]> wrote:
> Congratulations, and thank you for all your hard work!
>
> Is there a version of Python llfuse based on libfuse3?

Thanks! No, not yet. But it's the next thing on my TODO list.


Best,
-Nikolaus

--
GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

             »Time flies like an arrow, fruit flies like a Banana.«

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/xeonphi
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
Reply | Threaded
Open this post in threaded view
|

Re: [ANNOUNCE] libfuse 3.0.0 has been released

yin zhuhua
In reply to this post by Nikolaus Rath
Congrats. Thank you for your work.

Should I install it with 2.6 kernel?

Thanks and Regards,
Zhuhua


Sent from Yahoo Mail for iPhone

On Friday, December 9, 2016, 11:41, Nikolaus Rath <[hidden email]> wrote:

Dear all,

I am very pleased to announce the release of libfuse 3.0.0.

As you may have already heard, FUSE 3 adds several exiting new features
and gets rid of several historical bugs that could not be fixed without
breaking backwards compatibility.

= Note to packagers =

libfuse 3 is designed to be co-installable with libfuse 2. However, some
files will be installed by both libfuse 2 and libfuse 3
(e.g. /etc/fuse.conf, the udev and init scripts, and the mount.fuse(8)
manpage). These files should be taken from libfuse 3. The format/content
is guaranteed to remain backwards compatible with libfuse 2.

We recommend to ship libfuse2 and libfuse3 in three separate packages: a
libfuse-common package that contains files shared by libfuse 2+3 (taken
From the libfuse3 tarball), and libfuse2 and libfuse3 packages that
contain the shared library and helper programs for the respective
version.

= Changes =

This release is identical to the last release candidate. The changes
since libfuse 2.9.x are:

* Fixed test errors when running tests as root.

* Made check for util-linux version more robust.

* Added documentation for all fuse capability flags (`FUSE_CAP_*`) and
  `struct fuse_conn_info` fields.

* fuse_loop(), fuse_loop_mt(), fuse_session_loop() and
  fuse_session_loop_mt() now return more detailed error codes instead
  of just -1. See the documentation of fuse_session_loop() for details.

* The FUSE main loop is now aborted if the file-system requests
  capabilities that are not supported by the kernel. In this case, the
  session loop is exited with a return code of ``-EPROTO``.

* Most file-system capabilities that were opt-in in libfuse2 are now
  enabled by default. Filesystem developers are encouraged to review
  the documentation of the FUSE_CAP_* features to ensure that their
  filesystem is compatible with the new semantics. As before, a
  particular capability can still be disabled by unsetting the
  corresponding bit of `fuse_conn_info.wants` in the init() handler.

* Added FUSE_CAP_PARALLEL_DIROPS and FUSE_CAP_POSIX_ACL,
  FUSE_HANDLE_KILLPRIV feature flags.

* FUSE filesystems are now responsible for unsetting the setuid/setgid
  flags when a file is written, truncated, or its owner
  changed. Previously, this was handled by the kernel but subject to
  race conditions.

* The fusermount and mount.fuse binaries have been renamed to
  fusermount3 and mount.fuse3 to allow co-installation of libfuse 2.x
  and 3.x

* Added a `max_read` field to `struct fuse_conn_info`. For the time
  being, the maximum size of read requests has to be specified both
  there *and* passed to fuse_session_new() using the ``-o
  max_read=<n>`` mount option. At some point in the future, specifying
  the mount option will no longer be necessary.

* Documentation: clarified that the fuse_argv structure that is passed
  to `fuse_new()` and `fuse_lowlevel_new()` must always contain at
  least one element.

* The high-level init() handler now receives an additional struct
  fuse_config pointer that can be used to adjust high-level API
  specific configuration options.

* The `nopath_flag` field of struct fuse_operations has been
  removed. Instead, a new `nullpath_ok` flag can now be set
  in struct fuse_config.

* File systems that use the low-level API and support lookup requests
  for '.' and '..' should continue make sure to set the
  FUSE_CAP_EXPORT_SUPPORT bit in fuse_conn_info->want.

  (This has actually always been the case, but was not very obvious
  from the documentation).

* The help text generated by fuse_lowlevel_help(), fuse_new() (and
  indirectly fuse_main()) no longer includes options that are unlikely
  to be of interest to end-users. The full list of accepted options is
  now included in the respective function's documentation (located in
  the fuse.h/fuse_lowlevel.h and doc/html).

* The ``-o nopath`` option has been dropped - it never actually did
  anything (since it is unconditionally overwritten with the value of
  the `nopath` flag in `struct fuse_operations).

* The ``-o large_read`` mount option has been dropped. Hopefully no
  one uses a Linux 2.4 kernel anymore.

* The `-o nonempty` mount point has been removed, mounting over
  non-empty directories is now always allowed. This brings the
  behavior of FUSE file systems in-line with the behavior of the
  regular `mount` command.

  File systems that do not want to allow mounting to non-empty
  directories should perform this check themselves before handing
  control to libfuse.

* The chmod, chown, truncate, utimens and getattr handlers of the
  high-level API now all receive an additional struct fuse_file_info
  pointer (which, however, may be NULL even if the file is currently
  open).

  The fgetattr and ftruncate handlers have become obsolete and have
  been removed.

* The `fuse_session_new` function no longer accepts the ``-o
  clone_fd`` option. Instead, this has become a parameter of the
  `fuse_session_loop_mt` and ``fuse_loop_mt` functions.

* For low-level file systems that implement the `write_buf` handler,
  the `splice_read` option is now enabled by default. As usual, this
  can be changed in the file system's `init` handler.

* The treatment of low-level options has been made more consistent:

  Options that can be set in the init() handler (via the
  fuse_conn_info parameter) can now be set only here,
  i.e. fuse_session_new() no longer accepts arguments that change the
  fuse_conn_info object before or after the call do init(). As a side
  effect, this removes the ambiguity where some options can be
  overwritten by init(), while others overwrite the choices made by
  init().

  For file systems that wish to offer command line options for these
  settings, the new fuse_parse_conn_info_opts() and
  fuse_apply_conn_info_opts() functions are available.

  Consequently, the fuse_lowlevel_help() method has been dropped.

* The `async_read` field in `struct fuse_conn_info` has been
  removed. To determine if the kernel supports asynchronous reads,
  file systems should check the `FUSE_CAP_ASYNC_READ` bit of the
  `capable` field. To enable/disable asynchronous reads, file systems
  should set the flag in the `wanted` field.

* The `fuse_parse_cmdline` function no longer prints out help when the
  ``--verbose`` or ``--help`` flags are given. This needs to be done
  by the file system (e.g. using the `fuse_cmdline_help()` and
  `fuse_lowlevel_help()` functions).

* Added ``example/cuse_client.c`` to test ``example/cuse.c``.

* Removed ``example/null.c``. This has not been working for a while
  for unknown reasons -- maybe because it tries to treat the
  mountpoint as a file rather than a directory?

* There are several new examples that demonstrate the use of
  the ``fuse_lowlevel_notify_*`` functions:

  - ``example/notify_store_retrieve.c``
  - ``example/notify_inval_inode.c``
  - ``example/notify_inval_entry.c``

* The ``-o big_writes`` mount option has been removed. It is now
  always active. File systems that want to limit the size of write
  requests should use the ``-o max_write=<N>`` option instead.

* The `fuse_lowlevel_new` function has been renamed to
  `fuse_session_new` and no longer interprets the --version or --help
  options. To print help or version information, use the new
  `fuse_lowlevel_help` and `fuse_lowlevel_version` functions.

* The ``allow_other`` and ``allow_root`` mount options (accepted by
  `fuse_session_new()`) may now be specified together. In this case,
  ``allow_root`` takes precedence.

* There are new `fuse_session_unmount` and `fuse_session_mount`
  functions that should be used in the low-level API. The `fuse_mount`
  and `fuse_unmount` functions should be used with the high-level API
  only.

* Neither `fuse_mount` nor `fuse_session_mount` take struct fuse_opts
  parameters anymore. Mount options are parsed by `fuse_new` (for the
  high-level API) and `fuse_session_new` (for the low-level API)
  instead. To print help or version information, use the new
  `fuse_mount_help` and `fuse_mount_version` functions.

* The ``fuse_lowlevel_notify_*`` functions now all take a `struct
  fuse_session` parameter instead of a `struct fuse_chan`.

* The channel interface (``fuse_chan_*`` functions) has been made
  private. As a result, the typical initialization sequence of a
  low-level file system has changed from ::

        ch = fuse_mount(mountpoint, &args);
        se = fuse_lowlevel_new(&args, &lo_oper, sizeof(lo_oper), &lo);
        fuse_set_signal_handlers(se);
        fuse_session_add_chan(se, ch);
        fuse_daemonize(fg);
        if (mt)
            fuse_session_loop_mt(se);
        else
            fuse_session_loop(se);
        fuse_remove_signal_handlers(se);
        fuse_session_remove_chan(ch);
        fuse_session_destroy(se);
        fuse_unmount(mountpoint, ch);

  to ::

        se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL);
        fuse_set_signal_handlers(se);
        fuse_session_mount(se, mountpoint);
        fuse_daemonize(fg);
        if (mt)
            fuse_session_loop_mt(se);
        else
            fuse_session_loop(se);
        fuse_remove_signal_handlers(se);
        fuse_session_unmount(se);
        fuse_lowlevel_destroy(se);

  The typical high-level setup has changed from ::

        ch = fuse_mount(*mountpoint, &args);
        fuse = fuse_new(ch, &args, op, op_size, user_data);
        se = fuse_get_session(fuse);
        fuse_set_signal_handlers(se);
        fuse_daemonize(fg);
        if (mt)
            fuse_loop_mt(fuse);
        else
            fuse_loop(fuse);
        fuse_remove_signal_handlers(se);
        fuse_unmount(mountpoint, ch);
        fuse_destroy(fuse);

  to ::

        fuse = fuse_new(&args, op, op_size, user_data);
        se = fuse_get_session(fuse);
        fuse_set_signal_handlers(se);
        fuse_mount(se, mountpoint);
        fuse_daemonize(fg);
        if (mt)
            fuse_loop_mt(fuse);
        else
            fuse_loop(fuse);
        fuse_remove_signal_handlers(se);
        fuse_unmount(se);
        fuse_destroy(fuse);

  File systems that use `fuse_main` are not affected by this change.

  For integration with custom event loops, the new `fuse_session_fd`
  function provides the file descriptor that's used for communication
  with the kernel.

* Added *clone_fd* option.  This creates a separate device file
  descriptor for each processing thread, which might improve
  performance.

* Added *writeback_cache* option. With kernel 3.14 and newer this
  enables write-back caching which can significantly improve
  performance.

* Added *async_dio* option. With kernel 3.13 and newer, this allows
  direct I/O to be done asynchronously.

* The (high- and low-level) `rename` handlers now takes a *flags*
  parameter (with values corresponding to the *renameat2* system call
  introduced in Linux 3.15).

* The "ulockmgr_server" has been dropped.

* There is a new (low-level) `readdirplus` handler, with a
  corresponding example in ``examples/fuse_lo-plus.c`` and a new
  `fuse_add_direntry_plus` API function.

* The (high-level) `readdir` handler now takes a *flags* argument.

* The (high-level) `filler` function passed to `readdir` now takes an
  additional *flags* argument.

* The (high-level) `getdir` handler has been dropped.

* The *flag_nullpath_ok* and *flag_utime_omit_ok* flags have been
  dropped.

* The (high-level) *utime* handler has been dropped.

* The `fuse_invalidate` function has been removed.

* The `fuse_is_lib_option` function has been removed.

* The *fh_old* member of `struct fuse_file_info` has been dropped.

* The type of the *writepage* member of `struct fuse_file_info` was
  changed from *int* to *unsigned int*.

* The `struct fuse_file_info` gained a new *poll_events* member.

* There is a new `fuse_pkgversion` function.

* The *fuse_off_t* and *fuse_ino_t* changed from *unsigned long* to
  *uint64_t*, i.e. they are now 64 bits also on 32-bit systems.

* The type of the *generation* member of `struct fuse_entry_param*
  changed from *unsigned* to *uint64_t*.

* The (low-level) `setattr` handler gained a *FUSE_SET_ATTR_CTIME* bit
  *for its *to_set* parameter.

* The `struct fuse_session_ops` data structure has been dropped.

* The documentation has been clarified and improved in many places.



Please report any issues on this mailing list or the GitHub issue
tracker. The source code can be downloaded at
https://github.com/libfuse/libfuse/releases/tag/fuse-3.0.0rc3

Best,
-Nikolaus

--
GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

            »Time flies like an arrow, fruit flies like a Banana.«
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/xeonphi
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/xeonphi
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
Reply | Threaded
Open this post in threaded view
|

Re: [ANNOUNCE] libfuse 3.0.0 has been released

Nikolaus Rath
On Dec 10 2016, y zh <[hidden email]> wrote:
> Should I install it with 2.6 kernel?

That is a little ancient. I'd recommend a 4.8 kernel.


Best,
-Nikolaus

--
GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

             »Time flies like an arrow, fruit flies like a Banana.«

------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.http://sdm.link/xeonphi
--
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel