From 80a4ac4c72140be416a86824b5c370c278250760 Mon Sep 17 00:00:00 2001 From: Ryan Bottriell Date: Tue, 12 Mar 2024 15:32:42 -0700 Subject: [PATCH] Disable nonempty fuse option for fuse3 Signed-off-by: Ryan Bottriell --- crates/spfs-cli/cmd-fuse/src/cmd_fuse.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/crates/spfs-cli/cmd-fuse/src/cmd_fuse.rs b/crates/spfs-cli/cmd-fuse/src/cmd_fuse.rs index ab73d5121..00d345d34 100644 --- a/crates/spfs-cli/cmd-fuse/src/cmd_fuse.rs +++ b/crates/spfs-cli/cmd-fuse/src/cmd_fuse.rs @@ -97,12 +97,12 @@ impl CmdFuse { let calling_gid = nix::unistd::getegid(); // these will cause conflicts later on if their counterpart is also provided - let required_opts = vec![ - MountOption::RO, - MountOption::NoDev, - MountOption::NoSuid, - MountOption::CUSTOM("nonempty".into()), - ]; + let mut required_opts = vec![MountOption::RO, MountOption::NoDev, MountOption::NoSuid]; + if !fuse3_available() { + // the nonempty option became a default and was removed in + // fuse3 but is still needed for fuse2 + required_opts.push(MountOption::CUSTOM("nonempty".into())); + } let mut opts = Config { root_mode: 0o777, uid: calling_uid, @@ -303,3 +303,8 @@ fn parse_options_from_args(args: &[String]) -> Vec { }) .collect() } + +/// Checks if fusermount3 is available to be used on this system +fn fuse3_available() -> bool { + spfs::which("fusermount3").is_some() +}