aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZegang <zegang.luo@qq.com>2025-01-08 14:50:30 +0800
committerBernd Schubert <bernd@bsbernd.com>2025-02-10 16:56:45 +0100
commitd7246542dbe1ece84b88013843dc7a9bb9c81b6f (patch)
treecdd77ebadc11d746c5899dc0a50794fd71a3a3fd
parent1d134a0ccf8fe95ceb1ea3cdd723cb30c5cfcdf1 (diff)
downloadlibfuse-d7246542dbe1ece84b88013843dc7a9bb9c81b6f.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>
-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,