aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
4 dayslibfuse: have passthrough_hp return an error with invalid mount optionsupstream-masterJosef Bacik
generic/003 fails currently because if you specify -o relatime we will fail to mount, but not return an error, so the test thinks that we support relatime and then hilarity ensues. Set ret so that if we get any failures while trying to mount we will properly error out. Signed-off-by: Josef Bacik <josef@toxicpanda.com>
4 daysxfstests: Add the possibility for extra daemon options (#964)Bernd Schubert
We need to test w/o page cache, w/o passthrough and other options. I.e. we need to have the possibility to add these options via local.config
7 daysMerge pull request #957 from bsbernd/fuse-req-atomic-ref-cntBernd Schubert
Atomic struct fuse_req::ref_cnt
7 daysRename struct fuse_req::ctr to ::ref_cntBernd Schubert
ref_cnt should make the intention of this variable more clear.
7 daysMake struct fuse_req::ctr a C11 _AtomicBernd Schubert
The variable is not modified exclusively with locks since commit cef8c8b24902 ("Add support for no_interrupt") anymore. That commit is safe, but might be error prone to future updates. Changing it to a C11 _Atomic should avoid issues.
7 daysAdd support for no_interrupt (#956)yangyun50
The function fuse_session_process_buf_int() would do much things for FUSE_INTERRUPT requests, even there are no FUSE_INTERRUPT requests: 1. check every non-FUSE_INTERRUPT request and add these requests to the linked list(se->list) under a big lock(se->lock). 2. the function fuse_free_req() frees every request and remove them from the linked list(se->list) under a bing lock(se->lock). These operations are not meaningful when there are no FUSE_INTERRUPT requests, and have a great impact on the performance of fuse filesystem because the big lock for each request. In some cases, FUSE_INTERRUPT requests are infrequent, even none at all. Besides, the user-defined filesystem may do nothing for FUSE_INTERRUPT requests. And the kernel side has the option "no_interrupt" in struct fuse_conn. This kernel option can be enabled by return ENOSYS in libfuse for the reply of FUSE_INTERRUPT request. But I don't find the code to enable the "no_interrupt" kernel option in libfuse. So add the no_interrupt support, and when this operaion is enabled: 1. remove the useless locking operaions and list operations. 2. return ENOSYS for the reply of FUSE_INTERRUPT request to inform the kernel to disable FUSE_INTERRUPT request.
10 daysFix compatibility issue around fuse_custom_io->clone_fd (#953)legezywzh
Fixes: 73cd124d0408 ("Add clone_fd to custom IO (#927)") Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-05-27Remove most includes in compat.c (#954)Bernd Schubert
compat.c is supposed to be standalone to provide compat ABI symbols. Including fuse header files can cause conflicts - just the opposite of what compat.c was made for.
2024-05-27Add a .clang-format file (#952)Bernd Schubert
This is direct copy of <linux>/.clang-format as this project was initiated with linux style. Some lines that were auto-generated are removed ("# Taken from:...). Some files like example/passthrough_hp.cc use a different style - these files probably should be cleaned up when major changes are done to them.
2024-05-22--- (#951)dependabot[bot]
updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-13Enable passthrough mode for read/write operations (#919)Amir Goldstein
Add support for filesystem passthrough read/write of files. When the FUSE_PASSTHROUGH capability is enabled, the FUSE server may decide, while handling the "open" or "create" requests, if the given file can be accessed by that process in "passthrough" mode, meaning that all the further read and write operations would be forwarded by the kernel directly to the backing file rather than to the FUSE server. All requests other than read or write are still handled by the server. This allows for an improved performance on reads and writes, especially in the case of reads at random offsets, for which no (readahead) caching mechanism would help, reducing the performance gap between FUSE and native filesystem access. Extend also the passthrough_hp example with the new passthrough feature. This example opens a kernel backing file per FUSE inode on the first FUSE file open of that inode and closes the backing file on the release of the last FUSE file on that inode. All opens of the same inode passthrough to the same backing file. A combination of fi->direct_io and fi->passthrough is allowed. It means that read/write operations go directly to the server, but mmap is done on the backing file. This allows to open some fds of the inode in passthrough mode and some fd of the same inode in direct_io/passthrough_mmap mode. Signed-off-by: Alessio Balsini <balsini@android.com> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2024-05-13Add in the libfuse version a program was compiled with (#942)Bernd Schubert
The API stays the same, the libfuse version comes from inlined functions, which are defined fuse_lowlevel.h and fuse.h. As these inlined functions are defined in the header files they get added into the application, similar as if these were preprocessor macros. Macro vs inlined function is then just a style issue - I personally prefer the latter. fuse_session_new() -> static inlinei, in the application _fuse_session_new -> inside of libfuse fuse_new() -> static inline, in the application _fuse_new() -> inside of libfuse Note: Entirely untested is the fuse 30 api - we need a test for it. And we do not have any ABI tests at all. Signed-off-by: Bernd Schubert <bernd.schubert@fastmail.fm>
2024-05-10Handle NO_OPEN/NO_OPENDIR support automatically (#949)Josef Bacik
If the file system doesn't provide a ->open or an ->opendir, and the kernel supports FUSE_CAP_NO_OPEN_SUPPORT or FUSE_CAP_NO_OPENDIR_SUPPORT, allow the implementation to set FUSE_CAP_NO_OPEN*_SUPPORT on conn->want in order to automatically get this behavior. Expand the documentation to be more explicit about the behavior of libfuse in the different cases WRT this capability. Signed-off-by: Josef Bacik <josef@toxicpanda.com>
2024-05-07Bump actions/checkout from 4.1.4 to 4.1.5 (#946)dependabot[bot]
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.4 to 4.1.5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/0ad4b8fadaa221de15dcec353f45205ec38ea70b...44c2b7a8a4ea60a981eaca3cf939b5f4305c123b) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-07fuse_common.h: fix warning on _Static_assert() (#939)CismonX
_Static_assert() is an ISO C11 feature. Make the check more standard-conformant so that the compiler won't give pedantic warnings.
2024-05-05Fix missing fuse_loop_cfg_destroy() in fuse_session_loop_mt_31 (#944)Bernd Schubert
All credits to Miklos Szeredi <miklos@szeredi.hu> for spotting this. Signed-off-by: Bernd Schubert <bernd.schubert@fastmail.fm>
2024-04-30Bump actions/checkout from 4.1.3 to 4.1.4 (#943)dependabot[bot]
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.3 to 4.1.4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/1d96c772d19495a3b5c517cd2bc0cb401ea0529f...0ad4b8fadaa221de15dcec353f45205ec38ea70b) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
2024-04-27Use std=gnu11 (#940)Bernd Schubert
We already have some C11 pieces like Static_assert and we are likely going to add more - tell meson to use C11. Plain C11 does not work as there are several language extension, like typeof - part of C23 only. We might be able to fix/workaround such extensions with compiler ifdef, but then I prefer gnu11 over checking which compiler is used (example gcc has __typeof vs clangs __typeof++). And compiler extension would also defeat pedantic.
2024-04-26Bump actions/checkout from 4.1.2 to 4.1.3 (#934)dependabot[bot]
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.2 to 4.1.3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/9bb56186c3b09b4f86b1c65136769dd318469633...1d96c772d19495a3b5c517cd2bc0cb401ea0529f) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
2024-04-25[libFuse 3.16.2]Compilation failure on freeBSD #936 (#938)Bernd Schubert
Despite the creation of the header file fuse_config.h during LibFUSE version 3.16.2's Meson build process, the BSD mount_bsd.c file continues to reference config.h. Consequently, this discrepancy results in compilation failures. FIX : Point the mount_bsd.c to correct header.
2024-04-22 Use single place to define the version and increase version to 3.17.0 (#932)Bernd Schubert
* Use single place to define the version Defining the version in fuse_common.h, is removed, it is defined through meson and provided by "libfuse_config.h". I.e. it avoids to define the version twice - once in meson and once in fuse_common.h. Ideal would be to set integers in the meson file and create the version string from these integers. However, meson requires that "project" is the first meson.build keyword - with that it requires to set the version from a string and then major/minor/hotfix integers are created from string split. Signed-off-by: Bernd Schubert <bernd.schubert@fastmail.fm> * Increase the version to 3.17.0 This is to prepare the branch for the next release. Signed-off-by: Bernd Schubert <bernd.schubert@fastmail.fm> --------- Signed-off-by: Bernd Schubert <bernd.schubert@fastmail.fm>
2024-04-20example/: Convert all fuse_session_loop_mt users to 3.12 API (#931)Bernd Schubert
Convert all the remaining users of fuse_session_loop_mt() to the new 3.12 config api.
2024-04-20passthrough_ll: fix fd leaks in lo_destroy() (#929)legezywzh
By virtio-fs and libfuse fuse_custom_io, passthrough_ll could be a virtio filesystem device backend, this bug was found when doing mount, fsstress and umount repeatedly. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com> Co-authored-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-04-18Add clone_fd to custom IO (#927)legezywzh
Define a new clone_fd() helper for fuse_custom_io, users can implement their own clone fd logic. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-04-16fix max_write update in do_init() (#926)legezywzh
If user updates conn->max_write in fuse_lowlevel_ops' init() method, do_init() will miss the "conn.max_write > bufsize - FUSE_BUFFER_HEADER_SIZE" judgment, and ->init method will be called after it, which obviously is a bug. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com> Co-authored-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-04-06fusermount: Fix use of uninitialized x_mnt_opts (#924)Bernd Schubert
x_mnt_opts was not initialized to 0, but strncat was done Spotted by cppcheck running on our ddn branch.
2024-04-02Add more documentation for FUSE_CAP_EXPORT_SUPPORT (#917)Bernd Schubert
Add more documentation for FUSE_CAP_EXPORT_SUPPORT Also remove the flag from passthrough_ll.c and passthrough_hp.cc as these implementations do _not_ handle that flag. They just cast fuse_ino_t to an inode and cause a heap buffer overflow for unknown objects (simplest reproducer are the examples in "man 2 open_by_handle_at", but to unmount/mount the file system after name_to_handle_at and before open_by_handle_at). Fixes https://github.com/libfuse/libfuse/issues/838 --------- Co-authored-by: Nikolaus Rath <Nikolaus@rath.org>
2024-03-29Add support for FUSE_CAP_HANDLE_KILLPRIV_V2Bernd Schubert
This just adds in the basic handler, but does not use it yet in examples.
2024-03-27Fix FUSE_CAP_DIRECT_IO_ALLOW_MMAP - use new numerical valueBernd Schubert
Commit 22741f5 accidentally re-used (1 << 27), which is already taken for FUSE_CAP_SETXATTR_EXT. Fortunately not part of any release yet.
2024-03-27Install all test/build python packages from requirements.txtAshley Pittman
Have GitHub actions setup python on runners and install all python dependencies via pip. Signed-off-by: Ashley Pittman <ashley@pittman.co.uk>
2024-03-24fix readdirplus when filler is called with zero offset (#896)farlongsignal
fixes #235 In fill_dir_plus(), there's a lookup for caching dirent attributes. However, when offset = 0 the cache metadata from the lookup is lost as only the entry attributes are passed when added to the list. Kernel doesn't cache the attributes since .ino = 0. This change moves the entry lookup to happen just before the relevant fuse_add_direntry_plus() calls
2024-03-21reset got_init after handling FUSE_DESTROY message (#910)legezywzh
User may still need to mount same fuse filesystem after umounting it(In this case, the userspace filesystem server needs to keep live), and after handling FUSE_DESTROY message, new FUSE_INIT message may come, so need to reset got_init to be zero. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-03-20ci-build.sh: Fix checking for function arguments (#909)Bernd Schubert
Checking for an emtpy string actually doesn't work for $@, so just check for number of arguments. Co-authored-by: Bernd Schubert <bschubert@ddn.com>
2024-03-20Add FUSE_FILL_DIR_DEFAULTS enum (#903)FredyVia
In order to use the fuse_fill_dir_t function in a C++ program, add the enum item: FUSE_FILL_DIR_DEFAULTS Without this change g++ compilation failed with example/hello.c:94:35: error: invalid conversion from ‘int’ to ‘fuse_fill_dir_flags’ [-fpermissive] 94 | filler(buf, ".", NULL, 0, 0); | ^ | | | int
2024-03-20Fix example/fix-notify_inval_inode.c (#908)Bernd Schubert
Similar issue as fixed in commit 3c7ba570 "examples/notify_store_retrieve: Add a clean shutdown". Basically a clean shutdown was missing, but even with clean shutdown it does not work, as kernel side releases inodes before sending FUSE_DESTROY - the intervaled thread then gets -ENOENT. Co-authored-by: Bernd Schubert <bschubert@ddn.com>
2024-03-20Bump actions/checkout from 4.1.1 to 4.1.2 (#905)dependabot[bot]
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 4.1.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/b4ffde65f46336ab88eb53be808477a3936bae11...9bb56186c3b09b4f86b1c65136769dd318469633) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-20Merge pull request #904 from bsbernd/s-bit-fusermountBernd Schubert
Add back s-bit for compiled fusermount
2024-03-20Add final "meson setup --reconfigure" to README.mdBernd Schubert
This reconfigure is recommended to ensure the build system (ninja/cmake/...) get the updated meson config. They typically do, but it depends on file time stamps - is a potential random error source.
2024-03-20/test_ctests / test_notify1: Print cmdline on failureBernd Schubert
Tests sometimes fail with pytest.fail('file system process terminated prematurely') And it is not clear what actually happens.
2024-03-20Add glibc backtrace to signal handlerBernd Schubert
It is very hard to see in github tests what is actually failing with signals - add the gnu-libc backtrace handler.
2024-03-20ci-build.sh: Add back test without versioned symbolsBernd Schubert
Commit b1cdc497 ("ci-build.sh: Run ASAN and UBSAN at the same time") also accidentally removed the test for versioned symbols. Also export clang/clang++ to make sure new shells get it.
2024-03-20Build clang/sanitized build firstBernd Schubert
This was stalling - easier to check what happens when it fails fast. And in general, sanitized builds are faster than valgrind and detect almost as much errors as valgrind (same level would be achieved with MSAN, but that is hard to use), so failures can be detected faster whan sanitizers run first.
2024-03-20Fix use-after-free in example/poll.cBernd Schubert
As noticed by valgrind in issue #907 example/poll.c triggers a use-after-free ==85200== Thread 2: ==85200== Invalid read of size 4 ==85200== at 0x485E54A: send_notify_iov (fuse_lowlevel.c:2267) ==85200== by 0x485E54A: fuse_lowlevel_notify_poll (fuse_lowlevel.c:2289) ==85200== by 0x1096F2: fsel_producer (poll.c:245) ==85200== by 0x4897EA6: start_thread (pthread_create.c:477) ==85200== by 0x49ADA6E: clone (clone.S:95) ==85200== Address 0x5291d68 is 392 bytes inside a block of size 920 free'd ==85200== at 0x48399AB: free (vg_replace_malloc.c:538) ==85200== by 0x485A12C: fuse_destroy (fuse.c:5103) ==85200== by 0x486220F: fuse_main_real (helper.c:389) ==85200== by 0x1091D6: main (poll.c:288) ==85200== Block was alloc'd at ==85200== at 0x483AB65: calloc (vg_replace_malloc.c:760) ==85200== by 0x485BAA0: fuse_session_new (fuse_lowlevel.c:3036) ==85200== by 0x4859AF2: fuse_new@@FUSE_3.1 (fuse.c:4966) ==85200== by 0x4862129: fuse_main_real (helper.c:345) ==85200== by 0x1091D6: main (poll.c:288) Issue is that the "fsel_producer" thread is still active after fuse_destroy - it gets destructed too late.
2024-03-20Add back s-bit for compiled fusermountBernd Schubert
This is also needed by some tests and was accidentally removed in commit aab146eea8877ee744a1b5a0da8bbbf31d14bad1
2024-03-20Fix test failures: Create missing mount dirBernd Schubert
Tests were failing because mount dir was missing. Unclear to me why this became only recently an issue (github internal - out of the sudden tests were hanging).
2024-03-20ci-build.sh: Reduce pytest --maxfail from 99 to 1Bernd Schubert
We want to see errors - reduce allowed errors. With --maxfail=99 tests out of the sudden started to hang in github, without a change in libfuse (I had actually tested to previous release tags). With --maxfail=1 pytest aborts and we see failing github. Also increase python log level to NOTSET - NOTSET should print all messages. Also use "pytest" has wrapper for "python3 -m"
2024-03-07Merge pull request #901 from bsbernd/posix_spawnBernd Schubert
Switch from fork to posix_spawn
2024-03-07ci-build.sh: Always install and add s-bit for fusermount3Bernd Schubert
As per pull #898, fusermount3 had a severe issue that should have been detected by ASAN. I guess tests used the system default and not the sanitized binary. Order of execution of fusermount3 is to try 1) full install path if that fails 2) just fusermount3 So tests should be fixed by installing libfuse, setting the s-bit on fusermount3 and then to run the tests.
2024-03-07ci-build.sh: Run ASAN and UBSAN at the same timeBernd Schubert
Also set halt_on_error=1 to make UBSAN to fail if it would find something.
2024-03-07posix_spawn style updatesBernd Schubert
- This adds a wrapper function for the call sequence of posix_spawn and posix_spawnp. - Replaces perror() with fuse_log - the latter can be redirected through the file system log function and gives better end user friendly output - other minor changes, like variable renames - no functional change