Commit 91212507f93778c09d4c1335207b6f4b995f5ad1
Committed by
Alasdair G Kergon
1 parent
69267a30be
Exists in
master
and in
7 other branches
dm: merge max_hw_sector
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 <neilb@suse.de> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Showing 2 changed files with 10 additions and 0 deletions Side-by-side Diff
drivers/md/dm-table.c
... | ... | @@ -99,6 +99,9 @@ |
99 | 99 | lhs->max_segment_size = |
100 | 100 | min_not_zero(lhs->max_segment_size, rhs->max_segment_size); |
101 | 101 | |
102 | + lhs->max_hw_sectors = | |
103 | + min_not_zero(lhs->max_hw_sectors, rhs->max_hw_sectors); | |
104 | + | |
102 | 105 | lhs->seg_boundary_mask = |
103 | 106 | min_not_zero(lhs->seg_boundary_mask, rhs->seg_boundary_mask); |
104 | 107 | |
... | ... | @@ -566,6 +569,9 @@ |
566 | 569 | rs->max_segment_size = |
567 | 570 | min_not_zero(rs->max_segment_size, q->max_segment_size); |
568 | 571 | |
572 | + rs->max_hw_sectors = | |
573 | + min_not_zero(rs->max_hw_sectors, q->max_hw_sectors); | |
574 | + | |
569 | 575 | rs->seg_boundary_mask = |
570 | 576 | min_not_zero(rs->seg_boundary_mask, |
571 | 577 | q->seg_boundary_mask); |
... | ... | @@ -703,6 +709,8 @@ |
703 | 709 | { |
704 | 710 | if (!rs->max_sectors) |
705 | 711 | rs->max_sectors = SAFE_MAX_SECTORS; |
712 | + if (!rs->max_hw_sectors) | |
713 | + rs->max_hw_sectors = SAFE_MAX_SECTORS; | |
706 | 714 | if (!rs->max_phys_segments) |
707 | 715 | rs->max_phys_segments = MAX_PHYS_SEGMENTS; |
708 | 716 | if (!rs->max_hw_segments) |
... | ... | @@ -901,6 +909,7 @@ |
901 | 909 | q->max_hw_segments = t->limits.max_hw_segments; |
902 | 910 | q->hardsect_size = t->limits.hardsect_size; |
903 | 911 | q->max_segment_size = t->limits.max_segment_size; |
912 | + q->max_hw_sectors = t->limits.max_hw_sectors; | |
904 | 913 | q->seg_boundary_mask = t->limits.seg_boundary_mask; |
905 | 914 | q->bounce_pfn = t->limits.bounce_pfn; |
906 | 915 | if (t->limits.no_cluster) |
include/linux/device-mapper.h
... | ... | @@ -115,6 +115,7 @@ |
115 | 115 | unsigned short max_hw_segments; |
116 | 116 | unsigned short hardsect_size; |
117 | 117 | unsigned int max_segment_size; |
118 | + unsigned int max_hw_sectors; | |
118 | 119 | unsigned long seg_boundary_mask; |
119 | 120 | unsigned long bounce_pfn; |
120 | 121 | unsigned char no_cluster; /* inverted so that 0 is default */ |