240 Commits

Author SHA1 Message Date
Amir Goldstein 0f2cdd389c passthrough_hp: excercise reusing inode numbers
Before last unlink() release the reference on inode.fd to allow reuse
of underlying fs inode number, mark the server inode "deleted" and bump
it's generation counter.

When same inode number is found on lookup(), the server inode object will
be reused as well.

Skip this when inode has an open file and when writeback cache is enabled.

This will be used to verify inode reuse bug fix in the kernel.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2021-06-14 09:13:12 +01:00
Christian Menges 79286adbe5 Cuse example: Fix memory leak (#607)
* cuse example: fix memory leak

* Travis CI: re-enable leak checking
2021-06-09 09:04:41 +01:00
Christian Menges f078bbf2cb Fix memory leaks in examples (#604) 2021-05-09 11:12:01 +01:00
Christian Menges 61ed2bca90 Bump cxxopts from 2.2.0 to 2.2.1 (#602) 2021-05-09 10:00:57 +01:00
Junichi Uekawa 01d8ebe436 Fix doxygen warnings. (#600)
Some parameters were undocumented, and @file does not mean to expand current file name.
2021-05-07 10:43:30 +01:00
Jean-Pierre André 3dec359766 Fix returning d_ino and d_type by readdir(3) in non-plus mode
When not using the readdir_plus mode, the d_type was not returned,
and the use_ino flag was not used for returning d_ino.

This patch fixes the returned values for d_ino and d_type by readdir(3)

The test for the returned value of d_ino has been adjusted to also
take the d_type into consideration and to check the returned values in
both basic readdir and readdir_plus modes. This is done by executing
the passthrough test twice.

Co-authored-by: Jean-Pierre André <jpandre@users.sourceforge.net>
2021-03-18 09:52:30 +00:00
Martin Pärtel 884b57886b Fix returning inode numbers from readdir() in offset==0 mode. (#584)
- Test added for all passthrough examples.
- passthrough.c uses offset==0 mode. The others don't.
- passthrough.c changed to set FUSE_FILL_DIR_PLUS to make the test pass.
- This fixes #583.
2021-02-03 09:53:21 +00:00
Alan Somers 272e8447b2 Fix FUSE_COPY_FILE_RANGE in the passthrough example (#575)
Only close the file descriptors if they were just opened.  Otherwise,
the second FUSE_COPY_FILE_RANGE operation on any given file will fail
with EBADF.
2021-01-01 19:34:58 +00:00
Rethan 10285c2dd4 examples/cuse_client: add include file to eliminate compiler warning (#568)
Compiler warning about close(fd), add include file to fix.

Signed-off-by: haoyixing <haoyixing@kuaishou.com>
Co-authored-by: haoyixing <haoyixing@kuaishou.com>
2020-11-24 09:28:13 +00:00
Zhiqiang Liu 5bc4fffe9c example/cuse_client.c: fix fd leakage problem
In cuse_client.c, fd should be closed before return.
Otherwise, it will cause fd leakage problem.

Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
Signed-off-by: Haotian Li <lihaotian9@huawei.com>
2020-11-06 19:26:03 +00:00
Zhiqiang Liu ce2f3be2fd ioctl_client.c: fix potential fd leakage problem
In ioctl_client.c, fd is not closed before return, thus
it will cause fd leakage problem.

Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
Signed-off-by: Haotian Li <lihaotian9@huawei.com>
2020-11-06 19:26:03 +00:00
Etienne Dublé e0ffce59eb Allow caching symlinks in kernel page cache. (#551)
This commit defines a new capability called `FUSE_CAP_CACHE_SYMLINKS`.
It is off by default but you can now enable it by setting this flag in
in the `want` field of the `fuse_conn_info` structure.

When enabled, the kernel will save symlinks in its page cache,
by making use of the feature introduced in kernel 4.20:
https://github.com/torvalds/linux/commit/5571f1e65486be025f73fa6aa30fb03725d362a2
2020-09-20 19:08:15 +01:00
AKowshik 2af7d3facd Updated example code to work with new API (#547) 2020-09-09 20:17:06 +01:00
AKowshik 2b30c0b408 Fixed typo in command to compile program (#536) 2020-08-09 12:35:43 +01:00
Miklos Szeredi 05a2ec2a06 passthrough_ll: remove symlink fallbacks (#514)
* passthrough_ll/hp: remove symlink fallbacks

Path lookup in the kernel has special rules for looking up magic symlinks
under /proc.  If a filesystem operation is instructed to follow symlinks
(e.g. via AT_SYMLINK_FOLLOW or lack of AT_SYMLINK_NOFOLLOW), and the final
component is such a proc symlink, then the target of the magic symlink is
used for the operation, even if the target itself is a symlink.  I.e. path
lookup is always terminated after following a final magic symlink.

I was erronously assuming that in the above case the target symlink would
also be followed, and so workarounds were added for a couple of operations
to handle the symlink case.  Since the symlink can be handled simply by
following the proc symlink, these workardouds are not needed.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Co-authored-by: Miklos Szeredi <mszeredi@redhat.com>
2020-05-14 20:17:50 +01:00
Fabrice Fontaine 2da327ee09 Do not require C++ compiler for building
Fixes:
 - http://autobuild.buildroot.org/results/a6e64213f2910b2b81e79cb1e96e558413d7f70a

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-04-20 20:20:19 +01:00
Dr. David Alan Gilbert 4e719a9745 State GPL version in comment (#485)
IN a bunch of comments we say 'under the terms of the GNU GPL', make
it clear this is GPLv2 (as LICENSE says).

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
2020-03-13 16:46:44 +00:00
philmd 549b1a7f49 passthrough_ll: Remove unneeded variable assignment (#501)
Fix warning reported by Clang static code analyzer:

  example/passthrough_ll.c:390:5: warning: Value stored to 'saverr' is never read
      saverr = ENOMEM;
      ^        ~~~~~~

Fixes: 4a92a82f2e
Reported-by: Clang Static Analyzer
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
2020-02-24 21:42:41 +00:00
maxice8 fbf05ad0aa Include limits.h because of PATH_MAX usage. (#498)
Fixes build with musl libc on Alpine Linux.
2020-02-04 09:57:25 -05:00
zsugabubus a9c0f2919f examples: mark ops variables constant (#496) 2020-01-30 11:17:25 -05:00
Misono Tomohiro 9bd8e34344 passthrough_ll: Use cache_readdir for directory open (#492)
Upstreamed from:
  https://www.redhat.com/archives/virtio-fs/2020-January/msg00106.html

Since keep_cache(FOPEN_KEEP_CACHE) has no effect for directory as
described in fuse_common.h, use cache_readdir(FOPEN_CACHE_DIR) for
diretory open when cache=always mode.

Signed-off-by: Misono Tomohiro <misono.tomohiro@jp.fujitsu.com>
2020-01-24 15:53:32 +00:00
Dr. David Alan Gilbert 586775ee0a passthrough_ll: pass correct errno to fuse_reply_err()
fuse_reply_err() expects the error code, not its negative.

Upstreamed from https://www.redhat.com/archives/virtio-fs/2020-January/msg00000.html. Original commit message:

lo_copy_file_range() passes -errno to fuse_reply_err() and then fuse_reply_err()
changes it to errno again, so that subsequent fuse_send_reply_iov_nofree() catches
the wrong errno.(i.e. reports "fuse: bad error value: ...").

Make fuse_send_reply_iov_nofree() accept the correct -errno by passing errno
directly in lo_copy_file_range().

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Eryu Guan <eguan@linux.alibaba.com>

Co-authored-by: Xiao Yang <ice_yangxiao@163.com>
2020-01-06 20:32:51 +00:00
Bill Zissimopoulos f340eb3d5d Make ioctl prototype conditional on FUSE_USE_VERSION. (#482)
Define FUSE_USE_VERSION < 35 to get old ioctl prototype
with int commands; define FUSE_USE_VERSION >= 35 to get
new ioctl prototype with unsigned int commands.

Fixes #463.
2019-12-31 09:58:57 +00:00
Albert Chen f17110b721 Added support for FUSE_EXPLICIT_INVAL_DATA to enable (#474) 2019-11-27 09:36:30 +00:00
Yuri Per 93b44b4db3 Implement lseek operation (#457) 2019-11-03 09:44:31 +00:00
Stefan Hajnoczi 24f64cbcff passthrough_ll: drop lo_dirp->fd field (#464)
fdopendir(3) takes ownership of the file descriptor.  The presence of
the lo_dirp->fd field could lead to someone incorrectly adding a
close(d->fd) cleanup call in the future.

Do not store the file descriptor in struct lo_dirp since it is unused.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
2019-11-03 09:43:43 +00:00
Stefan Hajnoczi cc2300d3ed passthrough_ll: use fuse_log() instead of err()/errx()
Send everything through fuse_log() instead of writing directly to
stderr.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2019-09-10 14:25:15 +01:00
Stefan Hajnoczi fb8e4d161b passthrough_ll: use fuse_log()
Make use of fuse_log() instead of printing directly to stderr.  This
demonstrates unified logging and also caught the fact that I forgot to
add fuse_log APIs to lib/fuse_versionscript.  So it's basically a test
case :).

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2019-09-10 14:25:15 +01:00
Dr. David Alan Gilbert a737215fd7 passthrough_ll: fix fallocate variant ifdefs (#449)
If fallocate isn't available we incorrectly check for the value of
HAVE_POSIX_FALLOCATE rather than it being defined.
We also fail to initialise 'err' in the case where neither are defined.

Fixes: 5fc562c90d ("Add fallocate and use it instead of ...")

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
2019-09-09 10:14:02 +01:00
Alan Somers 1f842c996e passthrough: fix unix-domain sockets on FreeBSD (#413)
FreeBSD doesn't allow creating sockets using mknod(2). Instead, one has to use socket(2)
and bind(2).  Add appropriate logic to the examples and add a test case.
2019-05-15 21:35:57 +01:00
Nikolaus Rath 7a5e1a9a9a Fix includes of non-system headers.
Fixes: #415.
2019-05-12 11:00:15 +01:00
Nikolaus Rath 055f272517 Added new example filesystem
passthrough_hp puts emphasis and performance and correctness, rather
than simplicity.
2019-05-09 14:16:37 -05:00
Nikolaus Rath 28d3699ce1 Fixed permissions. 2019-05-05 13:33:20 -04:00
Liu Bo 5fc562c90d Add fallocate and use it instead of posix_fallocate if possible (#398)
fuse.ko has supported FALLOC_FL_KEEP_SIZE and FALLOC_FL_PUNCH_HOLE at this
moment and more modes may be supported in the future.

fallocate(2) supports modes while posix_fallocate(2) does not, so this
makes lo_fallocate use fallocate(2) instead.

Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
2019-04-18 09:55:42 +01:00
Chad Austin 6439231f9b Add documentation for opting out of opendir and releasedir (#391) 2019-04-16 19:44:59 +01:00
Jean-Pierre André a1bff7dbe3 Defined the (*ioctl)() commands as unsigned int (#381)
Instead of the Posix ioctl(2) command, Linux uses its own variant of ioctl()
in which the commands are requested as "unsigned long" and truncated to
32 bits by the fuse kernel module. Transmitting the commands to user space
file systems as "unsigned int" is a workaround for processing ioctl()
commands which do not fit into a signed int.
2019-03-11 17:35:23 +00:00
Alan Somers 1b7d2b8862 Document fuse_fsync_in.fsync_flags and remove magic numbers (#375) 2019-03-08 21:24:50 +00:00
Forty-Bot 1cce958bb6 hello_ll: Fix null pointer dereference (#363)
If hello_ll is invoked without a mountpoint, it will try to call
fuse_session_mount anyway with the NULL mountpoint (which then causes a
segfault). Print out a short help message instead (taken from
passthrough_ll.c).
2019-02-25 21:06:42 +00:00
Miklos Szeredi 63d53ecc3a passthrough_ll: lo_create() should honor CACHE_NEVER (#345)
lo_create() did not honour CACHE_NEVER in lo_create(), which has an effect
on how I/O is performed after the open.

The value of CACHE_ALWAYS, which results in setting fi->keep_cache, only
has an effect for the state of the cache at open, and since the file was
just created the cache is always empty.  Hence setting this doesn't have an
effect on lo_create(), but keep it for symmetry with lo_open().
2019-01-22 20:03:00 +00:00
Nikolaus Rath 3bc72dafd2 Fixed memory leak.
Fixes: #338.
2018-12-29 14:52:51 +00:00
Nikolaus Rath d4a7ba44b0 Fix fd/inode leak
If do_readdir() calls do_lookup(), but the latter fails, we still have
to return any entries that we already stored in the readdir buffer to
avoid leaking inodes.

do_lookup() may fail if e.g. we reach the file descriptor limit.
2018-11-27 20:58:36 +00:00
Nikolaus Rath d1ab94c355 Avoid needless telldir() call. 2018-11-24 20:55:23 +00:00
Nikolaus Rath c3c3a500a5 Fixed lookup-count leak in do_readdir(). 2018-11-24 20:55:23 +00:00
Nikolaus Rath 59dc22b12f Don't segfault when called with -h.
Fixes: #327
2018-11-24 20:51:34 +00:00
Niels de Vos 2548c4b83a examples: add copy_file_range() support to passthrough(_fh)
The passthrough example filesystem can be used for validating the API
and the implementation in the FUSE kernel module.
2018-11-19 12:33:56 +00:00
Nikolaus Rath 30415af0dc Don't crash if mountpoint is not specified.
Fixes: #319.
2018-11-09 10:45:27 +00:00
Miklos Szeredi 33e8796d56 passthrough_ll: initialize unused memory
For '.' and '..' entries only the file type in e.attr.st_mode and the inode
number in e.attr.st_ino are used.  But it's prudent to at least initialize
the other fields of struct fuse_entry_param as well, instead of using
random values from the stack.
2018-10-10 10:49:48 +01:00
Miklos Szeredi 7c08db3f93 passthrough_ll: allow configuring caching
Caching can be controlled with the following options:

 "cache=never": disable caching
 "cache=normal": enable caching but also refresh after the timeout
 "cache=always": never refresh cache

The timeout can be controlled with the "timeout=SEC" option, where SEC is
the number of seconds and can be an arbitrary non-negative floating point
number.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
2018-10-10 10:49:48 +01:00
Miklos Szeredi fc9f632a21 passthrough_ll: add *xattr() operations
The extended attribute functionality is enabled with the "xattr" option
(default) and disabled with the "no_xatt" option.

New operations added:

 - getxattr
 - listxattr
 - setxattr
 - removexattr

Caveat: none of these operations will work on a symbolic link, because it's
difficult to implement that without races that can result in incorrect
operation.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
2018-10-10 10:49:48 +01:00
Miklos Szeredi e8225e8e87 passthrough_ll: add flock()
Conditionally enable flock() locking on underlying filesystem, based on the
flock/no_flock options.  Default is "no_flock", meaning locking will be
local to the fuse filesystem and won't be propagated to the filesystem
passed through.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
2018-10-10 10:49:48 +01:00