[lustre-devel] [PATCH v3 02/13] lustre: libcfs: open code cfs_trace_max_debug_mb() into cfs_trace_set_debug_mb()

NeilBrown neilb at suse.com
Thu Jun 28 20:55:47 PDT 2018


On Thu, Jun 28 2018, Andreas Dilger wrote:

> On Jun 27, 2018, at 13:38, James Simmons <jsimmons at infradead.org> wrote:
>> 
>> From: NeilBrown <neilb at suse.com>
>> 
>> This function in used twice.
>> In libcfs_debug_init() the usage is pointless as
>> the only place that set libcfs_debug_mb ensures
>> that it does not exceed the maximum.  So checking
>> again can never help.
>> 
>> So open-code the small function into the only
>> other place that it is used - in cfs_trace_set_debug_mb(),
>> which is used to set libcfs_debug_mb.
>> 
>> Signed-off-by: NeilBrown <neilb at suse.com>
>> ---
>> drivers/staging/lustre/lnet/libcfs/debug.c           | 6 +++---
>> drivers/staging/lustre/lnet/libcfs/linux-tracefile.c | 7 -------
>> drivers/staging/lustre/lnet/libcfs/tracefile.c       | 3 ++-
>> drivers/staging/lustre/lnet/libcfs/tracefile.h       | 1 -
>> 4 files changed, 5 insertions(+), 12 deletions(-)
>> 
>> diff --git a/drivers/staging/lustre/lnet/libcfs/debug.c b/drivers/staging/lustre/lnet/libcfs/debug.c
>> index 06f694f..71effcf 100644
>> --- a/drivers/staging/lustre/lnet/libcfs/debug.c
>> +++ b/drivers/staging/lustre/lnet/libcfs/debug.c
>> @@ -411,10 +411,10 @@ int libcfs_debug_init(unsigned long bufsize)
>> 			sizeof(libcfs_debug_file_path_arr));
>> 	}
>> 
>> -	/* If libcfs_debug_mb is set to an invalid value or uninitialized
>> -	 * then just make the total buffers smp_num_cpus * TCD_MAX_PAGES
>> +	/* If libcfs_debug_mb is uninitialized then just make the
>> +	 * total buffers smp_num_cpus * TCD_MAX_PAGES
>> 	 */
>> -	if (max > cfs_trace_max_debug_mb() || max < num_possible_cpus()) {
>> +	if (max < num_possible_cpus()) {
>
> The libcfs_debug_mb value may be set as a module option, so that the debug
> buffer can be sized before any debugging messages are logged (in case of
> problems early on in module loading and such).  This code validates that
> the value set via module parameter is sane.
>
> It may be that there is a mechanism to limit the value set by module option
> in newer kernels, but that wasn't the case in the past.

There is such a mechanism now.
When the libcfs_debug_mb module parameter is detected,
libcfs_param_debug_mb_set() is called to parse it.
This function uses kstrtouint() to convert the string
to unsigned int, and then...... oh, that's odd.
If the current value of libcfs_debug_mb is zero, then
then the number is used without further checking.  I hadn't noticed
that.
If that current value is non-zero, then the parsed number
is passed to cfs_trace_set_debug_mb().  I had assumed that
always happens, and that function imposes the required limit.

I'll fix that up - make sure it always imposes the
appropriate limit.

Thanks for the review!

NeilBrown


>
> Cheers, Andreas
>
>> 		max = TCD_MAX_PAGES;
>> 	} else {
>> 		max = max / num_possible_cpus();
>> diff --git a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
>> index 9e72220..64a5bc1 100644
>> --- a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
>> +++ b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
>> @@ -227,10 +227,3 @@ void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
>> 			hdr->ph_line_num, fn, len, buf);
>> 	}
>> }
>> -
>> -int cfs_trace_max_debug_mb(void)
>> -{
>> -	int  total_mb = (totalram_pages >> (20 - PAGE_SHIFT));
>> -
>> -	return max(512, (total_mb * 80) / 100);
>> -}
>> diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
>> index 5f31933..72321ce 100644
>> --- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
>> +++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
>> @@ -933,7 +933,8 @@ int cfs_trace_set_debug_mb(int mb)
>> 	int i;
>> 	int j;
>> 	int pages;
>> -	int limit = cfs_trace_max_debug_mb();
>> +	int total_mb = (totalram_pages >> (20 - PAGE_SHIFT));
>> +	int limit = max(512, (total_mb * 80) / 100);
>> 	struct cfs_trace_cpu_data *tcd;
>> 
>> 	if (mb < num_possible_cpus()) {
>> diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.h b/drivers/staging/lustre/lnet/libcfs/tracefile.h
>> index 9f6b73d..bd1a1ef 100644
>> --- a/drivers/staging/lustre/lnet/libcfs/tracefile.h
>> +++ b/drivers/staging/lustre/lnet/libcfs/tracefile.h
>> @@ -88,7 +88,6 @@ int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
>> void libcfs_register_panic_notifier(void);
>> void libcfs_unregister_panic_notifier(void);
>> extern int libcfs_panic_in_progress;
>> -int cfs_trace_max_debug_mb(void);
>> 
>> #define TCD_MAX_PAGES (5 << (20 - PAGE_SHIFT))
>> #define TCD_STOCK_PAGES (TCD_MAX_PAGES)
>> --
>> 1.8.3.1
>> 
>
> Cheers, Andreas
> ---
> Andreas Dilger
> Principal Lustre Architect
> Whamcloud
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.lustre.org/pipermail/lustre-devel-lustre.org/attachments/20180629/dad555dd/attachment.sig>


More information about the lustre-devel mailing list