blob: 5f09e16b18d9eb6ecf5fdeaaa38aad52bef94ed2 [file] [log] [blame]
==================================
libfuse API Changes (3.0 to 3.19)
==================================
This document describes API changes between FUSE_USE_VERSION values.
Set FUSE_USE_VERSION before including fuse.h or fuse_lowlevel.h.
Version 3.1 (FUSE_MAKE_VERSION(3, 1))
=====================================
New Functions
-------------
* ``fuse_lib_help()`` - Print help for generic high-level FUSE options
* ``fuse_invalidate_path()`` - Cache invalidation from high-level API
Changed Functions
-----------------
* ``fuse_new()`` signature changed; applications should call ``fuse_lib_help()``
for --help instead of passing it to fuse_new()
Version 3.2 (FUSE_MAKE_VERSION(3, 2))
=====================================
Changed Functions
-----------------
* ``fuse_loop_mt()`` and ``fuse_session_loop_mt()`` now take a
``struct fuse_loop_config *`` parameter instead of a *clone_fd* boolean.
The struct is public and can be directly initialized.
Note: This change was implemented in libfuse release 3.1.1, but the API version
that enables it is 32.
Version 3.3 (FUSE_MAKE_VERSION(3, 3))
=====================================
New Functions
-------------
* ``fuse_open_channel()`` - Open a FUSE file descriptor and set up mount
(allows passing open /dev/fuse fd via ``/dev/fd/%u`` mountpoint format)
Version 3.4 (FUSE_MAKE_VERSION(3, 4))
=====================================
New Operations
--------------
* ``copy_file_range`` - Efficient server-side file copying
New Functions
-------------
* ``fuse_fs_copy_file_range()`` - High-level API wrapper
Version 3.5 (FUSE_MAKE_VERSION(3, 5))
=====================================
Changed Prototypes
------------------
* ``ioctl`` handler: cmd parameter changed from ``int`` to ``unsigned int``
- Use FUSE_USE_VERSION < 35 for old ``int cmd`` prototype
- Use FUSE_USE_VERSION >= 35 for new ``unsigned int cmd`` prototype
Version 3.7 (FUSE_MAKE_VERSION(3, 7))
=====================================
New Functions
-------------
* ``fuse_set_log_func()`` - Install custom log message handler
* ``fuse_log()`` - Emit log messages (replaces direct stderr writes)
Version 3.8 (FUSE_MAKE_VERSION(3, 8))
=====================================
New Operations
--------------
* ``lseek`` - Find next data or hole in sparse files (SEEK_DATA/SEEK_HOLE)
New Functions
-------------
* ``fuse_fs_lseek()`` - High-level API wrapper
* ``fuse_reply_lseek()`` - Low-level reply function
Version 3.12 (FUSE_MAKE_VERSION(3, 12))
=======================================
Major Changes
-------------
* ``struct fuse_loop_config`` is now **private** (opaque pointer)
* Loop configuration must use accessor functions instead of direct struct access
* The public struct from version 3.2-3.11 is renamed to ``struct fuse_loop_config_v1``
New Functions
-------------
* ``fuse_loop_cfg_create()`` - Create loop configuration
* ``fuse_loop_cfg_destroy()`` - Free loop configuration
* ``fuse_loop_cfg_set_idle_threads()`` - Set max idle threads
* ``fuse_loop_cfg_set_max_threads()`` - Set max total threads
* ``fuse_loop_cfg_set_clone_fd()`` - Enable/disable clone_fd
* ``fuse_loop_cfg_convert()`` - Convert old config (v1) to new format
* ``fuse_lowlevel_notify_expire_entry()`` - Expire dentry without full invalidation
Changed Functions
-----------------
* ``fuse_session_loop_mt()`` now accepts NULL config pointer
* ``fuse_parse_cmdline()`` now accepts ``max_threads`` option
Deprecated
----------
* ``max_idle_threads`` parameter (use ``max_threads`` instead)
Version 3.17 (FUSE_MAKE_VERSION(3, 17))
=======================================
New Functions
-------------
* ``fuse_set_fail_signal_handlers()`` - Handle fatal signals with backtrace
* ``fuse_log_enable_syslog()`` - Redirect fuse_log() to syslog
* ``fuse_log_close_syslog()`` - Close syslog connection
* ``fuse_passthrough_open()`` - Setup passthrough backing file
* ``fuse_passthrough_close()`` - Close passthrough connection
* ``fuse_session_custom_io()`` - Custom I/O for FUSE daemon (signature extended)
New Capabilities
----------------
* ``FUSE_CAP_PASSTHROUGH`` - Enable passthrough read/write to backing file
* ``FUSE_CAP_HANDLE_KILLPRIV_V2`` - Support for KILLPRIV_V2
New Mount Options
-----------------
* ``fmask`` - umask applied to non-directories (high-level API)
* ``dmask`` - umask applied to directories (high-level API)
Version 3.17.3
==============
New Functions
-------------
* ``fuse_set_feature_flag()`` - Set capability in want_ext field
* ``fuse_unset_feature_flag()`` - Unset capability in want_ext field
* ``fuse_get_feature_flag()`` - Query capability in want_ext field
Note: These replace direct manipulation of conn->want for 64-bit capability support.
Version 3.18 (FUSE_MAKE_VERSION(3, 18))
=======================================
New Operations
--------------
* ``statx`` - Extended file attributes (struct statx support)
New Functions
-------------
* ``fuse_fs_statx()`` - High-level API wrapper
* ``fuse_reply_statx()`` - Low-level reply function
* ``fuse_req_is_uring()`` - Check if request uses fuse-over-io-uring
* ``fuse_req_get_payload()`` - Get request payload buffer (io-uring only)
* ``fuse_lowlevel_notify_increment_epoch()`` - Increment epoch counter
New Features
------------
* fuse-over-io-uring communication support
* Request timeouts for hung operation prevention
Version 3.19 (FUSE_MAKE_VERSION(3, 19))
=======================================
(Reserved for future use)
Migration Notes
===============
When upgrading FUSE_USE_VERSION:
1. **3.0 3.1**: Handle --help in filesystem code, call fuse_lib_help()
2. **3.1 3.2**: Update fuse_loop_mt() calls to use struct fuse_loop_config
3. **< 3.5 3.5+**: Change ioctl cmd from int to unsigned int
4. **< 3.12 3.12+**: Use fuse_loop_cfg_*() functions instead of direct struct access
5. **< 3.17 3.17+**: Use fuse_set_feature_flag() instead of conn->want for new caps