Commit 69781946 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov

restore: Use shmid instead of id, as declared in image file

To not bring in varying member name with same meaning.
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@gmail.com>
parent 8800be50
...@@ -39,7 +39,7 @@ struct fmap_fd { ...@@ -39,7 +39,7 @@ struct fmap_fd {
struct shmem_info { struct shmem_info {
unsigned long start; unsigned long start;
unsigned long end; unsigned long end;
unsigned long id; unsigned long shmid;
int pid; int pid;
int real_pid; int real_pid;
}; };
...@@ -57,7 +57,7 @@ struct shmem_id { ...@@ -57,7 +57,7 @@ struct shmem_id {
struct shmem_id *next; struct shmem_id *next;
unsigned long addr; unsigned long addr;
unsigned long end; unsigned long end;
unsigned long id; unsigned long shmid;
}; };
static struct shmem_id *shmem_ids; static struct shmem_id *shmem_ids;
...@@ -79,9 +79,9 @@ static void show_saved_shmems(void) ...@@ -79,9 +79,9 @@ static void show_saved_shmems(void)
pr_info("\tSaved shmems:\n"); pr_info("\tSaved shmems:\n");
for (i = 0; i < nr_shmems; i++) for (i = 0; i < nr_shmems; i++)
pr_info("\t\tstart: %016lx id: %lx pid: %d\n", pr_info("\t\tstart: %016lx shmid: %lx pid: %d\n",
shmems[i].start, shmems[i].start,
shmems[i].id, shmems[i].shmid,
shmems[i].pid); shmems[i].pid);
} }
...@@ -97,14 +97,14 @@ static void show_saved_pipes(void) ...@@ -97,14 +97,14 @@ static void show_saved_pipes(void)
pipes[i].users); pipes[i].users);
} }
static struct shmem_info *find_shmem(unsigned long addr, unsigned long id) static struct shmem_info *find_shmem(unsigned long addr, unsigned long shmid)
{ {
struct shmem_info *si; struct shmem_info *si;
int i; int i;
for (i = 0; i < nr_shmems; i++) { for (i = 0; i < nr_shmems; i++) {
si = shmems + i; si = shmems + i;
if (si->start <= addr && si->end >= addr && si->id == id) if (si->start <= addr && si->end >= addr && si->shmid == shmid)
return si; return si;
} }
...@@ -171,14 +171,20 @@ static int collect_shmem(int pid, struct shmem_entry *e) ...@@ -171,14 +171,20 @@ static int collect_shmem(int pid, struct shmem_entry *e)
for (i = 0; i < nr_shmems; i++) { for (i = 0; i < nr_shmems; i++) {
if (shmems[i].start != e->start || if (shmems[i].start != e->start ||
shmems[i].id != e->shmid) shmems[i].shmid != e->shmid)
continue; continue;
if (shmems[i].end != e->end) { if (shmems[i].end != e->end) {
pr_info("Bogus shmem\n"); pr_error("Bogus shmem\n");
return 1; return 1;
} }
/*
* Only the shared mapping with highest
* pid will be created in real, other processes
* will wait until the kernel propagate this mapping
* into /proc
*/
if (shmems[i].pid > pid) if (shmems[i].pid > pid)
shmems[i].pid = pid; shmems[i].pid = pid;
...@@ -192,7 +198,7 @@ static int collect_shmem(int pid, struct shmem_entry *e) ...@@ -192,7 +198,7 @@ static int collect_shmem(int pid, struct shmem_entry *e)
shmems[nr_shmems].start = e->start; shmems[nr_shmems].start = e->start;
shmems[nr_shmems].end = e->end; shmems[nr_shmems].end = e->end;
shmems[nr_shmems].id = e->shmid; shmems[nr_shmems].shmid = e->shmid;
shmems[nr_shmems].pid = pid; shmems[nr_shmems].pid = pid;
shmems[nr_shmems].real_pid = 0; shmems[nr_shmems].real_pid = 0;
...@@ -526,7 +532,7 @@ static unsigned long find_shmem_id(unsigned long addr) ...@@ -526,7 +532,7 @@ static unsigned long find_shmem_id(unsigned long addr)
for (si = shmem_ids; si; si = si->next) for (si = shmem_ids; si; si = si->next)
if (si->addr <= addr && si->end >= addr) if (si->addr <= addr && si->end >= addr)
return si->id; return si->shmid;
return 0; return 0;
} }
...@@ -538,7 +544,7 @@ static void save_shmem_id(struct shmem_entry *e) ...@@ -538,7 +544,7 @@ static void save_shmem_id(struct shmem_entry *e)
si = malloc(sizeof(*si)); si = malloc(sizeof(*si));
si->addr = e->start; si->addr = e->start;
si->end = e->end; si->end = e->end;
si->id = e->shmid; si->shmid = e->shmid;
si->next = shmem_ids; si->next = shmem_ids;
shmem_ids = si; shmem_ids = si;
...@@ -604,16 +610,16 @@ static int try_fixup_file_map(int pid, struct vma_entry *vi, int fd) ...@@ -604,16 +610,16 @@ static int try_fixup_file_map(int pid, struct vma_entry *vi, int fd)
static int try_fixup_shared_map(int pid, struct vma_entry *vi, int fd) static int try_fixup_shared_map(int pid, struct vma_entry *vi, int fd)
{ {
struct shmem_info *si; struct shmem_info *si;
unsigned long id; unsigned long shmid;
id = find_shmem_id(vi->start); shmid = find_shmem_id(vi->start);
if (!id) if (!shmid)
return 0; return 0;
si = find_shmem(vi->start, id); si = find_shmem(vi->start, shmid);
pr_info("%d: Search for %016lx shmem %p/%d\n", pid, vi->start, si, si ? si->pid : -1); pr_info("%d: Search for %016lx shmem %p/%d\n", pid, vi->start, si, si ? si->pid : -1);
if (si == NULL) { if (!si) {
fprintf(stderr, "Can't find my shmem %016lx\n", vi->start); fprintf(stderr, "Can't find my shmem %016lx\n", vi->start);
return 1; return 1;
} }
...@@ -623,7 +629,7 @@ static int try_fixup_shared_map(int pid, struct vma_entry *vi, int fd) ...@@ -623,7 +629,7 @@ static int try_fixup_shared_map(int pid, struct vma_entry *vi, int fd)
sh_fd = shmem_wait_and_open(si); sh_fd = shmem_wait_and_open(si);
pr_info("%d: Fixing %lx vma to %lx/%d shmem -> %d\n", pr_info("%d: Fixing %lx vma to %lx/%d shmem -> %d\n",
pid, vi->start, si->id, si->pid, sh_fd); pid, vi->start, si->shmid, si->pid, sh_fd);
if (fd < 0) { if (fd < 0) {
perror("Can't open shmem"); perror("Can't open shmem");
return 1; return 1;
......
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