[ltt-dev] [PATCH 1/2] Make lttctl mount debugfs automatically

Mathieu Desnoyers compudj at krystal.dyndns.org
Wed Jan 14 20:20:08 EST 2009


* Zhaolei (zhaolei at cn.fujitsu.com) wrote:
> lttctl need debugfs mounted,
> This patch make lttctl mount debugfs automatically when it is not mounted.
> 
> Little cleanup also done(combile 2 getdebugfsmntdir() into one).
> 
> Applies on top of ltt-control-0.63-03012009.
> 

Applied to ltt-control 0.64, thanks !

Mathieu

> Signed-off-by: Zhao lei <zhaolei at cn.fujitsu.com>
> ---
>  liblttctl/liblttctl.c |   54 +++++++++++++++++++++++++++++---------------------
>  liblttctl/lttctl.h    |    3 ++
>  lttctl/lttctl.c       |   40 +++++++------------------------------
>  3 files changed, 43 insertions(+), 54 deletions(-)
> diff -Nur ltt-control-0.63-03012009.org/liblttctl/liblttctl.c ltt-control-0.63-03012009.new/liblttctl/liblttctl.c
> --- ltt-control-0.63-03012009.org/liblttctl/liblttctl.c	2009-01-07 09:52:05.000000000 +0800
> +++ ltt-control-0.63-03012009.new/liblttctl/liblttctl.c	2009-01-07 14:48:18.000000000 +0800
> @@ -39,27 +39,7 @@
>  
>  static int initdebugfsmntdir(void)
>  {
> -	char mnt_dir[PATH_MAX];
> -	char mnt_type[PATH_MAX];
> -
> -	FILE *fp = fopen("/proc/mounts", "r");
> -	if (!fp) {
> -		fprintf(stderr, "%s: Can't open /proc/mounts\n", __func__);
> -		return 1;
> -	}
> -
> -	while (1) {
> -		if (fscanf(fp, "%*s %s %s %*s %*s %*s", mnt_dir, mnt_type)
> -			<= 0) {
> -			fprintf(stderr, "%s: debugfs mountpoint not found\n",
> -				__func__);
> -			return 1;
> -		}
> -		if (!strcmp(mnt_type, "debugfs")) {
> -			strcpy(debugfsmntdir, mnt_dir);
> -			return 0;
> -		}
> -	}
> +	return getdebugfsmntdir(debugfsmntdir);
>  }
>  
>  int lttctl_init(void)
> @@ -70,7 +50,7 @@
>  
>  	ret = initdebugfsmntdir();
>  	if (ret) {
> -		fprintf(stderr, "Debugfs mount point not found\n");
> +		fprintf(stderr, "Get debugfs mount point failed\n");
>  		return 1;
>  	}
>  
> @@ -664,3 +644,33 @@
>  arg_error:
>  	return ret;
>  }
> +
> +int getdebugfsmntdir(char *mntdir)
> +{
> +	char mnt_dir[PATH_MAX];
> +	char mnt_type[PATH_MAX];
> +	int trymount_done = 0;
> +
> +	FILE *fp = fopen("/proc/mounts", "r");
> +	if (!fp)
> +		return -EINVAL;
> +
> +find_again:
> +	while (1) {
> +		if (fscanf(fp, "%*s %s %s %*s %*s %*s", mnt_dir, mnt_type) <= 0)
> +			break;
> +
> +		if (!strcmp(mnt_type, "debugfs")) {
> +			strcpy(mntdir, mnt_dir);
> +			return 0;
> +		}
> +	}
> +
> +	if (!trymount_done) {
> +		mount("debugfs", "/sys/kernel/debug/", "debugfs", 0, NULL);
> +		trymount_done = 1;
> +		goto find_again;
> +	}
> +
> +	return -ENOENT;
> +}
> diff -Nur ltt-control-0.63-03012009.org/liblttctl/lttctl.h ltt-control-0.63-03012009.new/liblttctl/lttctl.h
> --- ltt-control-0.63-03012009.org/liblttctl/lttctl.h	2009-01-07 09:52:05.000000000 +0800
> +++ ltt-control-0.63-03012009.new/liblttctl/lttctl.h	2009-01-07 14:48:18.000000000 +0800
> @@ -36,4 +36,7 @@
>  int lttctl_set_channel_subbuf_size(const char *name, const char *channel,
>  		unsigned subbuf_size);
>  
> +/* Helper functions */
> +int getdebugfsmntdir(char *mntdir);
> +
>  #endif /*_LIBLTT_H */
> diff -Nur ltt-control-0.63-03012009.org/lttctl/lttctl.c ltt-control-0.63-03012009.new/lttctl/lttctl.c
> --- ltt-control-0.63-03012009.org/lttctl/lttctl.c	2009-01-07 09:52:05.000000000 +0800
> +++ ltt-control-0.63-03012009.new/lttctl/lttctl.c	2009-01-07 14:48:18.000000000 +0800
> @@ -142,26 +142,6 @@
>  	printf("\n");
>  }
>  
> -static int getdebugfsmntdir(char *mntdir)
> -{
> -	char mnt_dir[PATH_MAX];
> -	char mnt_type[PATH_MAX];
> -
> -	FILE *fp = fopen("/proc/mounts", "r");
> -	if (!fp)
> -		return -EINVAL;
> -
> -	while (1) {
> -		if (fscanf(fp, "%*s %s %s %*s %*s %*s", mnt_dir, mnt_type) <= 0)
> -			return -ENOENT;
> -
> -		if (!strcmp(mnt_type, "debugfs")) {
> -			strcpy(mntdir, mnt_dir);
> -			return 0;
> -		}
> -	}
> -}
> -
>  /*
>   * Separate option name to 3 fields
>   * Ex:
> @@ -559,19 +539,15 @@
>  			if (getdebugfsmntdir(channel_root_default) == 0) {
>  				strcat(channel_root_default, "/ltt");
>  				opt_channel_root = channel_root_default;
> +			} else {
> +				fprintf(stderr,
> +					"Channel_root is necessary for -w"
> +					" option, but neither --channel_root"
> +					" option\n"
> +					"specified, nor debugfs's mount dir"
> +					" found, mount debugfs also failed\n");
> +				return -EINVAL;
>  			}
> -		/* Todo:
> -		 * if (!opt_channel_root)
> -		 *	if (auto_mount_debugfs_dir(channel_root_default) == 0)
> -		 *		opt_channel_root = debugfs_dir_mnt_point;
> -		 */
> -		if (!opt_channel_root) {
> -			fprintf(stderr,
> -				"Channel_root is necessary for -w option,"
> -				" but neither --channel_root option\n"
> -				"specified, nor debugfs's mount dir found.\n");
> -			return -EINVAL;
> -		}
>  
>  		if (opt_dump_threads == 0)
>  			opt_dump_threads = 1;
> 
> 
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> 

-- 
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68




More information about the lttng-dev mailing list