Age | Commit message (Collapse) | Author |
|
Calling through to request_free() from clean_req() causes deadlock since
sshfs.lock is already held by the caller of clean_req().
|
|
Added a secondary check so if a mkdir request fails with EPERM an access request will be tried - returning EEXIST if the access was successful. This matches the correct behaviour expected by applications such as git.
Co-authored-by: Peter Belm <peter.belm@dataalchemist.co.uk>
|
|
|
|
Fix the following build failure with gcc 4.8:
../sshfs.c:1092:2: error: 'for' loop initial declarations are only allowed in C99 mode
for (int i = 0; i < sshfs.max_conns; i++) {
^
This build failure has been added with
https://github.com/libfuse/sshfs/commit/8822b60d9dbd9907065e7999f616b11ddce6d584
Fixes:
- http://autobuild.buildroot.org/results/2dbdc579c55543175716d5f739cabe2ad0864ed6
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
|
If ssh is configured to use "Match exec" and the previous working
directory is the mount point, then the shell (bash) hangs calling
stat() on OLDPWD.
Unset OLDPWD so that this doesn't happen.
Fixes #206.
|
|
The leak was identified with ASAN: configure the project with
meson -Db_sanitize=address to reproduce.
|
|
|
|
References need to be counted per-path, rather than per connection.
|
|
The corresponding bug in OpenSSH has been fixed in
2007 (cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=365541#37), so this shouldn't
be needed anymore.
|
|
(problem introduced in parent commit).
|
|
The -o max_conns=N option causes multiple SSH processes and response processing threads to
be created. This means that e.g. reading a large file no longer blocks all access to the
filesystem.
The connection is chosen by checking the per-connection statistics:
1. Choose connection with least outstanding requests; if it's a tie,
2. choose connection with least directory handles; if it's a tie,
3. choose connection with least file handles; if it's a tie,
4. choose connection which has already been established.
The implementation assumes that the max_conns values will be small; it
uses linear search.
Example benchmark:
With single connection:
$ sshfs -o max_conns=1,workaround=nobuflimit ebox: mnt
$ cat mnt/tmp/bigfile > /dev/null &
$ time find mnt > /dev/null
real 1m50.432s
user 0m0.133s
sys 0m0.467s
With multiple connections:
$ ~/in-progress/sshfs/build/sshfs -o max_conns=5,workaround=nobuflimit ebox: mnt
$ cat mnt/tmp/bigfile > /dev/null &
$ time find mnt > /dev/null
real 1m15.338s
user 0m0.142s
sys 0m0.491s
This feature was implemented to large extend by Timo Savola <timo.savola@iki.fi>. Thanks
to CEA.fr for sponsoring the remaining work to complete this feature and integrate it into
SSHFS!
|
|
Variables of this kind are created in sshfs_open_common() and freed
in sshfs_release(). Since sshfs_release() calls sshfs_flush(), there
can be no pending write requests before at the time of freeing, so
there is no need for reference counting.
|
|
|
|
|
|
* Use logical not for booleans
Fixes a gcc 7.4.0 complaint:
sshfs.c:1743:28: warning: ‘~’ on a boolean expression [-Wbool-operation]
sshfs.c:1743:28: note: did you mean to use logical not?
* strdup argument to keep it alive after function return
Fixes gcc 7.4.0 complaint:
sshfs.c: In function ‘sshfs_opt_proc’:
sshfs.c:3488:50: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
|
|
|
|
|
|
Following-up on [1], there was another instance where blksize
was set to a non-zero value, thus making it impossible to
configure global I/O size on macOS, and using [2] the hard-wired
value of 4096 bytes instead, resulting in uniformly poor
performance [3].
With this patch, setting I/O size to a reasonable large value,
will result in much improved performance, e.g.:
-o iosize=1048576
[1] https://github.com/osxfuse/sshfs/commit/5c0dbfe3eb40100f9277e863926f2e7d7c9a5a4c
[2] https://github.com/libfuse/sshfs/blob/4c21d696e9d46bebae0a936e2aec72326c5954ea/sshfs.c#L812
[3] https://github.com/libfuse/sshfs/issues/11#issuecomment-339407557
|
|
The standard header for the poll(3) interface is poll.h[0]. This prevents
a warning when building with musl libc:
In file included from sshfs.c:44:
/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
^~~~~~~
[0] https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/poll.h.html
|
|
|
|
When using the "ssh_command" option, commands with multiple spaces in a
row will not be properly parsed. Example:
Properly parsed:
ssh_command = "ssh -o IdentityFile=~/.ssh/id_rsa"
Improperly parsed:
ssh_command = "ssh -o IdentityFile=~/.ssh/id_rsa"
This commit changes the ssh_command parsing logic so that both of the
above examples are considered valid and properly handled.
Fixes: #114.
|
|
|
|
The current definition of the clean_req() function produces a compiler
warning as it expects 2 parameters but GHRFunc expects 3. This commit
resolves issue #157.
|
|
The manpage says that -o idmap=user maps the UID and GID, but it
apparently only mapped the UID. The code was in place to map the GID as
well, but it was hidden behind #ifdef __APPLE__. This commit removes
those #ifdefs, and in a couple of cases the code inside an #else, to
make the option behave as documented.
|
|
|
|
|
|
Fuse operations expect negated errno values.
|
|
In libfuse<3, when `fstat_workaround` was true, that meant to always
use the `path` argument to resolve fgetattr instead of the supplied
handle. Before this change, the logic was interpreting
`fstat_workaround` to not use the `path` argument when it was
true. This change reverts to the libfuse<3 behavior.
|
|
|
|
Add workaround to always pass a 0 mode when creating a file
This works around servers that produce an error for any non-zero mode.
|
|
sshfs.rst: update the documentation.
|
|
|
|
Fixes: #96.
|
|
As of kernel 4.14, the FUSE module's + writeback implementation is not
compatible with network filesystems, and there are no imminent plans
to change that.
For more details, see
https://marc.info/?l=fuse-devel&m=150592103107662&w=2 or
As a consequence, the -o unreliable_append option has become obsolete
as well.
Fixes: #93
Fixes: #88
Fixes: #81
|
|
Fixes: #72.
|
|
Fixes: #76.
|
|
|
|
Writeback cache seems to cause dataloss in some situations.
We need to investigate this first.
See https://github.com/libfuse/sshfs/issues/72.
|
|
|
|
It is not clear what this check is supposed to achieve, and it seems to
fail in some situations (cf issue #57).
Fixes: #57.
|
|
Fixes: #73.
|
|
The st_blksize value of struct stat represents the optimal block size
for file I/O operations. FUSE for macOS will use this value when
preforming read or write operations on the file. The smaller st_blksize
is the more context switches are required to complete the operation.
Setting st_blksize to 0 results in FUSE for macOS falling back to the
global I/O size, that can be specified through the "-o iosize=..."
mount-time option.
Fixes osxfuse/osxfuse#389 and osxfuse/sshfs#33
|
|
By default volumes are mounted under /Volumes on macOS. Since macOS
10.12 the /Volumes directory is root-owned. In order to allow non-
privileged users to mount FUSE volumes under /Volumes FUSE will create
non-existent mount points automatically.
Fixes osxfuse/sshfs#27
|
|
wrctr cannot be used without having been initialized,
but the compiler is too dumb to see that.
|
|
Fixes: #7
|
|
libfuse 3.0.0 is rather new and not widely used yet, so requiring
libfuse 3.1.0 right away shouldn't be a problem.
|
|
|
|
|
|
This re-enables support for nullpath_ok. The cache remains disabled.
|
|
This commit enables the use of readdir() instead of getdir(). It also
completely disables the cache and the nullpath_ok feature. This will
be fixed in the next commits.
|