aboutsummaryrefslogtreecommitdiffstats
path: root/lib/fuse_lowlevel.c
AgeCommit message (Collapse)AuthorLines
2016-11-16Add support for more detailed error codes from main loopNikolaus Rath-0/+1
2016-10-27Add max_read to fuse_conn_infoNikolaus Rath-0/+8
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.
2016-10-25Use "se" instead of "f" for struct fuse_sessionNikolaus Rath-90/+90
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.
2016-10-24fuse_session_new(): don't accept empty argv, check argv[0]Nikolaus Rath-1/+11
This should help avoid people to accidentally put options into argv[0]. Fixes #100.
2016-10-20Do not close stdout on fuse_session_destroy()Consus-1/+3
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.
2016-10-17fuse_session_new(): accept --debugNikolaus Rath-1/+1
Fixes commit 3e022acf4076. Thanks to Github user mtheall for the review!
2016-10-16Inlined fuse_mount_help() into fuse_lowlevel_help().Nikolaus Rath-1/+6
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).
2016-10-16fuse_session_new: accept -o debug as synonym for -dNikolaus Rath-0/+1
2016-10-15Make --help output more suitable for end-userNikolaus Rath-0/+6
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.
2016-10-15Unify handling of fuse_conn_info optionsNikolaus Rath-99/+0
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.
2016-10-15Merge branch 'fixup-lock-options'Nikolaus Rath-0/+3
2016-10-15Re-activated lost no_remote_*lock options.Nikolaus Rath-0/+3
2016-10-13do_init(): treat command line options consistentlyNikolaus Rath-47/+53
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.
2016-10-13Make -o clone_fd into a parameter of session_loop_mt().Nikolaus Rath-3/+1
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.
2016-10-13Move session options into sub-structNikolaus Rath-29/+28
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.
2016-10-13Use NULL for option processing function where possible.Nikolaus Rath-10/+1
2016-10-13Activate splice_read by default if write_buf is implemented.Nikolaus Rath-0/+1
2016-10-10Factored out LL_OPTIONS macroNikolaus Rath-34/+36
2016-10-10Removed 'async_read' field in fuse_conn_infoNikolaus Rath-8/+11
This is redundant with the capability flags in `wants` and `capable`.
2016-10-10Make several -o NN options work againNikolaus Rath-5/+5
In commit 2ed7af, we accidentally set the default values *after* parsing the command line arguments.
2016-10-10Use "se" instead of "f" for fuse_session pointer where possible.Nikolaus Rath-52/+53
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 ...> }
2016-10-09Fix valgrind warningNikolaus Rath-0/+1
If we don't assign a value to padding, we get a warning about reading uninitialized data when sending the iovec to the kernel.
2016-10-08Removed ``-o big_writes`` optionNikolaus Rath-8/+4
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.
2016-10-05Remove pointless aliasing of fuse_session *se to *fNikolaus Rath-34/+9
This is an overlooked artifact of the fuse_ll-fuse_session merge.
2016-10-04Merge fuse_ll into fuse_session (part 8)Nikolaus Rath-6/+6
Replaced "req->se" with "f" where the latter is already defined.
2016-10-04Merge fuse_ll into fuse_session (part 7)Nikolaus Rath-34/+30
Remove pointless aliasing of "struct fuse_session *se" to "struct fuse_session *f".
2016-10-04Merge fuse_ll into fuse_session (part 5)Nikolaus Rath-13/+3
Fixup fuse_session_new().
2016-10-04Merge fuse_ll into fuse_session (part 4)Nikolaus Rath-9/+3
Merge fuse_ll_destroy() and fuse_session_destroy().
2016-10-04Merge fuse_ll into fuse_session (part 3)Nikolaus Rath-13/+12
Replace se->f with se.
2016-10-04Merge fuse_ll into fuse_session (part 2)Nikolaus Rath-115/+115
Replaced all references to req->f with req->se.
2016-10-04Merge fuse_ll into fuse_session (part 1)Nikolaus Rath-57/+57
Merged the structures, and replaced fuse_ll with fuse_session in all type definitions.
2016-10-03Merge master fuse_chan into fuse_session.Nikolaus Rath-138/+42
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 :-).
2016-10-03fuse_lowlevel_notify_poll(): use master channelNikolaus Rath-5/+4
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.
2016-10-03Store struct fuse_session* in struct fuse_reqNikolaus Rath-4/+5
2016-10-02Added fuse_session_fd()Nikolaus Rath-0/+5
Fixes #59.
2016-10-02Merged fuse_session.c into fuse_lowlevel.cNikolaus Rath-0/+94
This distinction no longer makes sens. fuse_lowlevel.c already contains several session related functions, and fuse_session.c contains various stuff that is more related to the channel interface.
2016-10-02Extended per-file comments.Nikolaus Rath-0/+3
This should make more clear what file contains code for what purpose.
2016-10-02Don't handle --help and --version in fuse_session_new().Nikolaus Rath-40/+27
Help and version messages can be generated using the new fuse_lowlevel_help(), fuse_lowlevel_version(), fuse_mount_help(), and fuse_mount_version() functions. The fuse_parse_cmdline() function has been made more powerful to do this automatically, and is now explicitly intended only for low-level API users. This is a code simplication patch. We don't have to parse for --help and --version in quite as many places, and we no longer have a low-level initialization function be responsible for the (super-high level) task of printing a program usage message. In the high-level API, we can now handle the command line parsing earlier and avoid running other initialization code if we're just going to abort later on.
2016-10-02fuse_mount_opts: don't keep max_read= option.Nikolaus Rath-1/+0
There is no consumer of it down the line.
2016-10-02Add section headings for --help outputNikolaus Rath-2/+2
Also, do not include "General options" in usage message.
2016-10-02Turn struct fuse_chan into an implementation detailNikolaus Rath-24/+48
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-02Renamed fuse_lowlevel_new() to fuse_session_new().Nikolaus Rath-3/+3
2016-10-02Introduce separate mount/umount functions for low-level API.Nikolaus Rath-0/+36
2016-10-02Turned fuse_session_{process,receive}_buf into wrapper functions.Nikolaus Rath-1/+14
2016-10-02Inlined fuse_session_new()Nikolaus Rath-4/+5
This function is only used in one place.
2016-10-01Improve documentation of argument parsing.Nikolaus Rath-0/+1
2016-09-27fuse_lowlevel_notify_*: take struct fuse_session instead of struct fuse_chanNikolaus Rath-20/+20
The only struct fuse_chan that's available to the user application is the one that is returned by fuse_mount. However, this is also permanently available from struct fuse_session. A later patch will therefore remove struct fuse_chan from the public API completely. This patch prepares for this by changing the fuse_lowlevel_notify_* functions to take a struct fuse_session parameter instead of a struct fuse_chan parameter.
2016-06-05Inlined calculate_dirent*_size functionsNikolaus Rath-22/+7
2016-06-05Don't use IFTODT macro.Nikolaus Rath-7/+2
IFTODT is provided by libc to convert from mode_t (as included in e.g. struct fstat) to d_type (unsigned char element of struct dirent, as returned by e.g. readdir). However, fuse actually uses a different struct fuse_dirent with a "type" field of type uint32. In other words, the semantics of (struct fuse_dirent).type are not necessarily the same as those of (struct dirent).d_type.
2016-06-05Inlined fuse_add_direntNikolaus Rath-45/+39