mirror of
https://github.com/libfuse/libfuse.git
synced 2024-11-23 12:14:15 +08:00
Improve documentation of fuse_session_unmount
This commit is contained in:
parent
8e9cf9ecc6
commit
56fde4ba9e
@ -819,6 +819,8 @@ int fuse_mount(struct fuse *f, const char *mountpoint);
|
||||
/**
|
||||
* Unmount a FUSE file system.
|
||||
*
|
||||
* See fuse_session_unmount() for additional information.
|
||||
*
|
||||
* @param f the FUSE handle
|
||||
**/
|
||||
void fuse_unmount(struct fuse *f);
|
||||
|
@ -1850,7 +1850,26 @@ void fuse_session_reset(struct fuse_session *se);
|
||||
int fuse_session_exited(struct fuse_session *se);
|
||||
|
||||
/**
|
||||
* Unmount the file system
|
||||
* Ensure that file system is unmounted.
|
||||
*
|
||||
* In regular operation, the file system is typically unmounted by the
|
||||
* user calling umount(8) or fusermount(1), which then terminates the
|
||||
* FUSE session loop. However, the session loop may also terminate as
|
||||
* a result of an explicit call to fuse_session_exit() (e.g. by a
|
||||
* signal handler installed by fuse_set_signal_handler()). In this
|
||||
* case the filesystem remains mounted, but any attempt to access it
|
||||
* will block (while the filesystem process is still running) or give
|
||||
* an ESHUTDOWN error (after the filesystem process has terminated).
|
||||
*
|
||||
* If the communication channel with the FUSE kernel module is still
|
||||
* open (i.e., if the session loop was terminated by an explicit call
|
||||
* to fuse_session_exit()), this function will close it and unmount
|
||||
* the filesystem. If the communication channel has been closed by the
|
||||
* kernel, this method will do (almost) nothing.
|
||||
*
|
||||
* NOTE: The above semantics mean that if the connection to the kernel
|
||||
* is terminated via the ``/sys/fs/fuse/connections/NNN/abort`` file,
|
||||
* this method will *not* unmount the filesystem.
|
||||
*
|
||||
* @param se the session
|
||||
*/
|
||||
|
@ -2655,6 +2655,8 @@ int fuse_session_receive_buf_int(struct fuse_session *se, struct fuse_buf *buf,
|
||||
|
||||
if (res == -1) {
|
||||
if (err == ENODEV) {
|
||||
/* Filesystem was unmounted, or connection was aborted
|
||||
via /sys/fs/fuse/connections */
|
||||
fuse_session_exit(se);
|
||||
return 0;
|
||||
}
|
||||
@ -2743,6 +2745,8 @@ restart:
|
||||
goto restart;
|
||||
|
||||
if (err == ENODEV) {
|
||||
/* Filesystem was unmounted, or connection was aborted
|
||||
via /sys/fs/fuse/connections */
|
||||
fuse_session_exit(se);
|
||||
return 0;
|
||||
}
|
||||
|
@ -275,7 +275,8 @@ void fuse_kern_unmount(const char *mountpoint, int fd)
|
||||
close(fd);
|
||||
|
||||
/* If file poll returns POLLERR on the device file descriptor,
|
||||
then the filesystem is already unmounted */
|
||||
then the filesystem is already unmounted or the connection
|
||||
was severed via /sys/fs/fuse/connections/NNN/abort */
|
||||
if (res == 1 && (pfd.revents & POLLERR))
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user