projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '10805-avoid-llfuse-deadlock'
[arvados.git]
/
services
/
fuse
/
arvados_fuse
/
unmount.py
diff --git
a/services/fuse/arvados_fuse/unmount.py
b/services/fuse/arvados_fuse/unmount.py
index db78ddc738311b40914087c7b07fd0e27d6700f1..09a5f6254e6b7ac4a20fe416c4cab16aec5b6b47 100644
(file)
--- a/
services/fuse/arvados_fuse/unmount.py
+++ b/
services/fuse/arvados_fuse/unmount.py
@@
-1,3
+1,7
@@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
import collections
import errno
import os
import collections
import errno
import os
@@
-26,7
+30,7
@@
def mountinfo():
return mi
return mi
-def unmount(path, timeout=10, recursive=False):
+def unmount(path,
subtype=None,
timeout=10, recursive=False):
"""Unmount the fuse mount at path.
Unmounting is done by writing 1 to the "abort" control file in
"""Unmount the fuse mount at path.
Unmounting is done by writing 1 to the "abort" control file in
@@
-43,15
+47,23
@@
def unmount(path, timeout=10, recursive=False):
path = os.path.realpath(path)
path = os.path.realpath(path)
+ if subtype is None:
+ mnttype = None
+ elif subtype == '':
+ mnttype = 'fuse'
+ else:
+ mnttype = 'fuse.' + subtype
+
if recursive:
paths = []
for m in mountinfo():
if m.path == path or m.path.startswith(path+"/"):
paths.append(m.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:
+ if not (m.is_fuse and (mnttype is None or
+ mnttype == m.mnttype)):
raise Exception(
raise Exception(
- "cannot unmount {}:
non-fuse mountpoint
{}".format(
- path, m))
+ "cannot unmount {}:
mount type is
{}".format(
+ path, m
.mnttype
))
for path in sorted(paths, key=len, reverse=True):
unmount(path, timeout=timeout, recursive=False)
return len(paths) > 0
for path in sorted(paths, key=len, reverse=True):
unmount(path, timeout=timeout, recursive=False)
return len(paths) > 0
@@
-66,7
+78,7
@@
def unmount(path, timeout=10, recursive=False):
while True:
mounted = False
for m in mountinfo():
while True:
mounted = False
for m in mountinfo():
- if m.is_fuse:
+ if m.is_fuse
and (mnttype is None or mnttype == m.mnttype)
:
try:
if os.path.realpath(m.path) == path:
was_mounted = True
try:
if os.path.realpath(m.path) == path:
was_mounted = True