From 1617579a27f9d104f2e9f4fb6a2b980d64e86fd0 Mon Sep 17 00:00:00 2001 From: Stanislav Kinsburskiy Date: Thu, 10 Dec 2015 18:16:12 +0300 Subject: [PATCH] pstree: more pstree-related helpers This patch introduces three helpers: 1) pstree_item_by_real() - search for pstree item by real pid. 2) pstree_item_by_virt() - search for pstree item by virtual pid. 3) pid_to_virt() - return virtual pis by real one. Note: pstree_item_by_virt() and pid_to_virt() will be used to migrate AutoFS. Signed-off-by: Stanislav Kinsburskiy Signed-off-by: Pavel Emelyanov --- include/pstree.h | 5 +++++ pstree.c | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/include/pstree.h b/include/pstree.h index 0c9147148..47ce676a9 100644 --- a/include/pstree.h +++ b/include/pstree.h @@ -78,6 +78,11 @@ extern bool restore_before_setsid(struct pstree_item *child); extern int prepare_pstree(void); extern int dump_pstree(struct pstree_item *root_item); + +struct pstree_item *pstree_item_by_real(pid_t virt); +struct pstree_item *pstree_item_by_virt(pid_t virt); + +extern int pid_to_virt(pid_t pid); extern bool pid_in_pstree(pid_t pid); struct task_entries; diff --git a/pstree.c b/pstree.c index 116b5e7c6..d6b679435 100644 --- a/pstree.c +++ b/pstree.c @@ -778,14 +778,39 @@ bool restore_before_setsid(struct pstree_item *child) return false; } -bool pid_in_pstree(pid_t pid) +struct pstree_item *pstree_item_by_virt(pid_t virt) { struct pstree_item *item; for_each_pstree_item(item) { - if (item->pid.real == pid) - return true; + if (item->pid.virt == virt) + return item; } - - return false; + return NULL; +} + +struct pstree_item *pstree_item_by_real(pid_t real) +{ + struct pstree_item *item; + + for_each_pstree_item(item) { + if (item->pid.real == real) + return item; + } + return NULL; +} + +int pid_to_virt(pid_t real) +{ + struct pstree_item *item; + + item = pstree_item_by_real(real); + if (item) + return item->pid.virt; + return 0; +} + +bool pid_in_pstree(pid_t pid) +{ + return pstree_item_by_real(pid) != NULL; }