I am very pleased to announce the first release candidate of libfuse 3.
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.
This is a release candidate, so functionality and API will correspond to
the final release unless any serious bugs are discovered.
From the changelog:
FUSE 3.0.0-rc1 (2016-10-28)
This is a release candidate. Functionality and API will correspond
to the final release unless any serious bugs are discovered.
* 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. This pointer is NULL if the file is not currently open.
The fgetattr and ftruncate handlers have become obsolete and have
* 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
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
* 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:
* 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.
FUSE 3.0.0pre0 (2016-10-03)
* This is a preview release. Functionality and API may still change
before the 3.0.0 release.
* 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.
* 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
* 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);
se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL);
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 = fuse_new(&args, op, op_size, user_data);
se = fuse_get_session(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
* Added *writeback_cache* option. With kernel 3.14 and newer this
enables write-back caching which can significantly improve
* 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
* 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
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.«
The Command Line: Reinvented for Modern Developers
Did the resurgence of CLI tooling catch you by surprise?
Reconnect with the command line and become more productive.
Learn the new .NET and ASP.NET CLI. Get your free copy!
fuse-devel mailing list
To unsubscribe or subscribe, visit https://lists.sourceforge.net/lists/listinfo/fuse-devel
signature.asc (1016 bytes) Download Attachment
|Free forum by Nabble||Edit this page|