Re: [PATCH] mke2fs: Support floating point values in mke2fs.conf

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

 



On Tue, 10 May 2011, Lukas Czerner wrote:

> On Tue, 10 May 2011, Aditya Kali wrote:
> 
> > This patch adds profile_get_double function in profile.c that allows reading
> > floating point values from profile files. The floating point support is used
> > to read reserved_ratio (reserved for super user block percentage) from
> > mke2fs.conf.
> 
> Hi Aditya,
> 
> thanks for the patch, however I have couple of comments. First of all
> the commit subject does not really reflect the change, because the point
> of this commit is not to teach e2fsprogs to be able to read double from
> profile but rather add new option to mke2fs.conf for specifying
> super-user reservation ratio. I am sorry it this seems like nitpicking,
> but it is really useful to be able to at least guess what the commit
> does from its subject.
> 
> Also it would be nice to have this option described in the mke2fs
> manual page as well.

Sorry, I meant mke2fs.conf man page. Other than that the patch looks
good and works as expected.

> 
> Thanks!
> -Lukas
> 
> > 
> > Signed-off-by: Aditya Kali <adityakali@xxxxxxxxxx>
> > ---
> >  e2fsck/profile.c     |   37 +++++++++++++++++++++++++++++++++++++
> >  e2fsck/profile.h     |    5 +++++
> >  misc/mke2fs.c        |   26 +++++++++++++++++++++++++-
> >  tests/mke2fs.conf.in |    1 +
> >  4 files changed, 68 insertions(+), 1 deletions(-)
> > 
> > diff --git a/e2fsck/profile.c b/e2fsck/profile.c
> > index 5e9dc53..327bfb4 100644
> > --- a/e2fsck/profile.c
> > +++ b/e2fsck/profile.c
> > @@ -1596,6 +1596,43 @@ profile_get_uint(profile_t profile, const char *name, const char *subname,
> >  	return 0;
> >  }
> >  
> > +errcode_t
> > +profile_get_double(profile_t profile, const char *name, const char *subname,
> > +		   const char *subsubname, double def_val, double *ret_double)
> > +{
> > +	const char	*value;
> > +	errcode_t	  retval;
> > +	char        *end_value;
> > +	double      double_val;
> > +
> > +	*ret_double = def_val;
> > +	if (profile == 0)
> > +		return 0;
> > +
> > +	retval = profile_get_value(profile, name, subname, subsubname, &value);
> > +	if (retval == PROF_NO_SECTION || retval == PROF_NO_RELATION) {
> > +		*ret_double = def_val;
> > +		return 0;
> > +	} else if (retval)
> > +		return retval;
> > +
> > +	if (value[0] == 0)
> > +		/* Empty string is no good.  */
> > +		return PROF_BAD_INTEGER;
> > +	errno = 0;
> > +	double_val = strtod(value, &end_value);
> > +
> > +	/* Overflow or underflow.  */
> > +	if (errno != 0)
> > +		return PROF_BAD_INTEGER;
> > +	/* Garbage in string.  */
> > +	if (end_value != value + strlen(value))
> > +		return PROF_BAD_INTEGER;
> > +
> > +	*ret_double = double_val;
> > +	return 0;
> > +}
> > +
> >  static const char *const conf_yes[] = {
> >      "y", "yes", "true", "t", "1", "on",
> >      0,
> > diff --git a/e2fsck/profile.h b/e2fsck/profile.h
> > index 0c17732..4cc10eb 100644
> > --- a/e2fsck/profile.h
> > +++ b/e2fsck/profile.h
> > @@ -78,6 +78,11 @@ long profile_get_uint
> >  		const char *subsubname, unsigned int def_val,
> >  		unsigned int *ret_int);
> >  
> > +long profile_get_double
> > +	(profile_t profile, const char *name, const char *subname,
> > +		const char *subsubname, double def_val,
> > +		double *ret_float);
> > +
> >  long profile_get_boolean
> >  	(profile_t profile, const char *name, const char *subname,
> >  			const char *subsubname, int def_val,
> > diff --git a/misc/mke2fs.c b/misc/mke2fs.c
> > index 23f8c10..313423b 100644
> > --- a/misc/mke2fs.c
> > +++ b/misc/mke2fs.c
> > @@ -1072,6 +1072,18 @@ static int get_int_from_profile(char **fs_types, const char *opt, int def_val)
> >  	return ret;
> >  }
> >  
> > +static double get_double_from_profile(char **fs_types, const char *opt,
> > +				      double def_val)
> > +{
> > +	double ret;
> > +	char **cpp;
> > +
> > +	profile_get_double(profile, "defaults", opt, 0, def_val, &ret);
> > +	for (cpp = fs_types; *cpp; cpp++)
> > +		profile_get_double(profile, "fs_types", *cpp, opt, ret, &ret);
> > +	return ret;
> > +}
> > +
> >  static int get_bool_from_profile(char **fs_types, const char *opt, int def_val)
> >  {
> >  	int ret;
> > @@ -1144,7 +1156,7 @@ static void PRS(int argc, char *argv[])
> >  	int		inode_ratio = 0;
> >  	int		inode_size = 0;
> >  	unsigned long	flex_bg_size = 0;
> > -	double		reserved_ratio = 5.0;
> > +	double		reserved_ratio = -1.0;
> >  	int		lsector_size = 0, psector_size = 0;
> >  	int		show_version_only = 0;
> >  	unsigned long long num_inodes = 0; /* unsigned long long to catch too-large input */
> > @@ -1667,6 +1679,18 @@ profile_error:
> >  			EXT3_FEATURE_COMPAT_HAS_JOURNAL;
> >  	}
> >  
> > +	/* Get reserved_ratio from profile if not specified on cmd line. */
> > +	if (reserved_ratio < 0.0) {
> > +		reserved_ratio = get_double_from_profile(
> > +					fs_types, "reserved_ratio", 5.0);
> > +		if (reserved_ratio > 50 || reserved_ratio < 0) {
> > +			com_err(program_name, 0,
> > +				_("invalid reserved blocks percent - %lf"),
> > +				reserved_ratio);
> > +			exit(1);
> > +		}
> > +	}
> > +
> >  	if (fs_param.s_feature_incompat &
> >  	    EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) {
> >  		reserved_ratio = 0;
> > diff --git a/tests/mke2fs.conf.in b/tests/mke2fs.conf.in
> > index 070d5d5..fbe2e2a 100644
> > --- a/tests/mke2fs.conf.in
> > +++ b/tests/mke2fs.conf.in
> > @@ -3,6 +3,7 @@
> >  	blocksize = 4096
> >  	inode_size = 256
> >  	inode_ratio = 16384
> > +	reserved_ratio = 5.0
> >  	enable_periodic_fsck = true
> >  	lazy_itable_init = false
> >  	default_mntopts = ^acl
> > 
> 
> 

-- 
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux