Giuseppe Scrivano
c9bbc94ab6
fuse-overlayfs: support running without upper layer
...
when there is no upper layer specified, fail every read operation with
EROFS.
Closes: https://github.com/containers/fuse-overlayfs/issues/100
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-19 21:33:35 +02:00
Giuseppe Scrivano
45c902ea87
main.c: reload the directory on stat
...
make sure the directory is reloaded so the correct number of links can
be retrieved.
Closes: https://github.com/containers/fuse-overlayfs/issues/131
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-15 12:55:55 +02:00
Daniel J Walsh
504862881f
Merge pull request #129 from giuseppe/skip-whiteout-creation-if-not-needed
...
main: skip whiteout creation if not needed
2019-10-03 14:17:38 -04:00
Daniel J Walsh
a9f6140602
Merge pull request #128 from giuseppe/restore-suid-on-cacheback-write
...
writeback: restore suid mode after write
2019-10-03 14:17:18 -04:00
Giuseppe Scrivano
3a31451fe3
main: skip whiteout creation if not needed
...
if the file is present only on the upper layer, do not create a
whiteout when it is created. Previously it was looking only at the
parent directory.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-03 16:11:45 +02:00
Giuseppe Scrivano
86b9cf5a83
writeback: restore suid mode after write
...
restore the inode mode if there is a writepage request that could
reset the setuid bit.
Closes: https://github.com/containers/fuse-overlayfs/issues/127
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-03 16:07:02 +02:00
Giuseppe Scrivano
163510e592
main: store the new mode after chmod
...
after a successful chmod, store the new mode for the ino.
Closes: https://github.com/containers/fuse-overlayfs/issues/124
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-02 14:22:13 +02:00
Giuseppe Scrivano
614f57d8f6
main: fix skip whiteout deletion optimization
...
fix the lookup function to report also a whiteout node, instead of
NULL. This is required to correctly delete the whiteout file when it
exists.
Closes: https://github.com/containers/fuse-overlayfs/issues/122
Signed-off-by: Giuseppe Scrivano <giuseppe@scrivano.org>
2019-09-23 22:35:02 +02:00
Giuseppe Scrivano
20e8529c4e
ioctl: do not reuse fi->fh for directories
...
for directories, it points to a structure, not an open file
descriptor.
Signed-off-by: Giuseppe Scrivano <giuseppe@scrivano.org>
2019-09-23 22:34:20 +02:00
Giuseppe Scrivano
b0a9bdaa64
Merge pull request #120 from giuseppe/setattr-no-require-wronly
...
set_attrs: don't require write to S_IFREG
2019-09-18 13:27:51 +02:00
Nathaniel Wesley Filardo
69dcdb3af2
set_attrs: don't require write to S_IFREG
...
It's perfectly possible to set attributes by being the file's owner; one
does not need write access to the contents.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-09-13 15:06:14 +02:00
Tyler Ramer
4a9906739a
Fix typo in set_limits
...
- Setting and getting nofile not process limits
Authored-by: Tyler Ramer <tramer@pivotal.io>
2019-09-11 09:17:37 -04:00
Giuseppe Scrivano
ed99282f27
main: check whether writeback is supported
...
disable writeback if it is not supported by FUSE.
Closes: https://github.com/containers/fuse-overlayfs/issues/116
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-09-09 17:58:26 +02:00
Giuseppe Scrivano
35499daa30
main: use st_dev for the ino key
...
when creating the key for the ino, also use the source st_dev.
Closes: https://github.com/containers/fuse-overlayfs/issues/112
Signed-off-by: Giuseppe Scrivano <giuseppe@scrivano.org>
2019-08-29 23:21:44 +02:00
Giuseppe Scrivano
fc4115f5c4
main: avoid hash map lookup when possible
...
skip reading from the inodes hash table if the inode is already
known.
Signed-off-by: Giuseppe Scrivano <giuseppe@scrivano.org>
2019-08-29 23:02:54 +02:00
Giuseppe Scrivano
7251f20c4b
main: correctly read inode for unix sockets
...
correctly read the inode when processing a UNIX socket.
regression introduced by b25bbde64dc5d06373e087d7fae6367acf1fd09e.
Closes: https://github.com/containers/fuse-overlayfs/issues/110
Signed-off-by: Giuseppe Scrivano <giuseppe@scrivano.org>
2019-08-25 23:06:32 +02:00
Giuseppe Scrivano
b25bbde64d
main: introduce inodes cache
...
introduce a hash map to refer from an inode to the file paths.
A recent change where we enable FUSE writeback by default uncovered an
underlying issue in fuse-overlayfs where changes to a file with
multiple links would not be visible from the other link.
For each inode, maintain a list of nodes that refer to it, so that we
can still access it when a link is removed and more importantly we can
use the inode value with FUSE.
Closes: https://github.com/containers/fuse-overlayfs/issues/108
Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1744109
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-08-23 15:27:12 +02:00
Giuseppe Scrivano
9e110ad55c
main, listxattr: open the file in read only mode
...
Signed-off-by: Giuseppe Scrivano <giuseppe@scrivano.org>
2019-08-15 23:14:25 +02:00
Giuseppe Scrivano
08136d8826
main: if the path is a dir, work on the proc path
...
when reading xattr, if the path cannot be open as it is a directory,
operate on the /proc/fd/FD path.
Closes: https://github.com/containers/fuse-overlayfs/issues/104
Signed-off-by: Giuseppe Scrivano <giuseppe@scrivano.org>
2019-08-15 21:55:25 +02:00
Giuseppe Scrivano
3b27676c88
main: use cached st_mode
...
node already keeps st_mode in cache so there is no need of the
additional stat to find out the file type.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-08-11 23:44:57 +02:00
Giuseppe Scrivano
1faf62ce32
main: simplify setattr
...
always use the /proc/self/fd/FD path when the path doesn't refer to a
directory or regular file.
commit 0b0c7a3a01dae4de65ba79016a111d794c1d1719 introduced the
regression.
Closes: https://github.com/containers/fuse-overlayfs/issues/99
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-08-07 23:58:06 +02:00
Giuseppe Scrivano
5e325f7d9c
main: fix type for flistxattr return
...
the return type is ssize_t, not size_t.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-31 16:26:01 +02:00
Giuseppe Scrivano
56cc4d3d61
main: fix warnings reported by lgtm.com
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-29 13:36:07 +02:00
Giuseppe Scrivano
cf86b89adc
main: open the fd correctly for reading xattrs
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-29 13:35:23 +02:00
Giuseppe Scrivano
cecbcbb7ad
main: make sure the work directory is empty
...
make sure the work directory is empty when fuse-overlayfs starts.
Closes: https://github.com/containers/fuse-overlayfs/issues/93
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-29 13:35:22 +02:00
Giuseppe Scrivano
4e32e8907d
main: fix fd validity check
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 17:56:30 +02:00
Giuseppe Scrivano
45b8bb85d4
main, rename: use cleanup_close
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 17:50:58 +02:00
Giuseppe Scrivano
74f047933b
main: mark dir loaded only if timeout>0
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 16:10:07 +02:00
Giuseppe Scrivano
49c88306d7
main, open: avoid a stat when creating a file
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 15:46:55 +02:00
Giuseppe Scrivano
1a3ae79283
main: fix memory leak
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 15:46:54 +02:00
Giuseppe Scrivano
22246f29f3
main, xattr: fix memory leak
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 15:46:54 +02:00
Giuseppe Scrivano
7e54c97400
main: fix read after free
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 15:46:53 +02:00
Giuseppe Scrivano
79c802f61e
main, open: avoid a lookup if the node is known
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 10:12:11 +02:00
Giuseppe Scrivano
80a0260043
file, open: do not double close fd
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 10:12:10 +02:00
Giuseppe Scrivano
dd744c7fc2
file, open: avoid deleting the whiteout if possible
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 10:12:09 +02:00
Giuseppe Scrivano
6dbc45b821
file, open: create directly the file if possible
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-25 10:12:08 +02:00
Giuseppe Scrivano
348f60a277
file, open: move code to create a file to its function
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-24 17:05:51 +02:00
Giuseppe Scrivano
2404d5f9b1
main, mkdir: create directly the directory if possible
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-24 16:38:01 +02:00
Giuseppe Scrivano
3286532636
main, symlink: avoid a chown if it is not needed
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-24 16:10:14 +02:00
Giuseppe Scrivano
a77edee351
main, open: avoid a chown if it is not needed
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-24 16:09:08 +02:00
Giuseppe Scrivano
0749dd7fb8
main, copyup: avoid a chown if it is not needed
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-24 16:04:38 +02:00
Giuseppe Scrivano
74fa25112a
main, mkdir: avoid a chown if it is not needed
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-24 16:03:58 +02:00
Giuseppe Scrivano
1395753e1a
main, fsync: if fsync is disabled return ENOSYS
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-23 16:14:40 +02:00
Giuseppe Scrivano
99206771b5
main, symlink: skip delete whiteout if not needed
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-23 16:14:39 +02:00
Giuseppe Scrivano
c174cef9f3
main, mkdir: delete whiteout only if necessary
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-23 16:14:38 +02:00
Giuseppe Scrivano
1651770837
main: accept atime/noatime
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-23 16:14:37 +02:00
Giuseppe Scrivano
fcfd937a3d
main, unlink: do not create a whiteout if not necessary
...
if the parent dir is on the upper layer only, there is no need to
create a whiteout file.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-23 16:14:37 +02:00
Giuseppe Scrivano
87deb1d458
main: assume workdir is empty on startup
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-23 16:14:36 +02:00
Giuseppe Scrivano
c99226b70b
main: skip RENAME_WHITEOUT if we cannot use mknod
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-23 16:14:35 +02:00
Giuseppe Scrivano
a4ebbc8361
main: give hint on debugging being disabled
...
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-23 16:14:34 +02:00