aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)AuthorLines
2016-06-20libfuse/fuse_daemonize: wait until daemon child process is ready (#55)Hendrik Brueckner-0/+14
Mounting a FUSE file system remotely using SSH in combination with pseudo-terminal allocation (-t), results in "Transport endpoint is not connected" errors when trying to access the file system contents. For example: # ssh -t root@localhost "cmsfs-fuse /dev/disk/by-path/ccw-0.0.0190 /CMSFS" Connection to localhost closed. # ls /CMSFS ls: cannot access '/CMSFS': Transport endpoint is not connected The cmsfs-fuse main program (which can also be any other FUSE file system) calls into the fuse_main() libfuse library function. The fuse_main() function later calls fuse_daemonize() to fork the daemon process to handle the FUSE file system I/O. The fuse_daemonize() function calls fork() as usual. The child proceeds with setsid() and then redirecting its file descriptors to /dev/null etc. The parent process, simply exits. The child's functions and the parent's exit creates a subtle race. This is seen with an SSH connection. The SSH command above calls cmsfs-fuse on an allocated pseudo-terminal device (-t option). If the parent exits, SSH receives the command completion and closes the connection, that means, it closes the master side of the pseudo-terminal. This causes a HUP signal being sent to the process group on the pseudo-terminal. At this point in time, the child might not have completed the setsid() call and, hence, becomes terminated. Note that fuse daemon sets up its signal handlers after fuse_daemonize() has completed. Even if the child has the chance to disassociate from its parent process group to become it's own process group with setsid(), the child still has the pseudo-terminal opened as stdin, stdout, and stderr. So the pseudo-terminal still behave as controlling terminal and might cause a SIGHUP at closing the the master side. To solve the problem, the parent has to wait until the child (the fuse daemon process) has completed its processing, that means, has become its own process group with setsid() and closed any file descriptors pointing to the pseudo-terminal. Closes: #27 Reported-by: Ofer Baruch <oferba@il.ibm.com> Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
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
2016-06-04Merge branch 'add-dirent-strlen3' of git://github.com/trapexit/libfuse into ↵Nikolaus Rath-27/+64
trapexit-add-dirent-strlen3
2016-05-12remove double calculation of filename length and dirent sizeAntonio SJ Musumeci-27/+64
2016-05-11lib/fuse_lowlevel.c: fix small typo in fuse_ll_help (#44)David Sheets-1/+1
s/disable remove file locking/disable remote file locking/
2016-03-29Whitespace cleanup.Nikolaus Rath-16/+14
Applied (whitespace-cleanup) to each file. Having whitespace changes in the VCS is ugly, but it ensures that in the future committers can run this function to *avoid* commiting any whitespace.
2016-03-29Inlined fuse_chan_fdNikolaus Rath-13/+8
2016-03-29Inlined fuse_chan_{send, recv}Nikolaus Rath-81/+60
2016-03-11cuse_lowlevel.setup(): fix double free of local variable 'args'Winfried Koehler-7/+9
Signed-off-by: Winfried Koehler <w_scan@gmx-topmail.de>
2016-01-14Initialize padding to zero.Nikolaus Rath-0/+1
This should prevent some valgrind warnings.
2015-09-29Merge branch 'clone_fd'Miklos Szeredi-11/+90
2015-08-14Merge git://git.code.sf.net/u/xophmeister/fuseMiklos Szeredi-0/+4
2015-08-12Canonicalised whitespace and added ChangeLog entryChristopher Harrison-1/+1
2015-08-12libfuse: fix warning mount.c:receive_fd()Miklos Szeredi-1/+1
Reported by Albert Berger
2015-07-30Added fuse_pkgversion functionChristopher Harrison-0/+4
Returns the full PACKAGE_VERSION string, per autoconf
2015-06-29libfuse: fix possible memory leakMiklos Szeredi-1/+1
Reported by Jose R. Guzman
2015-05-22libfuse: fix exec environment for mount and umountMiklos Szeredi-6/+17
Found by Tavis Ormandy (CVE-2015-3202).
2015-05-18libfuse: add "clone_fd" optionMiklos Szeredi-2/+56
This creates a separate device file descriptor for each processing thread, which might improve performance.
2015-05-18libfuse: get ref for reqMiklos Szeredi-1/+3
While the request lives don't free the channel associated with the request, the answer will need to be written on the channel.
2015-05-18libfuse: refcount fuse_chan objectsMiklos Szeredi-8/+31
New functions: fuse_chan_get(), fuse_chan_put(). Removed function: fuse_chan_destroy().
2015-04-23libfuse: add FUSE_CAP_NO_OPEN_SUPPORT flag to ->init()Miklos Szeredi-0/+2
2015-02-26libfuse: fix handling of '.' and '..' in highlevel readdirplusMiklos Szeredi-4/+12
2015-02-26libfuse: fix fuse_remove_signal_handlers()Miklos Szeredi-11/+11
to properly restore the default signal handler. Reported by: Chris Johnson <johnsocg@gmail.com>
2014-07-21libfuse: highlevel API: fix directory file handle passed to ioctl() methodMiklos Szeredi-2/+8
Reported by Eric Biggers
2014-07-15libfuse: add flags to ->rename()Miklos Szeredi-15/+73
See renameat2() system call in linux-3.15 and later kernels.
2014-07-15libfuse: allow setting ctime in ->setattr()Miklos Szeredi-1/+7
2014-07-15libfuse: add "time_gran" optionMiklos Szeredi-1/+12
This allows the filesystem to specify the time granularity it supports when the kernel is responsible for updating times ("writeback_cache" option).
2014-07-15fusermount, libfuse: send value as unsigned in "user_id=" and "group_id="Miklos Szeredi-1/+1
...options. Uids/gids larger than 2147483647 would result in EINVAL when mounting the filesystem. This also needs a fix in the kernel.
2014-03-26Initilaize stat buffer passed to ->getattr() and ->fgetattr()Miklos Szeredi-0/+2
to zero in all cases. Reported by Daniel Iwan.
2014-03-05libfuse: implement readdirplus for high-level APIEric Wong-57/+264
Reuse the old "readdir" callback, but add a flags argument, that has FUSE_READDIR_PLUS in case this is a "plus" version. Filesystems can safely ignore this flag, but if they want they can add optimizations based on it: i.e. only retrieve the full attributes in PLUS mode. The filler function is also given a flags argument and the filesystem can set FUSE_FILL_DIR_PLUS if all the attributes in "stat" are valid.
2014-02-27Allocate buffer when splicing from the fuse deviceMiklos Szeredi-6/+21
Was broken by commit 561d7054d856 "libfuse: remove fuse_chan_bufsize()".
2014-02-04fuse: use dlsym() instead of relying on ld.so constructor functionsFabrice Bauzac-43/+94
2014-01-29libfuse: Add "async_dio" and "writeback_cache" optionsMiklos Szeredi-5/+32
Asynchronous direct I/O is supported by linux kernels 3.13 and later, writeback caching is supported by 3.14 and later.
2013-11-29Fix fuse_add_direntry_plus()Miklos Szeredi-15/+10
2013-08-26Merge remote-tracking branch 'origin/fuse_2_9_bugfix'Miklos Szeredi-0/+3
2013-08-26Add missing includesDaniel Thau-0/+3
This allows compiling fuse with musl.
2013-08-26Don't close -1 fd in fuse_chan_destroy()Miklos Szeredi-1/+3
Valgrind warns on close(-1). So don't do this (happens if fuse_chan_clearfd() was called on the channel).
2013-08-26Change generation and nlookup from 'unsigned long' to 'uint64_t'Miklos Szeredi-2/+1
2013-07-26Print help on stdout instead of stderrMiklos Szeredi-28/+22
2013-07-25ulockmgr: strip ulockmgr support from this source packageMiklos Szeredi-449/+1
Distribute ulockmgr separately. It is not needed for the building of libfuse, only fusexmp_fh. Check ulockmgr library in ./configure and if not disable remote-lock suport in fusexmp_fh.
2013-07-25libfuse: fuse -> fuse3Miklos Szeredi-4/+4
Allow 2.X and 3.X to coexist. Includes are now stored under /usr/include/fuse3 and library is named libfuse3.*. Invoke pkg-config with "fuse3" as the first argument to build with version 3 of the library.
2013-07-24libfuse: remove "-D_FILE_OFFSET_BITS=64" from fuse.pcMiklos Szeredi-2/+15
add AC_SYS_LARGEFILE to your configure.ac instead.
2013-07-18libfuse: clean up struct fuse_file_infoMiklos Szeredi-16/+1
Remove 'fh_old' which was an ABI compatibility field for a long time. Make 'writepage' a bitfield.
2013-07-17Merge https://github.com/qknight/fuse-fuseMiklos Szeredi-0/+2
2013-07-02rewrote c++ style comments to c style coments mentioned by Miklos SzerediJoachim Schiele-2/+2
2013-07-01Released 2.9.3Miklos Szeredi-1/+1
2013-07-01libfuse: don't close fd if it's -1Miklos Szeredi-1/+4
This prevents a valgrind warning.
2013-07-01libfuse: fix multiple close of device fdMiklos Szeredi-11/+29
- fuse_kern_unmount closes handle (e.g. 19) - a thread in my process opens a file - the OS assigns newly freed handle (i.e. 19) - fuse_kern_chan_destroy closes the same handle (i.e. 19) - a thread in my process opens another file - the OS assigns newly freed handle (i.e. 19) - * MAYHEM * Reported by Dan Greenfield