Re: [PATCH v2] Btrfs: use do_div to avoid compile errors on 32bit box

2011-08-20 Thread Josef Bacik
On 08/19/2011 10:17 PM, Liu Bo wrote:
 When doing div operation of u64 type, we need to be careful and use do_div
 to avoid compile ERROR on 32bit box:
 
 ERROR: __udivdi3 [fs/btrfs/btrfs.ko] undefined!
 make[1]: *** [__modpost] Error 1
 
 v1-v2:
 - fix stupid do_div() with type signed integer.
 
 Signed-off-by: Liu Bo liubo2...@cn.fujitsu.com
 ---
  fs/btrfs/extent-tree.c |   11 ++-
  1 files changed, 6 insertions(+), 5 deletions(-)
 
 diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
 index 80d6148..e43e4f1 100644
 --- a/fs/btrfs/extent-tree.c
 +++ b/fs/btrfs/extent-tree.c
 @@ -6735,9 +6735,10 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 
 bytenr)
   struct btrfs_fs_devices *fs_devices = root-fs_info-fs_devices;
   struct btrfs_device *device;
   u64 min_free;
 + u32 dev_min = 1;
 + u32 dev_nr = 0;
 + u32 dup = 2;
   int index;
 - int dev_nr = 0;
 - int dev_min = 1;
   int full = 0;
   int ret = 0;
  
 @@ -6796,14 +6797,14 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 
 bytenr)
   index = get_block_group_index(block_group);
   if (index == 0) {
   dev_min = 4;
 - min_free /= 2;
 + do_div(min_free, dup);

I think Linus was less complaining about how you're dividing here and
more about the fact that you are.  A divide by 2 is the same as a  1.
 I'll send a patch to fix this.  Thanks,

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


Re: [PATCH v2] Btrfs: use do_div to avoid compile errors on 32bit box

2011-08-20 Thread Linus Torvalds
On Sat, Aug 20, 2011 at 5:21 AM, Josef Bacik jo...@redhat.com wrote:

 I think Linus was less complaining about how you're dividing here and
 more about the fact that you are.  A divide by 2 is the same as a  1.
  I'll send a patch to fix this.  Thanks,

Indeed. A single-bit 64-bit double shift may be a few cycles, but
it's still pretty damn cheap. Especially when compared to a 64x32 bit
divide. We absolutely don't want to do do_div() in order to divide
by the constant 2.

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


[PATCH v2] Btrfs: use do_div to avoid compile errors on 32bit box

2011-08-19 Thread Liu Bo
When doing div operation of u64 type, we need to be careful and use do_div
to avoid compile ERROR on 32bit box:

ERROR: __udivdi3 [fs/btrfs/btrfs.ko] undefined!
make[1]: *** [__modpost] Error 1

v1-v2:
- fix stupid do_div() with type signed integer.

Signed-off-by: Liu Bo liubo2...@cn.fujitsu.com
---
 fs/btrfs/extent-tree.c |   11 ++-
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 80d6148..e43e4f1 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -6735,9 +6735,10 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 
bytenr)
struct btrfs_fs_devices *fs_devices = root-fs_info-fs_devices;
struct btrfs_device *device;
u64 min_free;
+   u32 dev_min = 1;
+   u32 dev_nr = 0;
+   u32 dup = 2;
int index;
-   int dev_nr = 0;
-   int dev_min = 1;
int full = 0;
int ret = 0;
 
@@ -6796,14 +6797,14 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 
bytenr)
index = get_block_group_index(block_group);
if (index == 0) {
dev_min = 4;
-   min_free /= 2;
+   do_div(min_free, dup);
} else if (index == 1) {
dev_min = 2;
} else if (index == 2) {
-   min_free *= 2;
+   min_free *= dup;
} else if (index == 3) {
dev_min = fs_devices-rw_devices;
-   min_free /= dev_min;
+   do_div(min_free, dev_min);
}
 
mutex_lock(root-fs_info-chunk_mutex);
-- 
1.6.5.2

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