libfuse/ChangeLog.rst
Nikolaus Rath 5698ee09cf Turn struct fuse_chan into an implementation detail
The only struct fuse_chan that's accessible to the user application is
the "master" channel that is returned by fuse_mount and stored in struct
fuse_session.

When using the multi-threaded main loop with the "clone_fd" option, each
worker thread gets its own struct fuse_chan. However, none of these are
available to the user application, nor do they hold references to struct
fuse_session (the pointer is always null).

Therefore, any presence of struct fuse_chan can be removed
without loss of functionality by relying on struct fuse_session instead.

This reduces the number of API functions and removes a potential source
of confusion (since the new API no longer looks as if it might be
possible to add multiple channels to one session, or to share one
channel between multiple sessions).

Fixes issue #17.
2016-10-02 13:56:40 -07:00

189 lines
5.7 KiB
ReStructuredText

Unreleased Changes
==================
* The `fuse_lowlevel_new` function has been renamed to
`fuse_session_new`.
* There are now 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.
* 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.
* Added *clone_fd* option. This creates a separate device file
descriptor for each processing thread, which might improve
performance.
* 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.
FUSE 2.9.7 (2016-06-20)
=======================
* Added SELinux support.
* Fixed race-condition when session is terminated right after starting
a FUSE file system.
FUSE 2.9.6 (2016-04-23)
=======================
* Tarball now includes documentation.
* Shared-object version has now been bumped correctly.
FUSE 2.9.5 (2016-01-14)
=======================
* New maintainer: Nikolaus Rath <Nikolaus@rath.org>. Many thanks to
Miklos Szeredi <miklos@szeredi.hu> for bringing FUSE to where it is
now!
* fix warning in mount.c:receive_fd(). Reported by Albert Berger
* fix possible memory leak. Reported by Jose R. Guzman
FUSE 2.9.4 (2015-05-22)
=======================
* fix exec environment for mount and umount. Found by Tavis Ormandy
(CVE-2015-3202).
* fix fuse_remove_signal_handlers() to properly restore the default
signal handler. Reported by: Chris Johnson
* highlevel API: fix directory file handle passed to ioctl() method.
Reported by Eric Biggers
* libfuse: document deadlock avoidance for fuse_notify_inval_entry()
and fuse_notify_delete()
* fusermount, libfuse: send value as unsigned in "user_id=" and
"group_id=" options. Uids/gids larger than 2147483647 would result
in EINVAL when mounting the filesystem. This also needs a fix in
the kernel.
* Initilaize stat buffer passed to ->getattr() and ->fgetattr() to
zero in all cases. Reported by Daniel Iwan
* libfuse: Add missing includes. This allows compiling fuse with
musl. Patch by Daniel Thau
Older Versions (before 2013-01-01)
==================================
Please see Git history, e.g. at
https://github.com/libfuse/libfuse/blob/fuse_2_9_3/ChangeLog.