dm: merge max_hw_sector
Alasdair G Kergon
maintainerPATCH 5/6 dm: merge max_hw_sector
From: Neil Brown <[email protected]>
Make sure dm honours max_hw_sectors of underlying devices
We still have no firm testing evidence in support of this patch but believe it may help to resolve some bug reports. - agk
Signed-off-by Neil Brown <[email protected]>
Signed-off-by Alasdair G Kergon <[email protected]>
--- drivers/md/dm-table.c | 9 +++++++++ include/linux/device-mapper.h | 1 + 2 files changed, 10 insertions(+)
drivers/md/dm-table.c +9 -0
@@ -99,6 +99,9 @@ static void combine_restrictions_low(str lhs->max_segment_size =min_not_zero (lhs->max_segment_size, rhs->max_segment_size); + lhs->max_hw_sectors = +min_not_zero (lhs->max_hw_sectors, rhs->max_hw_sectors); + lhs->seg_boundary_mask =min_not_zero (lhs->seg_boundary_mask, rhs->seg_boundary_mask);
@@ -566,6 +569,9 @@ void dm_set_device_limits(struct dm_targ rs->max_segment_size =min_not_zero (rs->max_segment_size, q->max_segment_size); + rs->max_hw_sectors = +min_not_zero (rs->max_hw_sectors, q->max_hw_sectors); + rs->seg_boundary_mask =min_not_zero (rs->seg_boundary_mask, q->seg_boundary_mask);
@@ -703,6 +709,8 @@ static void check_for_valid_limits(struc {if (!rs->max_sectors) rs->max_sectors =SAFE_MAX_SECTORS ; +if (!rs->max_hw_sectors) + rs->max_hw_sectors =SAFE_MAX_SECTORS ;if (!rs->max_phys_segments) rs->max_phys_segments =MAX_PHYS_SEGMENTS ;if (!rs->max_hw_segments)
@@ -901,6 +909,7 @@ void dm_table_set_restrictions(struct dm q->max_hw_segments = t->limits.max_hw_segments; q->hardsect_size = t->limits.hardsect_size; q->max_segment_size = t->limits.max_segment_size; + q->max_hw_sectors = t->limits.max_hw_sectors; q->seg_boundary_mask = t->limits.seg_boundary_mask; q->bounce_pfn = t->limits.bounce_pfn;if (t->limits.no_cluster)
include/linux/device-mapper.h +1 -0
@@ -115,6 +115,7 @@ struct io_restrictions {unsigned short max_hw_segments;unsigned short hardsect_size;unsigned int max_segment_size; +unsigned int max_hw_sectors;unsigned long seg_boundary_mask;unsigned long bounce_pfn;unsigned char no_cluster;/* inverted so that 0 is default */