From mboxrd@z Thu Jan 1 00:00:00 1970 From: compudj@krystal.dyndns.org (Mathieu Desnoyers) Date: Wed, 14 Jan 2009 20:20:08 -0500 Subject: [ltt-dev] [PATCH 1/2] Make lttctl mount debugfs automatically In-Reply-To: <49646208.7070607@cn.fujitsu.com> References: <49646208.7070607@cn.fujitsu.com> Message-ID: <20090115012008.GA7458@Krystal> * 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 > --- > 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