Commit e03ab6b4 authored by Pavel Emelyanov's avatar Pavel Emelyanov

rst: Rework remaps collection on generic collect routine

Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 0543f49c
...@@ -165,45 +165,30 @@ static int open_remap_linked(struct reg_file_info *rfi, ...@@ -165,45 +165,30 @@ static int open_remap_linked(struct reg_file_info *rfi,
return 0; return 0;
} }
static int collect_remaps(void) static int collect_one_remap(void *obj, ProtobufCMessage *msg)
{ {
int fd, ret = 0; int ret = -1;
RemapFilePathEntry *rfe;
fd = open_image(CR_FD_REMAP_FPATH, O_RSTR); struct file_desc *fdesc;
if (fd < 0) struct reg_file_info *rfi;
return -1;
while (1) {
RemapFilePathEntry *rfe = NULL;
struct file_desc *fdesc;
struct reg_file_info *rfi;
ret = pb_read_one_eof(fd, &rfe, PB_REMAP_FPATH);
if (ret <= 0)
break;
ret = -1;
fdesc = find_file_desc_raw(FD_TYPES__REG, rfe->orig_id);
if (fdesc == NULL) {
pr_err("Remap for non existing file %#x\n",
rfe->orig_id);
goto tail;
}
rfi = container_of(fdesc, struct reg_file_info, d); rfe = pb_msg(msg, RemapFilePathEntry);
pr_info("Configuring remap %#x -> %#x\n", rfi->rfe->id, rfe->remap_id);
if (rfe->remap_id & REMAP_GHOST) fdesc = find_file_desc_raw(FD_TYPES__REG, rfe->orig_id);
ret = open_remap_ghost(rfi, rfe); if (fdesc == NULL) {
else pr_err("Remap for non existing file %#x\n",
ret = open_remap_linked(rfi, rfe); rfe->orig_id);
tail: goto out;
remap_file_path_entry__free_unpacked(rfe, NULL);
if (ret)
break;
} }
close(fd); rfi = container_of(fdesc, struct reg_file_info, d);
pr_info("Configuring remap %#x -> %#x\n", rfi->rfe->id, rfe->remap_id);
if (rfe->remap_id & REMAP_GHOST)
ret = open_remap_ghost(rfi, rfe);
else
ret = open_remap_linked(rfi, rfe);
out:
return ret; return ret;
} }
...@@ -593,7 +578,8 @@ int collect_reg_files(void) ...@@ -593,7 +578,8 @@ int collect_reg_files(void)
ret = collect_image(CR_FD_REG_FILES, PB_REG_FILES, ret = collect_image(CR_FD_REG_FILES, PB_REG_FILES,
sizeof(struct reg_file_info), collect_one_regfile); sizeof(struct reg_file_info), collect_one_regfile);
if (!ret) if (!ret)
ret = collect_remaps(); ret = collect_image(CR_FD_REMAP_FPATH, PB_REMAP_FPATH,
0, collect_one_remap);
return ret; return ret;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment