aboutsummaryrefslogtreecommitdiff
path: root/lib/fuse_lowlevel.c
Commit message (Collapse)AuthorAge
* Spelling (#223)Gravatar Josh Soref2017-11-27
| | | Fix spelling errors
* do_init(): print missing capabilities if there are any.Gravatar Nikolaus Rath2017-08-25
|
* Document and unify error codes of fuse_lowlevel_notify_*Gravatar Nikolaus Rath2017-08-22
|
* Fix unused variable warnings under FreeBSD.Gravatar Nikolaus Rath2017-08-11
|
* Fix support for FUSE_POSIX_ACLGravatar Marcin Sulikowski2017-08-07
| | | | | | | | | | | | | | The kernel may set the FUSE_POSIX_ACL flag in the FUSE_INIT request to notify the userspace daemon that the OS does support POSIX ACLs for FUSE file systems. If the filesystem implementation wants to enable POSIX ACLs, it has to reply with the FUSE_POSIX_ACL flag set. However, the reply to the kernel never includes this flag, even if the implementation expresses the need by setting the FUSE_CAP_POSIX_ACL flag in the fuse_conn_info::want variable passed to its init callback. We modify the library to handle requests for FUSE_CAP_POSIX_ACL correctly, i.e., set the FUSE_POSIX_ACL flag in the FUSE_INIT reply to the kernel. Signed-off-by: Marcin Sulikowski <marcin.sulikowski@editshare.com>
* Fixed description of struct fuse_conn_info->time_granGravatar Nikolaus Rath2017-07-08
| | | | | At least on Linux kernel 4.9, a value of zero gives more than 1-sec accuracy.
* getgroups(): clarify codeGravatar Nikolaus Rath2017-06-05
| | | | | | read() return value should always be positive or -1. However, since we cast to unsigned a little later, it's clearer to check for non-negativity.
* Fix comparison of integers of different signsGravatar Angelo G. Del Regno2017-06-05
| | | | | | | | Some variables of different size and sign were getting compared without any safe casting. The build system also throws warnings at this and, being this library used for filesystems, it's really important to ensure stability.
* make buffer size match kernel max transfer sizeGravatar Carlos Maiolino2017-04-20
| | | | | | | | | | | | | | | Currently libfuse has a hardcoded buffer limit to 128kib, while fuse kernel module has a limit up to 32 pages. This patch changes buffer limit to match the current page size, instead of assuming 4096 bytes pages, enabling architectures with bigger pages to use larger buffers, improving performance. Also, add a new macro (HEADER_SIZE) to specify the space needed to accommodate the header, making it easier to understand why those extra 4096 bytes are needed Signed-off-by: Carlos Maiolino <cmaiolino-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
* Improve documentation of fuse_session_unmountGravatar Nikolaus Rath2016-11-29
|
* Make handling of -oallow_root easier to understandGravatar Nikolaus Rath2016-11-22
| | | | | | -oallow_root is handled in userspace, and requires passing -oallow_other to the kernel. This patch should make the code easier to understand and avoid the confusion that gave rise to issue #86.
* Add support for FUSE_HANDLE_KILLPRIVGravatar Nikolaus Rath2016-11-22
| | | | Fixes #116.
* Add support for FUSE_POSIX_ACLGravatar Nikolaus Rath2016-11-22
| | | | Fixes #117.
* Added support for FUSE_PARALLEL_DIROPSGravatar Nikolaus Rath2016-11-22
| | | | | | Enabled by default since we haven't released libfuse 3.0 yet :-). Fixes #112.
* Enable more capabilities by default, and document defaults.Gravatar Nikolaus Rath2016-11-16
| | | | Fixes #112.
* Abort if fs requests capabilities not supported by kernel.Gravatar Nikolaus Rath2016-11-16
| | | | See also issue #114.
* Fail more nicely on max_read mismatchGravatar Nikolaus Rath2016-11-16
| | | | | Instead of abort()ing, close the session properly and return an error code.
* Add support for more detailed error codes from main loopGravatar Nikolaus Rath2016-11-16
|
* Add max_read to fuse_conn_infoGravatar Nikolaus Rath2016-10-27
| | | | | | | | | | Eventually, this setting should be negotiated in the filesystem's init() handler (like e.g. max_write). However, this requires corresponding changes in the FUSE kernel module. In preparation for this (and to allow a transition period) we already allow (and require) filesystems to set the value in the init() handler in addition to the mount option. The end-goal is tracked in issue #91.
* Use "se" instead of "f" for struct fuse_sessionGravatar Nikolaus Rath2016-10-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The fuse_session pointer is sometimes called f and at other times se. The former is an artifact from the time when there still was a separate struct fuse_ll object. For consistency and to easy maintenance, this patch changes the name of the fuse_session pointer to "se" wherever possible. This patch was generated by the following Coccinelle script: @@ symbol f, se; @@ struct fuse_session * -f +se ; <... -f +se ...> @@ expression expr; @@ struct fuse_session * -f +se = expr; <... -f +se ...> @@ identifier fn; @@ fn(...,struct fuse_session * -f +se ,...) { <... -f +se ...> } Due to its complexity, the do_init() function had to be commented out and then patched manually.
* fuse_session_new(): don't accept empty argv, check argv[0]Gravatar Nikolaus Rath2016-10-24
| | | | | | | This should help avoid people to accidentally put options into argv[0]. Fixes #100.
* Do not close stdout on fuse_session_destroy()Gravatar Consus2016-10-20
| | | | | | | If fuse_session_mount() fails (or was never called in the first place) we end up with the default fd value which happens to be 0. It hurts long-running processes, which lifetime extends beyond session's lifetime.
* fuse_session_new(): accept --debugGravatar Nikolaus Rath2016-10-17
| | | | | | Fixes commit 3e022acf4076. Thanks to Github user mtheall for the review!
* Inlined fuse_mount_help() into fuse_lowlevel_help().Gravatar Nikolaus Rath2016-10-16
| | | | | | | | | Both the BSD and Linux implementation actually accept mostly the same FUSE-specific mount options. Up to now, the BSD help function appended the output of ``mount_fusefs --help``, but looking at http://www.unix.com/man-page/freebsd/8/mount_fusefs/ this is likely more confusing than helpful (since the user is not actually invoking mount_fusefs directly, most of the options don't make sense).
* fuse_session_new: accept -o debug as synonym for -dGravatar Nikolaus Rath2016-10-16
|
* Make --help output more suitable for end-userGravatar Nikolaus Rath2016-10-15
| | | | | | | We now only list options that are potentially useful for an end-user (and unlikely to accidentally break a file system). The full list of FUSE options has been moved to the documentation of the fuse_new() and fuse_session_new() functions.
* Unify handling of fuse_conn_info optionsGravatar Nikolaus Rath2016-10-15
| | | | | | Instead of using command line options to modify struct fuse_conn_info before and after calling the init() handler, we now give the file system explicit control over this.
* Merge branch 'fixup-lock-options'Gravatar Nikolaus Rath2016-10-15
|\
| * Re-activated lost no_remote_*lock options.Gravatar Nikolaus Rath2016-10-15
| |
* | Make -o clone_fd into a parameter of session_loop_mt().Gravatar Nikolaus Rath2016-10-13
| | | | | | | | | | | | This option really affects the behavior of the session loop, not the low-level interface. Therefore, it does not belong in the fuse_session object.
* | Move session options into sub-structGravatar Nikolaus Rath2016-10-13
| | | | | | | | | | | | | | The session options are used only once to determine the proper conn->want flags. It is nice to have them clearly separated from the other struct fuse_session members that are used throughout the life of the file system.
* | Use NULL for option processing function where possible.Gravatar Nikolaus Rath2016-10-13
| |
* | Activate splice_read by default if write_buf is implemented.Gravatar Nikolaus Rath2016-10-13
|/
* do_init(): treat command line options consistentlyGravatar Nikolaus Rath2016-10-13
| | | | | | | Previously, some command line options would change the FUSE defaults but leave the final value to the file systems `init` handler while others would override any changes made by `init`. Now, command line options do both: they modify the default, *and* take precedence.
* Factored out LL_OPTIONS macroGravatar Nikolaus Rath2016-10-10
|
* Removed 'async_read' field in fuse_conn_infoGravatar Nikolaus Rath2016-10-10
| | | | This is redundant with the capability flags in `wants` and `capable`.
* Make several -o NN options work againGravatar Nikolaus Rath2016-10-10
| | | | | In commit 2ed7af, we accidentally set the default values *after* parsing the command line arguments.
* Use "se" instead of "f" for fuse_session pointer where possible.Gravatar Nikolaus Rath2016-10-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | These changes were generated with the following Coccinelle semantic patch: @@ symbol f, se; // avoid unneeded warnings from Coccinelle @@ struct fuse_session * -f +se ; <... -f +se ...> @@ identifier fn; @@ fn(...,struct fuse_session * -f +se ,...) { <... -f +se ...> }
* Fix valgrind warningGravatar Nikolaus Rath2016-10-09
| | | | | If we don't assign a value to padding, we get a warning about reading uninitialized data when sending the iovec to the kernel.
* Removed ``-o big_writes`` optionGravatar Nikolaus Rath2016-10-08
| | | | | | This option is obsolete and should always be enabled. File systems that want to limit the size of write requests should use the ``-o max_write=<N>`` option instead.
* Remove pointless aliasing of fuse_session *se to *fGravatar Nikolaus Rath2016-10-05
| | | | This is an overlooked artifact of the fuse_ll-fuse_session merge.
* Merge fuse_ll into fuse_session (part 8)Gravatar Nikolaus Rath2016-10-04
| | | | Replaced "req->se" with "f" where the latter is already defined.
* Merge fuse_ll into fuse_session (part 7)Gravatar Nikolaus Rath2016-10-04
| | | | | Remove pointless aliasing of "struct fuse_session *se" to "struct fuse_session *f".
* Merge fuse_ll into fuse_session (part 5)Gravatar Nikolaus Rath2016-10-04
| | | | Fixup fuse_session_new().
* Merge fuse_ll into fuse_session (part 4)Gravatar Nikolaus Rath2016-10-04
| | | | Merge fuse_ll_destroy() and fuse_session_destroy().
* Merge fuse_ll into fuse_session (part 3)Gravatar Nikolaus Rath2016-10-04
| | | | Replace se->f with se.
* Merge fuse_ll into fuse_session (part 2)Gravatar Nikolaus Rath2016-10-04
| | | | Replaced all references to req->f with req->se.
* Merge fuse_ll into fuse_session (part 1)Gravatar Nikolaus Rath2016-10-04
| | | | | Merged the structures, and replaced fuse_ll with fuse_session in all type definitions.
* Merge master fuse_chan into fuse_session.Gravatar Nikolaus Rath2016-10-03
| | | | | | | | | | | | | | | | | | This is a code simplification patch. - It confines most of the implementation channel implementation into fuse_loop_mt (which is its only user). - It makes it more obvious in the code that channels are only ever used when using -o clone_fd and multi-threaded main loop. - It simplies the definition of both struct fuse_session and struct fuse_chan. - Theoretically it should result in (minuscule) performance improvements when not using -o clone_fd. - Overall, it removes a lot more lines of source code than it adds :-).
* fuse_lowlevel_notify_poll(): use master channelGravatar Nikolaus Rath2016-10-03
| | | | | | | | | | | | | | | | In theory, a poll handle could hang around much longer than the worker thread that creates it. Furthermore, the thread that created the pollhandle is no more likely to call fuse_lowlevel_notify_poll() than any other thread. In theory, this would have kept the channel alive for much longer than necessary. In practice, there seems to have been a bug that prevented this - and instead allowed the channel to be destroyed while there was still a pollhandle referring to it. Instead of fixing this by calling fuse_chan_get() and fuse_chan_put() in do_poll() and fuse_pollhandle_destroy(), we simply transmit poll notifications over the master channel now.