[CRIU] [PATCH] zdtm.py: umount root only if it was mounted

Andrey Vagin avagin at openvz.org
Tue Nov 24 01:13:31 PST 2015


From: Andrew Vagin <avagin at virtuozzo.com>

We get the stack trace if a test failed:

Test output: ================================
09:11:34.584:     4: PASS

 <<< ================================
Traceback (most recent call last):
  File "zdtm.py", line 922, in <module>
    do_run_test(tinfo[0], tinfo[1], tinfo[2], tinfo[3])
  File "zdtm.py", line 696, in do_run_test
    t.kill()
  File "zdtm.py", line 302, in kill
    self.__flavor.fini()
  File "zdtm.py", line 168, in fini
    subprocess.check_call(["mount", "--make-private", self.root])
  File "/usr/lib64/python2.7/subprocess.py", line 540, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['mount', '--make-private', '/tmp/criu-root-YN1t3X']' returned non-zero exit status 32
umount: /tmp/criu-root-YN1t3X: not mounted

Cc: Tycho Andersen <tycho.andersen at canonical.com>
Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
---
 test/zdtm.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/test/zdtm.py b/test/zdtm.py
index b5f3513..9f3f049 100755
--- a/test/zdtm.py
+++ b/test/zdtm.py
@@ -108,6 +108,7 @@ class ns_flavor:
 		self.ns = True
 		self.uns = False
 		self.root = make_tests_root()
+		self.root_mounted = False
 
 	def __copy_one(self, fname):
 		if not os.access(fname, os.F_OK):
@@ -143,6 +144,7 @@ class ns_flavor:
 
 	def init(self, test_bin, deps):
 		subprocess.check_call(["mount", "--make-private", "--bind", ".", self.root])
+		self.root_mounted = True
 
 		if not os.access(self.root + "/.constructed", os.F_OK):
 			with open(os.path.abspath(__file__)) as o:
@@ -165,8 +167,10 @@ class ns_flavor:
 			self.__copy_libs(dep)
 
 	def fini(self):
-		subprocess.check_call(["mount", "--make-private", self.root])
-		subprocess.check_call(["umount", "-l", self.root])
+		if self.root_mounted:
+			subprocess.check_call(["mount", "--make-private", self.root])
+			subprocess.check_call(["umount", "-l", self.root])
+			self.root_mounted = False
 
 class userns_flavor(ns_flavor):
 	def __init__(self, opts):
-- 
2.4.3



More information about the CRIU mailing list