Commit 91212507f93778c09d4c1335207b6f4b995f5ad1

Authored by Neil Brown
Committed by Alasdair G Kergon
1 parent 69267a30be

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 */