Commit 772edd46 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

parasite: add ability to get pid and tid

If we try to dump a process from another pid ns,
we have not another way to get its pid.
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 4b48849c
...@@ -1480,7 +1480,7 @@ static int dump_task_thread(struct parasite_ctl *parasite_ctl, struct pid *tid) ...@@ -1480,7 +1480,7 @@ static int dump_task_thread(struct parasite_ctl *parasite_ctl, struct pid *tid)
if (ret) if (ret)
goto err_free; goto err_free;
ret = parasite_dump_tid_addr_seized(parasite_ctl, pid, &taddr); ret = parasite_dump_thread_seized(parasite_ctl, pid, &taddr, &tid->pid);
if (ret) { if (ret) {
pr_err("Can't dump tid address for pid %d", pid); pr_err("Can't dump tid address for pid %d", pid);
goto err_free; goto err_free;
......
...@@ -33,8 +33,8 @@ extern int parasite_dump_pages_seized(struct parasite_ctl *ctl, ...@@ -33,8 +33,8 @@ extern int parasite_dump_pages_seized(struct parasite_ctl *ctl,
struct list_head *vma_area_list, struct list_head *vma_area_list,
struct cr_fdset *cr_fdset); struct cr_fdset *cr_fdset);
struct parasite_dump_tid_addr; struct parasite_dump_tid_addr;
extern int parasite_dump_tid_addr_seized(struct parasite_ctl *ctl, extern int parasite_dump_thread_seized(struct parasite_ctl *ctl, pid_t pid,
pid_t pid, unsigned int **tid_add); unsigned int **tid_add, u32 *tid);
extern int parasite_drain_fds_seized(struct parasite_ctl *ctl, int *fds, int *lfds, int nr_fds, char *flags); extern int parasite_drain_fds_seized(struct parasite_ctl *ctl, int *fds, int *lfds, int nr_fds, char *flags);
......
...@@ -73,12 +73,17 @@ struct parasite_dump_misc { ...@@ -73,12 +73,17 @@ struct parasite_dump_misc {
unsigned int secbits; unsigned int secbits;
unsigned long brk; unsigned long brk;
k_rtsigset_t blocked; k_rtsigset_t blocked;
u32 pid;
u32 sid;
u32 pgid;
}; };
struct parasite_dump_tid_addr { struct parasite_dump_tid_addr {
parasite_status_t status; parasite_status_t status;
unsigned int *tid_addr; unsigned int *tid_addr;
int tid;
}; };
#define PARASITE_MAX_FDS (PAGE_SIZE / sizeof(int)) #define PARASITE_MAX_FDS (PAGE_SIZE / sizeof(int))
......
...@@ -416,7 +416,8 @@ static int parasite_set_logfd(struct parasite_ctl *ctl, pid_t pid) ...@@ -416,7 +416,8 @@ static int parasite_set_logfd(struct parasite_ctl *ctl, pid_t pid)
return 0; return 0;
} }
int parasite_dump_tid_addr_seized(struct parasite_ctl *ctl, pid_t pid, unsigned int **tid_addr) int parasite_dump_thread_seized(struct parasite_ctl *ctl, pid_t pid,
unsigned int **tid_addr, u32 *tid)
{ {
struct parasite_dump_tid_addr args = { }; struct parasite_dump_tid_addr args = { };
int ret; int ret;
...@@ -425,6 +426,7 @@ int parasite_dump_tid_addr_seized(struct parasite_ctl *ctl, pid_t pid, unsigned ...@@ -425,6 +426,7 @@ int parasite_dump_tid_addr_seized(struct parasite_ctl *ctl, pid_t pid, unsigned
(parasite_status_t *)&args, sizeof(args)); (parasite_status_t *)&args, sizeof(args));
*tid_addr = args.tid_addr; *tid_addr = args.tid_addr;
*tid = args.tid;
return ret; return ret;
} }
......
...@@ -363,6 +363,10 @@ static int dump_misc(struct parasite_dump_misc *args) ...@@ -363,6 +363,10 @@ static int dump_misc(struct parasite_dump_misc *args)
args->brk = sys_brk(0); args->brk = sys_brk(0);
args->blocked = old_blocked; args->blocked = old_blocked;
args->pid = sys_getpid();
args->sid = sys_getsid();
args->pgid = sys_getpgid();
return 0; return 0;
} }
...@@ -377,6 +381,8 @@ static int dump_tid_addr(struct parasite_dump_tid_addr *args) ...@@ -377,6 +381,8 @@ static int dump_tid_addr(struct parasite_dump_tid_addr *args)
return ret; return ret;
} }
args->tid = sys_gettid();
return 0; return 0;
} }
......
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