All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] nfs: fix a couple of minor portability issues
@ 2011-08-10 17:56 Chris Metcalf
  2011-08-10 22:02 ` Boaz Harrosh
  2011-08-11 15:17 ` [PATCH] nfs: fix a couple of minor portability issues Peng Tao
  0 siblings, 2 replies; 7+ messages in thread
From: Chris Metcalf @ 2011-08-10 17:56 UTC (permalink / raw)
  To: Trond Myklebust, linux-nfs, linux-kernel

Building on tilepro revealed two minor portability issues: the
blocklayout.c file used prefetchw() without #include <linux/prefetch.h>,
and the nfs4filelayout.c file used do_div() on an s64 not a u64.
This change fixes those two issues so the NFS code builds on tilepro.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
---
 fs/nfs/blocklayout/blocklayout.c |    1 +
 fs/nfs/nfs4filelayout.c          |    6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index e56564d..9561c8f 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -36,6 +36,7 @@
 #include <linux/namei.h>
 #include <linux/bio.h>		/* struct bio */
 #include <linux/buffer_head.h>	/* various write calls */
+#include <linux/prefetch.h>
 
 #include "blocklayout.h"
 
diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index e8915d4..6976a72 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -48,13 +48,13 @@ filelayout_get_dense_offset(struct nfs4_filelayout_segment *flseg,
 			    loff_t offset)
 {
 	u32 stripe_width = flseg->stripe_unit * flseg->dsaddr->stripe_count;
-	u64 tmp;
+	u64 tmp, uoff;
 
 	offset -= flseg->pattern_offset;
-	tmp = offset;
+	tmp = uoff = offset;
 	do_div(tmp, stripe_width);
 
-	return tmp * flseg->stripe_unit + do_div(offset, flseg->stripe_unit);
+	return tmp * flseg->stripe_unit + do_div(uoff, flseg->stripe_unit);
 }
 
 /* This function is used by the layout driver to calculate the
-- 
1.6.5.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] nfs: fix a couple of minor portability issues
  2011-08-10 17:56 [PATCH] nfs: fix a couple of minor portability issues Chris Metcalf
@ 2011-08-10 22:02 ` Boaz Harrosh
  2011-08-11 13:26   ` Chris Metcalf
  2011-08-11 15:17 ` [PATCH] nfs: fix a couple of minor portability issues Peng Tao
  1 sibling, 1 reply; 7+ messages in thread
From: Boaz Harrosh @ 2011-08-10 22:02 UTC (permalink / raw)
  To: Chris Metcalf; +Cc: Trond Myklebust, linux-nfs, linux-kernel

On 08/10/2011 10:56 AM, Chris Metcalf wrote:
> Building on tilepro revealed two minor portability issues: the
> blocklayout.c file used prefetchw() without #include <linux/prefetch.h>,
> and the nfs4filelayout.c file used do_div() on an s64 not a u64.
> This change fixes those two issues so the NFS code builds on tilepro.
> 
> Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
> ---
>  fs/nfs/blocklayout/blocklayout.c |    1 +
>  fs/nfs/nfs4filelayout.c          |    6 +++---
>  2 files changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
> index e56564d..9561c8f 100644
> --- a/fs/nfs/blocklayout/blocklayout.c
> +++ b/fs/nfs/blocklayout/blocklayout.c
> @@ -36,6 +36,7 @@
>  #include <linux/namei.h>
>  #include <linux/bio.h>		/* struct bio */
>  #include <linux/buffer_head.h>	/* various write calls */
> +#include <linux/prefetch.h>
>  
>  #include "blocklayout.h"
>  
> diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
> index e8915d4..6976a72 100644
> --- a/fs/nfs/nfs4filelayout.c
> +++ b/fs/nfs/nfs4filelayout.c
> @@ -48,13 +48,13 @@ filelayout_get_dense_offset(struct nfs4_filelayout_segment *flseg,
>  			    loff_t offset)
>  {
>  	u32 stripe_width = flseg->stripe_unit * flseg->dsaddr->stripe_count;
> -	u64 tmp;
> +	u64 tmp, uoff;
>  
>  	offset -= flseg->pattern_offset;
> -	tmp = offset;
> +	tmp = uoff = offset;
>  	do_div(tmp, stripe_width);
>  
> -	return tmp * flseg->stripe_unit + do_div(offset, flseg->stripe_unit);
> +	return tmp * flseg->stripe_unit + do_div(uoff, flseg->stripe_unit);

For proper u64 divisions it is best to use the div_u64 (and div64_u64) and not
use do_div. (And please don't add an unnecessary variable, just use a cast)

Thanks
Boaz

>  }
>  
>  /* This function is used by the layout driver to calculate the


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] nfs: fix a couple of minor portability issues
  2011-08-10 22:02 ` Boaz Harrosh
@ 2011-08-11 13:26   ` Chris Metcalf
  2011-08-11 18:27     ` Boaz Harrosh
  0 siblings, 1 reply; 7+ messages in thread
From: Chris Metcalf @ 2011-08-11 13:26 UTC (permalink / raw)
  To: Boaz Harrosh; +Cc: Trond Myklebust, linux-nfs, linux-kernel, Dean Hildebrand

On 8/10/2011 6:02 PM, Boaz Harrosh wrote:
> On 08/10/2011 10:56 AM, Chris Metcalf wrote:
>> Building on tilepro revealed two minor portability issues: the
>> blocklayout.c file used prefetchw() without #include <linux/prefetch.h>,
>> and the nfs4filelayout.c file used do_div() on an s64 not a u64.
>> This change fixes those two issues so the NFS code builds on tilepro.
>>
>> [...] 
>> diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
>> index e8915d4..6976a72 100644
>> --- a/fs/nfs/nfs4filelayout.c
>> +++ b/fs/nfs/nfs4filelayout.c
>> @@ -48,13 +48,13 @@ filelayout_get_dense_offset(struct nfs4_filelayout_segment *flseg,
>>  			    loff_t offset)
>>  {
>>  	u32 stripe_width = flseg->stripe_unit * flseg->dsaddr->stripe_count;
>> -	u64 tmp;
>> +	u64 tmp, uoff;
>>  
>>  	offset -= flseg->pattern_offset;
>> -	tmp = offset;
>> +	tmp = uoff = offset;
>>  	do_div(tmp, stripe_width);
>>  
>> -	return tmp * flseg->stripe_unit + do_div(offset, flseg->stripe_unit);
>> +	return tmp * flseg->stripe_unit + do_div(uoff, flseg->stripe_unit);
> For proper u64 divisions it is best to use the div_u64 (and div64_u64) and not
> use do_div. (And please don't add an unnecessary variable, just use a cast)

You can't use a cast with do_div() or you get errors about non-lvalues.

And the context here is that we want the remainder, not the divided result,
so we'd need a temporary variable anyway if we were going to use a routine
from math64.h, presumably div_u64_rem().  But that's just an inline wrapper
around do_div() anyway, so it's no more efficient, and not obviously any
less "cluttered" in the source code here.  The original code author (who
I'm adding belatedly to this email) may have a stronger opinion.

I'm not the author or maintainer of this code, I just want it to compile
without warning on 32-bit architectures :-)

-- 
Chris Metcalf, Tilera Corp.
http://www.tilera.com


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] nfs: fix a couple of minor portability issues
  2011-08-10 17:56 [PATCH] nfs: fix a couple of minor portability issues Chris Metcalf
  2011-08-10 22:02 ` Boaz Harrosh
@ 2011-08-11 15:17 ` Peng Tao
  1 sibling, 0 replies; 7+ messages in thread
From: Peng Tao @ 2011-08-11 15:17 UTC (permalink / raw)
  To: Chris Metcalf; +Cc: Trond Myklebust, linux-nfs, linux-kernel

On Thu, Aug 11, 2011 at 1:56 AM, Chris Metcalf <cmetcalf@tilera.com> wrote:
> Building on tilepro revealed two minor portability issues: the
> blocklayout.c file used prefetchw() without #include <linux/prefetch.h>,
> and the nfs4filelayout.c file used do_div() on an s64 not a u64.
> This change fixes those two issues so the NFS code builds on tilepro.
>
> Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
> ---
>  fs/nfs/blocklayout/blocklayout.c |    1 +
>  fs/nfs/nfs4filelayout.c          |    6 +++---
>  2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
> index e56564d..9561c8f 100644
> --- a/fs/nfs/blocklayout/blocklayout.c
> +++ b/fs/nfs/blocklayout/blocklayout.c
> @@ -36,6 +36,7 @@
>  #include <linux/namei.h>
>  #include <linux/bio.h>         /* struct bio */
>  #include <linux/buffer_head.h> /* various write calls */
> +#include <linux/prefetch.h>
This is already fixed in Trond's nfs-for-next branch by commit 88c9e4219.

>
>  #include "blocklayout.h"
>
> diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
> index e8915d4..6976a72 100644
> --- a/fs/nfs/nfs4filelayout.c
> +++ b/fs/nfs/nfs4filelayout.c
> @@ -48,13 +48,13 @@ filelayout_get_dense_offset(struct nfs4_filelayout_segment *flseg,
>                            loff_t offset)
>  {
>        u32 stripe_width = flseg->stripe_unit * flseg->dsaddr->stripe_count;
> -       u64 tmp;
> +       u64 tmp, uoff;
>
>        offset -= flseg->pattern_offset;
> -       tmp = offset;
> +       tmp = uoff = offset;
>        do_div(tmp, stripe_width);
>
> -       return tmp * flseg->stripe_unit + do_div(offset, flseg->stripe_unit);
> +       return tmp * flseg->stripe_unit + do_div(uoff, flseg->stripe_unit);
>  }
>
>  /* This function is used by the layout driver to calculate the
> --
> 1.6.5.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>



-- 
Thanks,
-Bergwolf

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] nfs: fix a couple of minor portability issues
  2011-08-11 13:26   ` Chris Metcalf
@ 2011-08-11 18:27     ` Boaz Harrosh
  2011-08-11 19:32       ` [PATCH v2] nfs: fix a minor do_div portability issue Chris Metcalf
  0 siblings, 1 reply; 7+ messages in thread
From: Boaz Harrosh @ 2011-08-11 18:27 UTC (permalink / raw)
  To: Chris Metcalf; +Cc: Trond Myklebust, linux-nfs, linux-kernel, Dean Hildebrand

On 08/11/2011 06:26 AM, Chris Metcalf wrote:
> 
> You can't use a cast with do_div() or you get errors about non-lvalues.
> 
> And the context here is that we want the remainder, not the divided result,
> so we'd need a temporary variable anyway if we were going to use a routine
> from math64.h, presumably div_u64_rem().  But that's just an inline wrapper
> around do_div() anyway, so it's no more efficient, and not obviously any
> less "cluttered" in the source code here.  The original code author (who
> I'm adding belatedly to this email) may have a stronger opinion.
> 
> I'm not the author or maintainer of this code, I just want it to compile
> without warning on 32-bit architectures :-)
> 

Still, if you fix it do it properly by using, as you said, div_u64_rem().
It's what needs to be used with u64 types.

Thanks
Boaz

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2] nfs: fix a minor do_div portability issue
  2011-08-11 18:27     ` Boaz Harrosh
@ 2011-08-11 19:32       ` Chris Metcalf
  2011-08-11 20:54         ` [PATCH v3] " Boaz Harrosh
  0 siblings, 1 reply; 7+ messages in thread
From: Chris Metcalf @ 2011-08-11 19:32 UTC (permalink / raw)
  To: Boaz Harrosh; +Cc: Trond Myklebust, linux-nfs, linux-kernel, Dean Hildebrand

This change modifies filelayout_get_dense_offset() to use the functions
in math64.h and thus avoid a 32-bit platform compile error trying to
use do_div() on an s64 type.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Cc: Boaz Harrosh <bharrosh@panasas.com>
---
 fs/nfs/nfs4filelayout.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index e8915d4..3ecb14f 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -49,12 +49,13 @@ filelayout_get_dense_offset(struct nfs4_filelayout_segment *flseg,
 {
 	u32 stripe_width = flseg->stripe_unit * flseg->dsaddr->stripe_count;
 	u64 tmp;
+	u32 rem;
 
 	offset -= flseg->pattern_offset;
-	tmp = offset;
-	do_div(tmp, stripe_width);
+	tmp = div_u64(offset, stripe_width);
+	div_u64_rem(offset, flseg->stripe_unit, &rem);
 
-	return tmp * flseg->stripe_unit + do_div(offset, flseg->stripe_unit);
+	return tmp * flseg->stripe_unit + rem;
 }
 
 /* This function is used by the layout driver to calculate the
-- 
1.6.5.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3] nfs: fix a minor do_div portability issue
  2011-08-11 19:32       ` [PATCH v2] nfs: fix a minor do_div portability issue Chris Metcalf
@ 2011-08-11 20:54         ` Boaz Harrosh
  0 siblings, 0 replies; 7+ messages in thread
From: Boaz Harrosh @ 2011-08-11 20:54 UTC (permalink / raw)
  To: Chris Metcalf; +Cc: Trond Myklebust, linux-nfs, linux-kernel, Dean Hildebrand

On 08/11/2011 12:32 PM, Chris Metcalf wrote:
> This change modifies filelayout_get_dense_offset() to use the functions
> in math64.h and thus avoid a 32-bit platform compile error trying to
> use do_div() on an s64 type.
> 
> Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
> Cc: Boaz Harrosh <bharrosh@panasas.com>

Thanks
Reviewed-by: Boaz Harrosh <bharrosh@panasas.com>

Just if you don't mind a name change. tmp => stripe_no
while at it.

---
From: Chris Metcalf <cmetcalf@tilera.com>
Subject: [PATCH v3] nfs: fix a minor do_div portability issue


This change modifies filelayout_get_dense_offset() to use the functions
in math64.h and thus avoid a 32-bit platform compile error trying to
use do_div() on an s64 type.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Reviewed-by: Boaz Harrosh <bharrosh@panasas.com>
---
 fs/nfs/nfs4filelayout.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index e8915d4..3ecb14f 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -49,12 +49,13 @@ filelayout_get_dense_offset(struct nfs4_filelayout_segment *flseg,
 {
 	u32 stripe_width = flseg->stripe_unit * flseg->dsaddr->stripe_count;
 	u64 stripe_no;
+	u32 rem;
 
 	offset -= flseg->pattern_offset;
-	tmp = offset;
-	do_div(tmp, stripe_width);
+	stripe_no = div_u64(offset, stripe_width);
+	div_u64_rem(offset, flseg->stripe_unit, &rem);
 
-	return tmp * flseg->stripe_unit + do_div(offset, flseg->stripe_unit);
+	return stripe_no * flseg->stripe_unit + rem;
 }
 
 /* This function is used by the layout driver to calculate the
-- 1.6.5.2



^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-08-11 20:54 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-10 17:56 [PATCH] nfs: fix a couple of minor portability issues Chris Metcalf
2011-08-10 22:02 ` Boaz Harrosh
2011-08-11 13:26   ` Chris Metcalf
2011-08-11 18:27     ` Boaz Harrosh
2011-08-11 19:32       ` [PATCH v2] nfs: fix a minor do_div portability issue Chris Metcalf
2011-08-11 20:54         ` [PATCH v3] " Boaz Harrosh
2011-08-11 15:17 ` [PATCH] nfs: fix a couple of minor portability issues Peng Tao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.