[CRIU] [PATCH] crit: Files now sit in another image

Pavel Emelyanov xemul at virtuozzo.com
Tue Sep 5 14:39:35 MSK 2017


When merging files into one image we've forgotten about crit x
feature that scans image files by names.

https://github.com/xemul/criu/issues/381

The patch was made for master (as in criu-dev there was problem
with pstree_item.pid parsing), but should apply to dev smoothly.

Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
---
 crit/crit | 32 ++++++++++++++++++++++++++++----
 1 file changed, 28 insertions(+), 4 deletions(-)

diff --git a/crit/crit b/crit/crit
index a6a6832..22e7ea7 100755
--- a/crit/crit
+++ b/crit/crit
@@ -89,8 +89,32 @@ def explore_ps(opts):
 	print "%7s%7s%7s   %s" % ('PID', 'PGID', 'SID', 'COMM')
 	show_ps(psr, opts)
 
+files_img = None
+
+def ftype_find_in_files(opts, ft, fid):
+	global files_img
+
+	if files_img is None:
+		try:
+			files_img = pycriu.images.load(dinf(opts, "files.img"))['entries']
+		except:
+			files_img = []
+
+	if len(files_img) == 0:
+		return None
+
+	for f in files_img:
+		if f['id'] == fid:
+			return f
+
+	return None
+
 
 def ftype_find_in_image(opts, ft, fid, img):
+	f = ftype_find_in_files(opts, ft, fid)
+	if f:
+		return f[ft['field']]
+
 	if ft['img'] == None:
 		ft['img'] = pycriu.images.load(dinf(opts, img))['entries']
 	for f in ft['img']:
@@ -111,13 +135,13 @@ def ftype_unix(opts, ft, fid):
 	if not ux:
 		return 'unix[?]'
 
-	n = ux['name'] and ' %s' % ux['name'].decode('base64') or ''
+	n = ux['name'] and ' %s' % ux['name'] or ''
 	return 'unix[%d (%d)%s]' % (ux['ino'], ux['peer'], n)
 
 file_types = {
-	'REG':		{'get': ftype_reg,	'img': None},
-	'PIPE':		{'get': ftype_pipe,	'img': None},
-	'UNIXSK':	{'get': ftype_unix,	'img': None},
+	'REG':		{'get': ftype_reg,	'img': None,	'field': 'reg'},
+	'PIPE':		{'get': ftype_pipe,	'img': None,	'field': 'pipe'},
+	'UNIXSK':	{'get': ftype_unix,	'img': None,	'field': 'usk'},
 }
 
 def ftype_gen(opts, ft, fid):
-- 
2.5.5


More information about the CRIU mailing list