* [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup
@ 2014-12-17 4:24 Chris Rorvick
2014-12-17 4:24 ` [PATCH v2 1/2] drivers: staging: lustre: Use mult if units not specified Chris Rorvick
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Chris Rorvick @ 2014-12-17 4:24 UTC (permalink / raw)
To: Oleg Drokin, Andreas Dilger
Cc: Chris Rorvick, Rickard Strandqvist, Greg Kroah-Hartman,
Julia Lawall, Greg Donald, John L. Hammond, Andriy Skulysh,
Fabian Frederick, James Simmons, Dan Carpenter, HPDD-discuss,
devel, linux-kernel
Added a second patch to address Dan Carpenter's concern with the
complexity of passing the sign through `mult'. Compile tested only.
Chris Rorvick (2):
drivers: staging: lustre: Use mult if units not specified
drivers: staging: lustre: Track sign separately
drivers/staging/lustre/lustre/obdclass/lprocfs_status.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
--
2.1.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v2 1/2] drivers: staging: lustre: Use mult if units not specified 2014-12-17 4:24 [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup Chris Rorvick @ 2014-12-17 4:24 ` Chris Rorvick 2014-12-17 4:24 ` [PATCH v2 2/2] drivers: staging: lustre: Track sign separately Chris Rorvick 2014-12-17 7:56 ` [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup Dan Carpenter 2 siblings, 0 replies; 5+ messages in thread From: Chris Rorvick @ 2014-12-17 4:24 UTC (permalink / raw) To: Oleg Drokin, Andreas Dilger Cc: Chris Rorvick, Rickard Strandqvist, Greg Kroah-Hartman, Julia Lawall, Greg Donald, John L. Hammond, Andriy Skulysh, Fabian Frederick, James Simmons, Dan Carpenter, HPDD-discuss, devel, linux-kernel Units can be passed to lprocfs_write_frac_u64_helper() via a suffix (e.g., "...K", "...M", etc.) tacked onto the value. A comment states that "specified units override the multiplier," though the multiplier is overridden regardless. Update the conditional logic so that it only applies when units are specified. Signed-off-by: Chris Rorvick <chris@rorvick.com> --- drivers/staging/lustre/lustre/obdclass/lprocfs_status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 61e04af..92ed0a0 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -1910,7 +1910,7 @@ int lprocfs_write_frac_u64_helper(const char *buffer, unsigned long count, units <<= 10; } /* Specified units override the multiplier */ - if (units) + if (units > 1) mult = mult < 0 ? -units : units; frac *= mult; -- 2.1.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] drivers: staging: lustre: Track sign separately 2014-12-17 4:24 [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup Chris Rorvick 2014-12-17 4:24 ` [PATCH v2 1/2] drivers: staging: lustre: Use mult if units not specified Chris Rorvick @ 2014-12-17 4:24 ` Chris Rorvick 2014-12-17 6:54 ` Dilger, Andreas 2014-12-17 7:56 ` [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup Dan Carpenter 2 siblings, 1 reply; 5+ messages in thread From: Chris Rorvick @ 2014-12-17 4:24 UTC (permalink / raw) To: Oleg Drokin, Andreas Dilger Cc: Chris Rorvick, Rickard Strandqvist, Greg Kroah-Hartman, Julia Lawall, Greg Donald, John L. Hammond, Andriy Skulysh, Fabian Frederick, James Simmons, Dan Carpenter, HPDD-discuss, devel, linux-kernel The `mult' parameter is negated if the user data begins with a '-' so that the final value has the appropriate sign. But `mult' is only used if the user data does not include a "units" suffix. In this case, `mult' is overridden with the numeric scale conveyed by the units suffix, but retains the sign of the original value. Having `mult' serving double-duty works but is confusing. Use a new local variable to store the sign of the user data instead. This also fixes a pitfall of passing 0 to `mult', expecting it to be ignored when a units suffix is specified, but having the effect of taking the absolute value of the user-provided data. Signed-off-by: Chris Rorvick <chris@rorvick.com> --- drivers/staging/lustre/lustre/obdclass/lprocfs_status.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 92ed0a0..b6c3352 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -1864,6 +1864,7 @@ int lprocfs_write_frac_u64_helper(const char *buffer, unsigned long count, char kernbuf[22], *end, *pbuf; __u64 whole, frac = 0, units; unsigned frac_d = 1; + int sign = 1; if (count > (sizeof(kernbuf) - 1)) return -EINVAL; @@ -1874,7 +1875,7 @@ int lprocfs_write_frac_u64_helper(const char *buffer, unsigned long count, kernbuf[count] = '\0'; pbuf = kernbuf; if (*pbuf == '-') { - mult = -mult; + sign = -1; pbuf++; } @@ -1911,11 +1912,11 @@ int lprocfs_write_frac_u64_helper(const char *buffer, unsigned long count, } /* Specified units override the multiplier */ if (units > 1) - mult = mult < 0 ? -units : units; + mult = units; frac *= mult; do_div(frac, frac_d); - *val = whole * mult + frac; + *val = sign * (whole * mult + frac); return 0; } EXPORT_SYMBOL(lprocfs_write_frac_u64_helper); -- 2.1.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] drivers: staging: lustre: Track sign separately 2014-12-17 4:24 ` [PATCH v2 2/2] drivers: staging: lustre: Track sign separately Chris Rorvick @ 2014-12-17 6:54 ` Dilger, Andreas 0 siblings, 0 replies; 5+ messages in thread From: Dilger, Andreas @ 2014-12-17 6:54 UTC (permalink / raw) To: Chris Rorvick, Drokin, Oleg Cc: Rickard Strandqvist, Greg Kroah-Hartman, Julia Lawall, Greg Donald, Hammond, John, Andriy Skulysh, Fabian Frederick, James Simmons, Dan Carpenter, HPDD-discuss@lists.01.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org On 2014/12/16, 9:24 PM, "Chris Rorvick" <chris@rorvick.com> wrote: >The `mult' parameter is negated if the user data begins with a '-' so >that the final value has the appropriate sign. But `mult' is only used >if the user data does not include a "units" suffix. In this case, >`mult' is overridden with the numeric scale conveyed by the units suffix, >but retains the sign of the original value. > >Having `mult' serving double-duty works but is confusing. Use a new >local variable to store the sign of the user data instead. This also >fixes a pitfall of passing 0 to `mult', expecting it to be ignored when >a units suffix is specified, but having the effect of taking the >absolute value of the user-provided data. > >Signed-off-by: Chris Rorvick <chris@rorvick.com> Both patches look good to me. Reviewed-by: Andreas Dilger <andreas.dilger@intel.com> >--- > drivers/staging/lustre/lustre/obdclass/lprocfs_status.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > >diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c >b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c >index 92ed0a0..b6c3352 100644 >--- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c >+++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c >@@ -1864,6 +1864,7 @@ int lprocfs_write_frac_u64_helper(const char >*buffer, unsigned long count, > char kernbuf[22], *end, *pbuf; > __u64 whole, frac = 0, units; > unsigned frac_d = 1; >+ int sign = 1; > > if (count > (sizeof(kernbuf) - 1)) > return -EINVAL; >@@ -1874,7 +1875,7 @@ int lprocfs_write_frac_u64_helper(const char >*buffer, unsigned long count, > kernbuf[count] = '\0'; > pbuf = kernbuf; > if (*pbuf == '-') { >- mult = -mult; >+ sign = -1; > pbuf++; > } > >@@ -1911,11 +1912,11 @@ int lprocfs_write_frac_u64_helper(const char >*buffer, unsigned long count, > } > /* Specified units override the multiplier */ > if (units > 1) >- mult = mult < 0 ? -units : units; >+ mult = units; > > frac *= mult; > do_div(frac, frac_d); >- *val = whole * mult + frac; >+ *val = sign * (whole * mult + frac); > return 0; > } > EXPORT_SYMBOL(lprocfs_write_frac_u64_helper); >-- >2.1.0 > > Cheers, Andreas -- Andreas Dilger Lustre Software Architect Intel High Performance Data Division ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup 2014-12-17 4:24 [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup Chris Rorvick 2014-12-17 4:24 ` [PATCH v2 1/2] drivers: staging: lustre: Use mult if units not specified Chris Rorvick 2014-12-17 4:24 ` [PATCH v2 2/2] drivers: staging: lustre: Track sign separately Chris Rorvick @ 2014-12-17 7:56 ` Dan Carpenter 2 siblings, 0 replies; 5+ messages in thread From: Dan Carpenter @ 2014-12-17 7:56 UTC (permalink / raw) To: Chris Rorvick Cc: Oleg Drokin, Andreas Dilger, Rickard Strandqvist, Greg Kroah-Hartman, Julia Lawall, Greg Donald, John L. Hammond, Andriy Skulysh, Fabian Frederick, James Simmons, HPDD-discuss, devel, linux-kernel On Tue, Dec 16, 2014 at 10:24:00PM -0600, Chris Rorvick wrote: > Added a second patch to address Dan Carpenter's concern with the > complexity of passing the sign through `mult'. Compile tested only. Thanks. That does look cleaner. regards, dan carpenter ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-12-17 7:56 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-12-17 4:24 [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup Chris Rorvick 2014-12-17 4:24 ` [PATCH v2 1/2] drivers: staging: lustre: Use mult if units not specified Chris Rorvick 2014-12-17 4:24 ` [PATCH v2 2/2] drivers: staging: lustre: Track sign separately Chris Rorvick 2014-12-17 6:54 ` Dilger, Andreas 2014-12-17 7:56 ` [PATCH v2 0/2] lprocfs_write_frac_u64_helper cleanup Dan Carpenter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox