Merge branch 'master' into 8465-stdin-redirection
[arvados.git] / services / fuse / arvados_fuse / unmount.py
index 7a7464d4da8a0fbe513eadf4ff8e26b9cd04dc07..db78ddc738311b40914087c7b07fd0e27d6700f1 100644 (file)
@@ -26,25 +26,7 @@ def mountinfo():
     return mi
 
 
-def unmount_all(path, timeout=10):
-    if not path.endswith("/..."):
-        return unmount(path, timeout=timeout)
-    root = os.path.realpath(path[:-4])
-
-    paths = []
-    for m in mountinfo():
-        if m.path == root or m.path.startswith(root+"/"):
-            paths.append(m.path)
-            if not m.is_fuse:
-                raise Exception(
-                    "cannot unmount {}: non-fuse mountpoint {}".format(
-                        path, m))
-    for path in sorted(paths, key=len, reverse=True):
-        unmount(path, timeout=timeout)
-    return len(paths) > 0
-
-
-def unmount(path, timeout=10):
+def unmount(path, timeout=10, recursive=False):
     """Unmount the fuse mount at path.
 
     Unmounting is done by writing 1 to the "abort" control file in
@@ -61,6 +43,19 @@ def unmount(path, timeout=10):
 
     path = os.path.realpath(path)
 
+    if recursive:
+        paths = []
+        for m in mountinfo():
+            if m.path == path or m.path.startswith(path+"/"):
+                paths.append(m.path)
+                if not m.is_fuse:
+                    raise Exception(
+                        "cannot unmount {}: non-fuse mountpoint {}".format(
+                            path, m))
+        for path in sorted(paths, key=len, reverse=True):
+            unmount(path, timeout=timeout, recursive=False)
+        return len(paths) > 0
+
     was_mounted = False
     attempted = False
     if timeout is None: