Re: [PATCH v7 5/9] trace-cmd: Refactored few functions in trace-record.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On Mar 19, 2019, at 8:55 AM, Tzvetomir Stoyanov <tstoyanov@xxxxxxxxxx> wrote:
> 
> In order to reuse the code inside the trace-cmd application, few
> functions from trace-record.c are refactored:
>  - make_instances() and tracecmd_remove_instances() are splited.
> New ones are created: tracecmd_make_instance() and tracecmd_remove_instance(),
> which are visible outside the trace-record.c
>  - Following functions are made non-static: tracecmd_init_instance()
> get_instance_dir(), write_instance_file(), write_tracing_on(),
> tracecmd_set_clock()
>  - New function is implemented: tracecmd_local_cpu_count(), an internal
> API to get local_cpu_count.
> 
> Signed-off-by: Tzvetomir Stoyanov <tstoyanov@xxxxxxxxxx>
> ---
> tracecmd/include/trace-local.h |  9 ++++
> tracecmd/trace-record.c        | 87 +++++++++++++++++++---------------
> 2 files changed, 58 insertions(+), 38 deletions(-)
> 
> diff --git a/tracecmd/include/trace-local.h b/tracecmd/include/trace-local.h
> index d7bdb1f..8413054 100644
> --- a/tracecmd/include/trace-local.h
> +++ b/tracecmd/include/trace-local.h
> @@ -235,6 +235,15 @@ void update_first_instance(struct buffer_instance *instance, int topt);
> void show_instance_file(struct buffer_instance *instance, const char *name);
> 
> int count_cpus(void);
> +void write_tracing_on(struct buffer_instance *instance, int on);
> +char *get_instance_dir(struct buffer_instance *instance);
> +int write_instance_file(struct buffer_instance *instance,
> +			const char *file, const char *str, const char *type);
> +void tracecmd_init_instance(struct buffer_instance *instance);
> +void tracecmd_make_instance(struct buffer_instance *instance);
> +int tracecmd_local_cpu_count(void);
> +void tracecmd_set_clock(struct buffer_instance *instance);
> +void tracecmd_remove_instance(struct buffer_instance *instance);
> 
> /* No longer in event-utils.h */
> void __noreturn die(const char *fmt, ...); /* Can be overriden */
> diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
> index 177060d..3950242 100644
> --- a/tracecmd/trace-record.c
> +++ b/tracecmd/trace-record.c
> 

<snipped>

> -static void set_clock(struct buffer_instance *instance)
> +void tracecmd_set_clock(struct buffer_instance *instance)
> {
> 	char *path;
> 	char *content;
> @@ -4316,49 +4314,57 @@ static void clear_func_filters(void)
> 	}
> }
> 
> -static void make_instances(void)
> +void tracecmd_make_instance(struct buffer_instance *instance)
> {
> -	struct buffer_instance *instance;
> 	struct stat st;
> 	char *path;
> 	int ret;
> 
> +	path = get_instance_dir(instance);
> +	ret = stat(path, &st);
> +	if (ret < 0) {
> +		ret = mkdir(path, 0777);

Here is the mkdir ...

> +		if (ret < 0)
> +			die("mkdir %s", path);
> +	} else
> +		/* Don't delete instances that already exist */
> +		instance->flags |= BUFFER_FL_KEEP;
> +	tracecmd_put_tracing_file(path);
> +
> +}
> +
> +static void make_instances(void)
> +{
> +	struct buffer_instance *instance;
> +
> 	for_each_instance(instance) {
> 		if (is_guest(instance))
> 			continue;
> +		tracecmd_make_instance(instance);
> +	}
> +}
> 
> -		path = get_instance_dir(instance);
> -		ret = stat(path, &st);
> -		if (ret < 0) {
> -			ret = mkdir(path, 0777);
> -			if (ret < 0)
> -				die("mkdir %s", path);
> -		} else
> -			/* Don't delete instances that already exist */
> -			instance->flags |= BUFFER_FL_KEEP;
> -		tracecmd_put_tracing_file(path);
> +void tracecmd_remove_instance(struct buffer_instance *instance)
> +{
> +	char *path;
> +
> +	if (instance->tracing_on_fd > 0) {
> +		close(instance->tracing_on_fd);
> +		instance->tracing_on_fd = 0;
> 	}
> +	path = get_instance_dir(instance);
> +	tracecmd_put_tracing_file(path);
> }
> 
> void tracecmd_remove_instances(void)
> {
> 	struct buffer_instance *instance;
> -	char *path;
> -	int ret;
> 
> 	for_each_instance(instance) {
> 		/* Only delete what we created */
> 		if (is_guest(instance) || (instance->flags & BUFFER_FL_KEEP))
> 			continue;
> -		if (instance->tracing_on_fd > 0) {
> -			close(instance->tracing_on_fd);
> -			instance->tracing_on_fd = 0;
> -		}
> -		path = get_instance_dir(instance);
> -		ret = rmdir(path);

But this rmdir is not moved to tracecmd_remove_instance() — it’s lost. This looks like it’s introducing a bug.

> -		if (ret < 0)
> -			die("rmdir %s", path);
> -		tracecmd_put_tracing_file(path);
> +		tracecmd_remove_instance(instance);
> 	}
> }

<snipped>

The rest looks fine.

Cheers,
      -Matt Helsley





[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux