提交 47c5713f 编写于 作者: D David Sterba

btrfs: replace remaining do_div calls with div_u64 variants

Switch to div_u64_rem that does type checking and has more obvious
semantics than do_div.
Signed-off-by: NDavid Sterba <dsterba@suse.cz>
上级 b8b93add
...@@ -8670,7 +8670,7 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr) ...@@ -8670,7 +8670,7 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
min_free <<= 1; min_free <<= 1;
} else if (index == BTRFS_RAID_RAID0) { } else if (index == BTRFS_RAID_RAID0) {
dev_min = fs_devices->rw_devices; dev_min = fs_devices->rw_devices;
do_div(min_free, dev_min); min_free = div64_u64(min_free, dev_min);
} }
/* We need to do this so that we can look at pending chunks */ /* We need to do this so that we can look at pending chunks */
......
...@@ -1673,7 +1673,7 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes, ...@@ -1673,7 +1673,7 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
*/ */
if (*bytes >= align) { if (*bytes >= align) {
tmp = entry->offset - ctl->start + align - 1; tmp = entry->offset - ctl->start + align - 1;
do_div(tmp, align); tmp = div64_u64(tmp, align);
tmp = tmp * align + ctl->start; tmp = tmp * align + ctl->start;
align_off = tmp - entry->offset; align_off = tmp - entry->offset;
} else { } else {
......
...@@ -2328,7 +2328,7 @@ static inline void __scrub_mark_bitmap(struct scrub_parity *sparity, ...@@ -2328,7 +2328,7 @@ static inline void __scrub_mark_bitmap(struct scrub_parity *sparity,
} }
start -= sparity->logic_start; start -= sparity->logic_start;
offset = (int)do_div(start, sparity->stripe_len); start = div_u64_rem(start, sparity->stripe_len, &offset);
offset /= sectorsize; offset /= sectorsize;
nsectors = (int)len / sectorsize; nsectors = (int)len / sectorsize;
...@@ -2627,7 +2627,7 @@ static int get_raid56_logic_offset(u64 physical, int num, ...@@ -2627,7 +2627,7 @@ static int get_raid56_logic_offset(u64 physical, int num,
stripe_nr = div_u64(stripe_nr, nr_data_stripes(map)); stripe_nr = div_u64(stripe_nr, nr_data_stripes(map));
/* Work out the disk rotation on this stripe-set */ /* Work out the disk rotation on this stripe-set */
rot = do_div(stripe_nr, map->num_stripes); stripe_nr = div_u64_rem(stripe_nr, map->num_stripes, &rot);
/* calculate which stripe this data locates */ /* calculate which stripe this data locates */
rot += i; rot += i;
stripe_index = rot % map->num_stripes; stripe_index = rot % map->num_stripes;
......
...@@ -4994,7 +4994,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, ...@@ -4994,7 +4994,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw,
* stripe_nr counts the total number of stripes we have to stride * stripe_nr counts the total number of stripes we have to stride
* to get to this block * to get to this block
*/ */
do_div(stripe_nr, stripe_len); stripe_nr = div64_u64(stripe_nr, stripe_len);
stripe_offset = stripe_nr * stripe_len; stripe_offset = stripe_nr * stripe_len;
BUG_ON(offset < stripe_offset); BUG_ON(offset < stripe_offset);
...@@ -5010,7 +5010,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, ...@@ -5010,7 +5010,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw,
/* allow a write of a full stripe, but make sure we don't /* allow a write of a full stripe, but make sure we don't
* allow straddling of stripes * allow straddling of stripes
*/ */
do_div(raid56_full_stripe_start, full_stripe_len); raid56_full_stripe_start = div64_u64(raid56_full_stripe_start,
full_stripe_len);
raid56_full_stripe_start *= full_stripe_len; raid56_full_stripe_start *= full_stripe_len;
} }
...@@ -5143,7 +5144,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, ...@@ -5143,7 +5144,8 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw,
if (rw & REQ_DISCARD) if (rw & REQ_DISCARD)
num_stripes = min_t(u64, map->num_stripes, num_stripes = min_t(u64, map->num_stripes,
stripe_nr_end - stripe_nr_orig); stripe_nr_end - stripe_nr_orig);
stripe_index = do_div(stripe_nr, map->num_stripes); stripe_nr = div_u64_rem(stripe_nr, map->num_stripes,
&stripe_index);
if (!(rw & (REQ_WRITE | REQ_DISCARD | REQ_GET_READ_MIRRORS))) if (!(rw & (REQ_WRITE | REQ_DISCARD | REQ_GET_READ_MIRRORS)))
mirror_num = 1; mirror_num = 1;
} else if (map->type & BTRFS_BLOCK_GROUP_RAID1) { } else if (map->type & BTRFS_BLOCK_GROUP_RAID1) {
...@@ -5171,7 +5173,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, ...@@ -5171,7 +5173,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw,
} else if (map->type & BTRFS_BLOCK_GROUP_RAID10) { } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) {
int factor = map->num_stripes / map->sub_stripes; int factor = map->num_stripes / map->sub_stripes;
stripe_index = do_div(stripe_nr, factor); stripe_nr = div_u64_rem(stripe_nr, factor, &stripe_index);
stripe_index *= map->sub_stripes; stripe_index *= map->sub_stripes;
if (rw & (REQ_WRITE | REQ_GET_READ_MIRRORS)) if (rw & (REQ_WRITE | REQ_GET_READ_MIRRORS))
...@@ -5208,32 +5210,32 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, ...@@ -5208,32 +5210,32 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw,
stripe_index = 0; stripe_index = 0;
stripe_offset = 0; stripe_offset = 0;
} else { } else {
u64 tmp;
/* /*
* Mirror #0 or #1 means the original data block. * Mirror #0 or #1 means the original data block.
* Mirror #2 is RAID5 parity block. * Mirror #2 is RAID5 parity block.
* Mirror #3 is RAID6 Q block. * Mirror #3 is RAID6 Q block.
*/ */
stripe_index = do_div(stripe_nr, nr_data_stripes(map)); stripe_nr = div_u64_rem(stripe_nr,
nr_data_stripes(map), &stripe_index);
if (mirror_num > 1) if (mirror_num > 1)
stripe_index = nr_data_stripes(map) + stripe_index = nr_data_stripes(map) +
mirror_num - 2; mirror_num - 2;
/* We distribute the parity blocks across stripes */ /* We distribute the parity blocks across stripes */
tmp = stripe_nr + stripe_index; div_u64_rem(stripe_nr + stripe_index, map->num_stripes,
stripe_index = do_div(tmp, map->num_stripes); &stripe_index);
if (!(rw & (REQ_WRITE | REQ_DISCARD | if (!(rw & (REQ_WRITE | REQ_DISCARD |
REQ_GET_READ_MIRRORS)) && mirror_num <= 1) REQ_GET_READ_MIRRORS)) && mirror_num <= 1)
mirror_num = 1; mirror_num = 1;
} }
} else { } else {
/* /*
* after this do_div call, stripe_nr is the number of stripes * after this, stripe_nr is the number of stripes on this
* on this device we have to walk to find the data, and * device we have to walk to find the data, and stripe_index is
* stripe_index is the number of our device in the stripe array * the number of our device in the stripe array
*/ */
stripe_index = do_div(stripe_nr, map->num_stripes); stripe_nr = div_u64_rem(stripe_nr, map->num_stripes,
&stripe_index);
mirror_num = stripe_index + 1; mirror_num = stripe_index + 1;
} }
BUG_ON(stripe_index >= map->num_stripes); BUG_ON(stripe_index >= map->num_stripes);
...@@ -5268,8 +5270,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, ...@@ -5268,8 +5270,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw,
sizeof(int) * tgtdev_indexes); sizeof(int) * tgtdev_indexes);
/* Work out the disk rotation on this stripe-set */ /* Work out the disk rotation on this stripe-set */
tmp = stripe_nr; div_u64_rem(stripe_nr, num_stripes, &rot);
rot = do_div(tmp, num_stripes);
/* Fill in the logical address of each stripe */ /* Fill in the logical address of each stripe */
tmp = stripe_nr * nr_data_stripes(map); tmp = stripe_nr * nr_data_stripes(map);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册