#define FUSERMOUNT_PROG                "fusermount3"
 #define FUSE_COMMFD_ENV                "_FUSE_COMMFD"
+#define FUSE_COMMFD2_ENV       "_FUSE_COMMFD2"
 
 #ifndef MS_DIRSYNC
 #define MS_DIRSYNC 128
        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,
        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,