[Openais] [PATCH 1/2] flight recorder: switch from int to bytes for requested allocation

Fabio M. Di Nitto fdinitto at redhat.com
Thu Jun 18 10:41:27 PDT 2009


Committed revision 2255.

with ROUNDUP..

Fabio

On Thu, 2009-06-18 at 08:24 -0700, Steven Dake wrote:
> Looks good
> 
> "roundup" should be caps (ie: ROUNDUP) since its a macro.
> 
> Regards
> -steve
> 
> On Thu, 2009-06-18 at 15:14 +0200, Fabio M. Di Nitto wrote:
> > The flight recoder buffer size as specified in LOGSYS_DECLARE_SYSTEM
> > or _logsys_rec_init was expressed in number of ints. A developer asking
> > to allocate 512K would get a 2M allocation on a machine with sizeof(int) = 4.
> > 
> > This is confusing and the patch addresses it:
> > 
> > - rename rec_size to fltsize for external API (no type change),
> >   because rec_size is used many times internally for other reasons
> >   and it can be confusing.
> > 
> > - rename size to fltsize in _logsys_rec_init.
> > 
> > - document what we allocate and why.
> > 
> > - swap comments around to match the code.
> > 
> > - introduce a simple macro to perform rounding (stolen from linux-2.6.git).
> > 
> > Signed-off-by: Fabio M. Di Nitto <fdinitto at redhat.com>
> > ---
> > :100644 100644 90efdf8... 904e631... M	exec/logsys.c
> > :100644 100644 b34b327... 19e5dae... M	include/corosync/engine/logsys.h
> > :100644 100644 e19836e... 6017f10... M	man/logsys_overview.8
> >  exec/logsys.c                    |   31 ++++++++++++++++++++++++++-----
> >  include/corosync/engine/logsys.h |    4 ++--
> >  man/logsys_overview.8            |    5 +++--
> >  3 files changed, 31 insertions(+), 9 deletions(-)
> > 
> > diff --git a/exec/logsys.c b/exec/logsys.c
> > index 90efdf8..904e631 100644
> > --- a/exec/logsys.c
> > +++ b/exec/logsys.c
> > @@ -66,6 +66,8 @@
> >  
> >  #define MIN(x,y) ((x) < (y) ? (x) : (y))
> >  
> > +#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
> > +
> >  /*
> >   * syslog prioritynames, facility names to value mapping
> >   * Some C libraries build this in to their headers, but it is non-portable
> > @@ -1044,17 +1046,36 @@ int _logsys_wthread_create (void)
> >  	return (0);
> >  }
> >  
> > -int _logsys_rec_init (unsigned int size)
> > +int _logsys_rec_init (unsigned int fltsize)
> >  {
> >  	/*
> > -	 * First record starts at zero
> > -	 * Last record ends at zero
> > +	 * we need to allocate:
> > +	 * - requested size +
> > +	 *   2 extra unsigned ints for HEAD/TAIL tracking
> > +	 *
> > +	 * then round it up to the next PAGESIZE
> >  	 */
> > -	flt_data = malloc ((size + 2) * sizeof (unsigned int));
> > +	size_t flt_real_size;
> > +
> > +	flt_real_size = roundup(
> > +			(fltsize + (2 * sizeof (unsigned int))),
> > +			sysconf(_SC_PAGESIZE));
> > +
> > +	flt_data = malloc (flt_real_size);
> >  	if (flt_data == NULL) {
> >  		return (-1);
> >  	}
> > -	flt_data_size = size;
> > +
> > +	/*
> > +	 * flt_data_size tracks data by ints and not bytes/chars.
> > +	 */
> > +
> > +	flt_data_size = (flt_real_size / sizeof (unsigned int));
> > +
> > +	/*
> > +	 * First record starts at zero
> > +	 * Last record ends at zero
> > +	 */
> >  	flt_data[FDHEAD_INDEX] = 0;
> >  	flt_data[FDTAIL_INDEX] = 0;
> >  
> > diff --git a/include/corosync/engine/logsys.h b/include/corosync/engine/logsys.h
> > index b34b327..19e5dae 100644
> > --- a/include/corosync/engine/logsys.h
> > +++ b/include/corosync/engine/logsys.h
> > @@ -305,7 +305,7 @@ extern void *logsys_rec_end;
> >  #define LOGSYS_REC_END (&logsys_rec_end)
> >  
> >  #define LOGSYS_DECLARE_SYSTEM(name,mode,debug,file,file_priority,	\
> > -		syslog_facility,syslog_priority,format,rec_size)	\
> > +		syslog_facility,syslog_priority,format,fltsize)		\
> >  __attribute__ ((constructor))						\
> >  static void logsys_system_init (void)					\
> >  {									\
> > @@ -322,7 +322,7 @@ static void logsys_system_init (void)					\
> >  		exit (-1);						\
> >  	}								\
> >  									\
> > -	if (_logsys_rec_init (rec_size) < 0) {				\
> > +	if (_logsys_rec_init (fltsize) < 0) {				\
> >  		fprintf (stderr,					\
> >  			"Unable to initialize log flight recorder.\n");	\
> >  		exit (-1);						\
> > diff --git a/man/logsys_overview.8 b/man/logsys_overview.8
> > index e19836e..6017f10 100644
> > --- a/man/logsys_overview.8
> > +++ b/man/logsys_overview.8
> > @@ -62,7 +62,7 @@ require it and enables full logging capabilities before any application code is
> >  executed.
> >  
> >  #define LOGSYS_DECLARE_SYSTEM (name, mode, debug, file, file_priority,
> > -syslog_facility, syslog_priority, format, rec_size)
> > +syslog_facility, syslog_priority, format, fltsize)
> >  
> >  The name parameter is the name of the application or system.
> >  
> > @@ -99,7 +99,8 @@ syslog.
> >  The format parameter allows to set custom output format.
> >  Set to NULL to use built-in default.
> >  
> > -The rec_size parameter specifies the flight recorder buffer size.
> > +The fltsize parameter specifies the flight recorder buffer size in bytes. The requested value
> > +is increased by the size of 2 unsigned ints and rounded to the next PAGE_SIZE.
> >  
> >  An example declaration would be:
> >  
> 
> _______________________________________________
> Openais mailing list
> Openais at lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/openais



More information about the Openais mailing list