[Devel] Re: [PATCH RFC user-cr] add -p option to ckptinfo to dump pids tree

Oren Laadan orenl at cs.columbia.edu
Mon Jun 14 14:02:47 PDT 2010


I added a '-p' flag to ckptinfo based on this patch (will push
to repository later).

Thanks,

Oren.


On 03/09/2010 04:05 PM, Serge E. Hallyn wrote:
> This will be used by a restart wrapper to analyze /proc/$$/mountinfo.
> 
> Also add the new rpids field to ckpt_pids to reflect kernel.
> 
> It depends on the patch I just sent for linux-cr adding rpid to
> struct ckpt_pids.
> 
> Signed-off-by: Serge E. Hallyn <serue at us.ibm.com>
> ---
>  ckptinfo.c                     |   36 +++++++++++++++++++++++++++++++++++-
>  include/linux/checkpoint_hdr.h |    1 +
>  2 files changed, 36 insertions(+), 1 deletions(-)
> 
> diff --git a/ckptinfo.c b/ckptinfo.c
> index 6190301..b5922da 100644
> --- a/ckptinfo.c
> +++ b/ckptinfo.c
> @@ -28,6 +28,7 @@ static char usage_str[] =
>  "\tOptions:\n"
>  "\t -h,--help             print this help message\n"
>  "\t -e,--error            show error messages\n"
> +"\t -p,--pids		  just list process tree\n"
>  "\t -v,--verbose          verbose output\n"
>  "\t    --show-arch-regs   show registers contents\n"
>  "";
> @@ -36,6 +37,7 @@ struct args {
>  	int error;
>  	int verbose;
>  	int show_arch_regs;
> +	int show_process_tree;
>  };
>  
>  int __verbose;
> @@ -55,6 +57,7 @@ static int image_parse_vma(struct ckpt_hdr *h, int fd, struct args *args);
>  static int image_parse_file(struct ckpt_hdr *h, int fd, struct args *args);
>  static int image_parse_objref(struct ckpt_hdr *h, int fd, struct args *args);
>  static int image_parse_error(struct ckpt_hdr *h, int fd, struct args *args);
> +static void show_tasks(struct ckpt_hdr *h, int numpids);
>  
>  #ifdef __i386__
>  #define __HAVE_image_parse_cpu
> @@ -85,10 +88,11 @@ static void parse_args(struct args *args, int argc, char *argv[])
>  		{ "help",	no_argument,		NULL, 'h' },
>  		{ "error",	no_argument,		NULL, 'e' },
>  		{ "verbose",	no_argument,		NULL, 'v' },
> +		{ "pids",	no_argument,		NULL, 'p' },
>  		{ "show-arch-regs",	no_argument,	NULL, 1 },
>  		{ NULL,		0,			NULL, 0 }
>  	};
> -	static char optc[] = "hve";
> +	static char optc[] = "hvep";
>  
>  	while (1) {
>  		int c = getopt_long(argc, argv, optc, opts, NULL);
> @@ -99,6 +103,9 @@ static void parse_args(struct args *args, int argc, char *argv[])
>  			exit(1);
>  		case 'h':
>  			usage(usage_str);
> +		case 'p':
> +			args->show_process_tree = 1;
> +			break;
>  		case 'e':
>  			args->error = 1;
>  			break;
> @@ -208,6 +215,7 @@ static int image_parse(int fd, struct args *args)
>  {
>  	struct ckpt_hdr *h;
>  	int ret;
> +	int numpids, next_read_pids = 0;
>  
>  	do {
>  		ret = image_read_obj(fd, &h);
> @@ -215,6 +223,11 @@ static int image_parse(int fd, struct args *args)
>  			break;
>  		if (!h)
>  			continue;
> +		if (next_read_pids) {
> +			next_read_pids = 0;
> +			if (args->show_process_tree)
> +				show_tasks(h, numpids);
> +		}
>  		switch (h->type) {
>  		case CKPT_HDR_OBJREF:
>  			ret = image_parse_objref(h, fd, args);
> @@ -232,12 +245,33 @@ static int image_parse(int fd, struct args *args)
>  			ret = image_parse_error(h, fd, args);
>  			break;
>  		}
> +		if (h->type == CKPT_HDR_TREE) {
> +			struct ckpt_hdr_tree *t = (struct ckpt_hdr_tree *) h;
> +			numpids = t->nr_tasks;
> +			next_read_pids = 1;
> +		}
>  		free(h);
>  	} while (ret > 0);
>  
>  	return ret;
>  }
>  
> +struct ckpt_hdr_pids {
> +	struct ckpt_hdr h;
> +	struct ckpt_pids p;
> +};
> +
> +static void show_tasks(struct ckpt_hdr *h, int numpids)
> +{
> +	struct ckpt_hdr_pids *pp = (struct ckpt_hdr_pids *)h;
> +	struct ckpt_pids *p = &pp->p;
> +	int i;
> +
> +	for (i=0; i<numpids; i++)
> +		printf("Task %d: rpid %d pid %d vppid %d\n", i, p[i].rpid,
> +			p[i].vpid, p[i].vppid);
> +}
> +
>  static int image_parse_objref(struct ckpt_hdr *h, int fd, struct args *args)
>  {
>  	struct ckpt_hdr_objref *hh = (struct ckpt_hdr_objref *) h;
> diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
> index e8eaf23..9c6bc6d 100644
> --- a/include/linux/checkpoint_hdr.h
> +++ b/include/linux/checkpoint_hdr.h
> @@ -321,6 +321,7 @@ struct ckpt_hdr_tree {
>  } __attribute__((aligned(8)));
>  
>  struct ckpt_pids {
> +	__s32 rpid;
>  	__s32 vpid;
>  	__s32 vppid;
>  	__s32 vtgid;
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list