[Devel] [PATCH 1/2] vz7: image-desc -- Make pagemap and pagemap-shmem images to use lu

Cyrill Gorcunov gorcunov at gmail.com
Wed Oct 18 13:01:41 MSK 2017


The @shmid is unsigned long and may overflow the integer so we loose
the bijective mapping between image names and their ids. Thus use
unsigned long here.

https://jira.sw.ru/browse/PSBM-75112

Signed-off-by: Cyrill Gorcunov <gorcunov at virtuozzo.com>
---
 criu/cr-dedup.c        | 12 ++++++------
 criu/image-desc.c      |  4 ++--
 criu/include/pagemap.h |  4 ++--
 criu/page-xfer.c       |  2 +-
 criu/pagemap.c         | 14 +++++++-------
 5 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/criu/cr-dedup.c b/criu/cr-dedup.c
index d103ddf..93af9be 100644
--- a/criu/cr-dedup.c
+++ b/criu/cr-dedup.c
@@ -8,7 +8,7 @@
 #include "pagemap.h"
 #include "restorer.h"
 
-static int cr_dedup_one_pagemap(int id, int flags);
+static int cr_dedup_one_pagemap(unsigned long id, int flags);
 
 int cr_dedup(void)
 {
@@ -36,17 +36,17 @@ int cr_dedup(void)
 			break;
 		}
 
-		ret = sscanf(ent->d_name, "pagemap-%d.img", &id);
+		ret = sscanf(ent->d_name, "pagemap-%lu.img", &id);
 		if (ret == 1) {
-			pr_info("pid=%d\n", id);
+			pr_info("pid=%lu\n", id);
 			ret = cr_dedup_one_pagemap(id, PR_TASK);
 			if (ret < 0)
 				break;
 		}
 
-		ret = sscanf(ent->d_name, "pagemap-shmem-%d.img", &id);
+		ret = sscanf(ent->d_name, "pagemap-shmem-%lu.img", &id);
 		if (ret == 1) {
-			pr_info("shmid=%d\n", id);
+			pr_info("shmid=%lu\n", id);
 			ret = cr_dedup_one_pagemap(id, PR_SHMEM);
 			if (ret < 0)
 				break;
@@ -67,7 +67,7 @@ int cr_dedup(void)
 	return 0;
 }
 
-static int cr_dedup_one_pagemap(int id, int flags)
+static int cr_dedup_one_pagemap(unsigned long id, int flags)
 {
 	int ret;
 	struct page_read pr;
diff --git a/criu/image-desc.c b/criu/image-desc.c
index 7fedf1a..58e8bf7 100644
--- a/criu/image-desc.c
+++ b/criu/image-desc.c
@@ -27,8 +27,8 @@
 struct cr_fd_desc_tmpl imgset_template[CR_FD_MAX] = {
 	FD_ENTRY(INVENTORY,	"inventory"),
 	FD_ENTRY(FDINFO,	"fdinfo-%d"),
-	FD_ENTRY(PAGEMAP,	"pagemap-%ld"),
-	FD_ENTRY(SHMEM_PAGEMAP,	"pagemap-shmem-%ld"),
+	FD_ENTRY(PAGEMAP,	"pagemap-%lu"),
+	FD_ENTRY(SHMEM_PAGEMAP,	"pagemap-shmem-%lu"),
 	FD_ENTRY(REG_FILES,	"reg-files"),
 	FD_ENTRY(EXT_FILES,	"ext-files"),
 	FD_ENTRY(NS_FILES,	"ns-files"),
diff --git a/criu/include/pagemap.h b/criu/include/pagemap.h
index b993c47..7ab19d6 100644
--- a/criu/include/pagemap.h
+++ b/criu/include/pagemap.h
@@ -96,8 +96,8 @@ struct page_read {
  *  0 -- no images
  *  1 -- opened
  */
-extern int open_page_read(int pid, struct page_read *, int pr_flags);
-extern int open_page_read_at(int dfd, int pid, struct page_read *pr,
+extern int open_page_read(unsigned long img_id, struct page_read *, int pr_flags);
+extern int open_page_read_at(int dfd, unsigned long img_id, struct page_read *pr,
 		int pr_flags);
 
 struct task_restore_args;
diff --git a/criu/page-xfer.c b/criu/page-xfer.c
index f729334..14cfdbe 100644
--- a/criu/page-xfer.c
+++ b/criu/page-xfer.c
@@ -467,7 +467,7 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp,
  *	 0 - if a parent image doesn't exist
  *	-1 - in error cases
  */
-int check_parent_local_xfer(int fd_type, int id)
+int check_parent_local_xfer(int fd_type, unsigned long id)
 {
 	char path[PATH_MAX];
 	struct stat st;
diff --git a/criu/pagemap.c b/criu/pagemap.c
index 0292576..6644849 100644
--- a/criu/pagemap.c
+++ b/criu/pagemap.c
@@ -560,7 +560,7 @@ static void reset_pagemap(struct page_read *pr)
 		reset_pagemap(pr->parent);
 }
 
-static int try_open_parent(int dfd, int pid, struct page_read *pr, int pr_flags)
+static int try_open_parent(int dfd, unsigned long img_id, struct page_read *pr, int pr_flags)
 {
 	int pfd, ret;
 	struct page_read *parent = NULL;
@@ -573,7 +573,7 @@ static int try_open_parent(int dfd, int pid, struct page_read *pr, int pr_flags)
 	if (!parent)
 		goto err_cl;
 
-	ret = open_page_read_at(pfd, pid, parent, pr_flags);
+	ret = open_page_read_at(pfd, img_id, parent, pr_flags);
 	if (ret < 0)
 		goto err_free;
 
@@ -649,7 +649,7 @@ static int init_pagemaps(struct page_read *pr)
 	return -1;
 }
 
-int open_page_read_at(int dfd, int pid, struct page_read *pr, int pr_flags)
+int open_page_read_at(int dfd, unsigned long img_id, struct page_read *pr, int pr_flags)
 {
 	int flags, i_typ;
 	static unsigned ids = 1;
@@ -683,7 +683,7 @@ int open_page_read_at(int dfd, int pid, struct page_read *pr, int pr_flags)
 	pr->pmes = NULL;
 	pr->pieok = false;
 
-	pr->pmi = open_image_at(dfd, i_typ, O_RSTR, (long)pid);
+	pr->pmi = open_image_at(dfd, i_typ, O_RSTR, img_id);
 	if (!pr->pmi)
 		return -1;
 
@@ -692,7 +692,7 @@ int open_page_read_at(int dfd, int pid, struct page_read *pr, int pr_flags)
 		return 0;
 	}
 
-	if (try_open_parent(dfd, pid, pr, pr_flags)) {
+	if (try_open_parent(dfd, img_id, pr, pr_flags)) {
 		close_image(pr->pmi);
 		return -1;
 	}
@@ -725,7 +725,7 @@ int open_page_read_at(int dfd, int pid, struct page_read *pr, int pr_flags)
 	return 1;
 }
 
-int open_page_read(int pid, struct page_read *pr, int pr_flags)
+int open_page_read(unsigned long img_id, struct page_read *pr, int pr_flags)
 {
-	return open_page_read_at(get_service_fd(IMG_FD_OFF), pid, pr, pr_flags);
+	return open_page_read_at(get_service_fd(IMG_FD_OFF), img_id, pr, pr_flags);
 }
-- 
2.7.5



More information about the Devel mailing list