Commit b77400fe authored by Pavel Emelyanov's avatar Pavel Emelyanov

dump: Allocate task fdset when needed

Move the fdset allocation inside dump_one_task and do it only for
non-zombies.

This makes sure we don't need to re-use an fdset, since we do allocate
it only when required.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent f1429be0
...@@ -1274,7 +1274,7 @@ static int dump_task_threads(struct parasite_ctl *parasite_ctl, ...@@ -1274,7 +1274,7 @@ static int dump_task_threads(struct parasite_ctl *parasite_ctl,
return 0; return 0;
} }
static int dump_one_task(const struct pstree_item *item, struct cr_fdset *cr_fdset) static int dump_one_task(const struct pstree_item *item)
{ {
pid_t pid = item->pid; pid_t pid = item->pid;
LIST_HEAD(vma_area_list); LIST_HEAD(vma_area_list);
...@@ -1282,6 +1282,7 @@ static int dump_one_task(const struct pstree_item *item, struct cr_fdset *cr_fds ...@@ -1282,6 +1282,7 @@ static int dump_one_task(const struct pstree_item *item, struct cr_fdset *cr_fds
int ret = -1; int ret = -1;
struct parasite_dump_misc misc; struct parasite_dump_misc misc;
struct sk_queue sk_queue = { }; struct sk_queue sk_queue = { };
struct cr_fdset *cr_fdset;
pr_info("========================================\n"); pr_info("========================================\n");
pr_info("Dumping task (pid: %d)\n", pid); pr_info("Dumping task (pid: %d)\n", pid);
...@@ -1301,7 +1302,8 @@ static int dump_one_task(const struct pstree_item *item, struct cr_fdset *cr_fds ...@@ -1301,7 +1302,8 @@ static int dump_one_task(const struct pstree_item *item, struct cr_fdset *cr_fds
return dump_one_zombie(item, &pps_buf); return dump_one_zombie(item, &pps_buf);
ret = -1; ret = -1;
if (!cr_dump_fdset_open(item->pid, CR_FD_DESC_TASK, cr_fdset)) cr_fdset = cr_dump_fdset_open(item->pid, CR_FD_DESC_TASK, NULL);
if (!cr_fdset)
goto err; goto err;
ret = collect_mappings(pid, &vma_area_list); ret = collect_mappings(pid, &vma_area_list);
...@@ -1504,17 +1506,9 @@ int cr_dump_tasks(pid_t pid, const struct cr_options *opts) ...@@ -1504,17 +1506,9 @@ int cr_dump_tasks(pid_t pid, const struct cr_options *opts)
goto err; goto err;
list_for_each_entry(item, &pstree_list, list) { list_for_each_entry(item, &pstree_list, list) {
struct cr_fdset *cr_fdset = NULL; if (dump_one_task(item))
cr_fdset = cr_dump_fdset_open(item->pid, CR_FD_DESC_NONE, NULL);
if (!cr_fdset)
goto err; goto err;
if (dump_one_task(item, cr_fdset))
goto err;
close_cr_fdset(&cr_fdset);
if (opts->leader_only) if (opts->leader_only)
break; break;
} }
......
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