aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorZegang <zegang.luo@qq.com>2025-01-08 14:50:30 +0800
committerBernd Schubert <bernd@bsbernd.com>2025-01-13 15:44:30 +0100
commit33c0ce14cfee5a7251dc2542948f1a98d775edc4 (patch)
treecdd77ebadc11d746c5899dc0a50794fd71a3a3fd /lib
parentfc95fd5076fd845e496bfbcec1ad9da16534b1c9 (diff)
downloadlibfuse-33c0ce14cfee5a7251dc2542948f1a98d775edc4.tar.gz
Identify the FD hold by parent process
Issue: There is no directly way to get the FD hold by parent process which asked do fuse mount. Use Case: For auto_unmount case, identify the FD can easy to close the FD and make automatically unmount manually and explicitly. The FD[1] can be got via getenv(FUSE_COMMFD2_ENV). One potential use case is to satisfy FD-Leak checks. Solution: Add an extra env _FUSE_COMMFD2 to store the FD. This will provide a easy way to get the FD via FUSE_COMMFD2_ENV. Signed-off-by: Zegang Luo <zegang.luo@qq.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/mount.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/mount.c b/lib/mount.c
index aedd9b9..7dd727c 100644
--- a/lib/mount.c
+++ b/lib/mount.c
@@ -48,6 +48,7 @@
#define FUSERMOUNT_PROG "fusermount3"
#define FUSE_COMMFD_ENV "_FUSE_COMMFD"
+#define FUSE_COMMFD2_ENV "_FUSE_COMMFD2"
#ifndef MS_DIRSYNC
#define MS_DIRSYNC 128
@@ -367,6 +368,14 @@ static int setup_auto_unmount(const char *mountpoint, int quiet)
char arg_fd_entry[30];
snprintf(arg_fd_entry, sizeof(arg_fd_entry), "%i", fds[0]);
setenv(FUSE_COMMFD_ENV, arg_fd_entry, 1);
+ /*
+ * This helps to identify the FD hold by parent process.
+ * In auto-unmount case, parent process can close this FD explicitly to do unmount.
+ * The FD[1] can be got via getenv(FUSE_COMMFD2_ENV).
+ * One potential use case is to satisfy FD-Leak checks.
+ */
+ snprintf(arg_fd_entry, sizeof(arg_fd_entry), "%i", fds[1]);
+ setenv(FUSE_COMMFD2_ENV, arg_fd_entry, 1);
char const *const argv[] = {
FUSERMOUNT_PROG,
@@ -431,6 +440,14 @@ static int fuse_mount_fusermount(const char *mountpoint, struct mount_opts *mo,
char arg_fd_entry[30];
snprintf(arg_fd_entry, sizeof(arg_fd_entry), "%i", fds[0]);
setenv(FUSE_COMMFD_ENV, arg_fd_entry, 1);
+ /*
+ * This helps to identify the FD hold by parent process.
+ * In auto-unmount case, parent process can close this FD explicitly to do unmount.
+ * The FD[1] can be got via getenv(FUSE_COMMFD2_ENV).
+ * One potential use case is to satisfy FD-Leak checks.
+ */
+ snprintf(arg_fd_entry, sizeof(arg_fd_entry), "%i", fds[1]);
+ setenv(FUSE_COMMFD2_ENV, arg_fd_entry, 1);
char const *const argv[] = {
FUSERMOUNT_PROG,