public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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