Skip to content

Commit

Permalink
dm raid: fix random optimal_io_size for raid0
Browse files Browse the repository at this point in the history
raid_io_hints() was retrieving the number of data stripes used for the
calculation of io_opt from struct r5conf, which is not defined for raid0
mappings.

Base the calculation on the in-core raid_set structure instead.

Also, adjust to use to_bytes() for the sector -> bytes conversion
throughout.

Signed-off-by: Heinz Mauelshagen <[email protected]>
Signed-off-by: Mike Snitzer <[email protected]>
  • Loading branch information
mauelsha authored and snitm committed Jul 19, 2016
1 parent 094f394 commit 89d3d9a
Showing 1 changed file with 3 additions and 4 deletions.
7 changes: 3 additions & 4 deletions drivers/md/dm-raid.c
Original file line number Diff line number Diff line change
Expand Up @@ -904,7 +904,7 @@ static int validate_region_size(struct raid_set *rs, unsigned long region_size)
/*
* Convert sectors to bytes.
*/
rs->md.bitmap_info.chunksize = (region_size << 9);
rs->md.bitmap_info.chunksize = to_bytes(region_size);

return 0;
}
Expand Down Expand Up @@ -3368,11 +3368,10 @@ static int raid_iterate_devices(struct dm_target *ti,
static void raid_io_hints(struct dm_target *ti, struct queue_limits *limits)
{
struct raid_set *rs = ti->private;
unsigned int chunk_size = rs->md.chunk_sectors << 9;
struct r5conf *conf = rs->md.private;
unsigned int chunk_size = to_bytes(rs->md.chunk_sectors);

blk_limits_io_min(limits, chunk_size);
blk_limits_io_opt(limits, chunk_size * (conf->raid_disks - conf->max_degraded));
blk_limits_io_opt(limits, chunk_size * mddev_data_stripes(rs));
}

static void raid_presuspend(struct dm_target *ti)
Expand Down

0 comments on commit 89d3d9a

Please sign in to comment.